如何正确连接GCP Cloud Functions与关系数据库

问题描述 投票:0回答:1

云函数可以与无状态 API 很好地配合,但关系数据库连接是有状态的。当无服务器云功能与关系数据库通信时,它可以快速耗尽 RDBMS 池中的可用数据库连接数。发生这种情况是因为云函数的每个实例都打开自己的数据库连接。因此,如果 RDBMS 的可用连接数只有 10-20 个,而云函数实例超过 20 个,则应用程序可能无法正常运行。

为了解决这个问题,应该创建一个中间服务来提供 HTTP 无状态 API,充当处理来自无服务器函数的数据库请求的代理。

AWS推出了RDS代理服务来解决这个问题。使用 Cloud Functions 时,GCP 是否有类似的服务?还是程序员需要自己实现类似的代理服务? GCP 通常如何处理此问题?

google-cloud-platform serverless rdbms
1个回答
0
投票

当一项服务扩展而不是其他服务扩展时,这是一个常见的问题。有多种方法可以缓解该问题。


  • 服务配置

限制每个函数的数据库连接池大小。如果您使用 Cloud Functions 第一代,请将池设置为 1。

如果您使用第二代,您必须根据您的并发参数测试最佳参数。更安全的方法是将池大小设置为等于您的并发值,但您可以测试更低的值。

然后根据您的数据库最大连接数计算云函数的最大实例数:最大实例数 = 最大连接数 / 池大小

更好的实现是利用 实例被杀死时的宽限期来释放实例的连接


  • 创建代理服务

如果您需要扩大服务规模,您应该实施代理服务。配置与之前描述的相同,但它由您的主服务用来在数据库中执行查询。

此设计的主要问题是延迟:您添加至少 10 毫秒来调用附加服务。


  • 横向扩展数据库

最终,您可以扩展数据库。在传统 Cloud SQL 或 AlloyDB 数据库上使用只读副本,仅受写入操作限制,不受读取操作限制。

杀手级解决方案是使用可横向扩展读写的Spanner(兼容PostgreSQL接口)。成本虽然贵,但是技术很棒!

© www.soinside.com 2019 - 2024. All rights reserved.