首页 > 解决方案 > 从 GCF 连接到 Google Cloud SQL 实例的最佳做法

问题描述

我正在寻找有关如何从我的 GCF 函数中最好地设置对云 Sql 的数据库访问的最佳实践。我正在编写一个应用程序,在该应用程序中我大量使用 Google Cloud Functions 进行业务逻辑,并在后面使用 Google Cloud SQL (Postgres) -end database. 数据库分片在多个 postges 服务器实例上。

至于如何最好地连接,似乎有两种选择。

  1. GCF 确实允许直接访问 Cloud SQL。在这种情况下,我似乎可以为用于执行查询的函数创建一个连接池,但由于我不知道该函数将在内存中保留多长时间,因此不清楚要配置多少个连接。我不确定这将如何工作?我知道每个函数一次使​​用 1 个连接,但是这将如何扩展?如果我收到大量查询,这会成为瓶颈吗?为了获得最佳效率,我绝对想使用某种连接池。

  2. 我可以使用 postgres 客户端库创建一个专用的 http 服务器(我使用 node.js),并让 GCF 函数调用 http 服务器,该服务器又调用 Cloud SQL。该服务器可以处理连接池并 24/7 全天候运行,并且在扩展大量查询时似乎更自然。但是,它确实在此过程中添加了额外的网络调用。我可以在 Google Cloud Run 中运行它,也可以通过 app-engine 进行设置。

我正在寻找可以提供最佳性能并随着我的应用程序扩展而扩展的最佳实践。

我试图在网上对此进行研究,但没有找到任何关于什么是最好的真正建议或文章......只是“如何”文章。

任何反馈表示赞赏。

标签: google-cloud-functionsgoogle-cloud-sqlgoogle-cloud-run

解决方案


这是我对您的建议的建议

  1. 一个函数一次只能处理一个请求。根据您的代码设计,但如果您不同时管理数据库请求,则您的函数中需要一个包含 1 个连接的池。(如果您的代码管理多达 10 个对数据库的并发请求,请创建一个 10 个池)。然后,将此池放入一个全局变量中。第一次使用它时,初始化池(像这样执行延迟加载,比减少冷启动的急切加载更好)并使用它。每次创建 Cloud Functions 实例时,都会初始化池。每次销毁实例时,池都会关闭。如果数据库连接是一个瓶颈,您可以使用 Cloud Functions 上的最大实例参数来保留您的数据库。

  2. 这不是一个好主意。您添加了一个新层,一个新的潜在故障点,您需要维护、更新、修补此 VM,......我不建议您这样做。

我希望我已经回答了你的问题。如果没有,请评论


推荐阅读