从 GCF 连接到 Google Cloud SQL 实例的最佳实践
Best practice for connecting to Google Cloud SQL instances from GCF
我正在寻找有关如何通过我的 GCF 功能最好地设置对云 Sql 的数据库访问的最佳实践。我正在编写一个应用程序,我在其中大量使用 Google Cloud Functions 进行业务逻辑和我使用 Google Cloud SQL (Postgres) 作为后端数据库。数据库在 postges 服务器的多个实例上分片。
关于如何最好地连接,似乎有两种选择。
GCF 允许直接访问云 SQL。在这种情况下,我似乎可以为我用来执行查询的函数创建一个连接池,但由于我不知道该函数将在内存中保留多长时间,因此不清楚要配置多少个连接。我不确定这将如何工作?我知道每个函数一次使用 1 个连接,但这个规模如何?如果我收到大量查询,这会成为瓶颈吗?为了获得最佳效率,我绝对想使用某种连接池。
我可以使用 postgres 客户端库创建一个专用的 http 服务器(我使用 node.js),并让 GCF 函数调用 http 服务器,后者又调用 Cloud SQL。该服务器可以处理连接池并 运行ning 24/7,并且在扩展大量查询时似乎更自然。但是,它确实在此过程中添加了额外的网络调用。我可以在 Google Cloud 运行 中 运行 或通过应用程序引擎进行设置。
我正在寻找能够提供最佳性能并随着我的应用扩展而扩展的最佳实践。
我已尝试在线研究此问题,但尚未找到关于什么是最好的任何真正的建议或文章...只是“如何”文章。
欢迎任何反馈。
这是我对您的建议的建议
一个函数一次只能处理一个请求。根据您的代码设计,但如果您不同时管理数据库请求,则您的函数中需要一个包含 1 个连接的池。 (如果您的代码管理多达 10 个对数据库的并发请求,请创建一个 10 个池)。然后,将这个池放在一个全局变量中。第一次使用它时,初始化池(这样你执行延迟加载,比减少冷启动的急切加载更好)并使用它。每次创建 Cloud Functions 实例时,都会初始化池。每次销毁实例时,池都会关闭。如果数据库连接成为瓶颈,您可以使用 Cloud Functions 上的最大实例参数来保护您的数据库。
这不是个好主意。你添加一个新的层,一个新的潜在故障点,你需要维护,更新,修补这个VM,......我不建议你这样做。
希望我已经回答了你的问题。如果没有,评论一下
我正在寻找有关如何通过我的 GCF 功能最好地设置对云 Sql 的数据库访问的最佳实践。我正在编写一个应用程序,我在其中大量使用 Google Cloud Functions 进行业务逻辑和我使用 Google Cloud SQL (Postgres) 作为后端数据库。数据库在 postges 服务器的多个实例上分片。
关于如何最好地连接,似乎有两种选择。
GCF 允许直接访问云 SQL。在这种情况下,我似乎可以为我用来执行查询的函数创建一个连接池,但由于我不知道该函数将在内存中保留多长时间,因此不清楚要配置多少个连接。我不确定这将如何工作?我知道每个函数一次使用 1 个连接,但这个规模如何?如果我收到大量查询,这会成为瓶颈吗?为了获得最佳效率,我绝对想使用某种连接池。
我可以使用 postgres 客户端库创建一个专用的 http 服务器(我使用 node.js),并让 GCF 函数调用 http 服务器,后者又调用 Cloud SQL。该服务器可以处理连接池并 运行ning 24/7,并且在扩展大量查询时似乎更自然。但是,它确实在此过程中添加了额外的网络调用。我可以在 Google Cloud 运行 中 运行 或通过应用程序引擎进行设置。
我正在寻找能够提供最佳性能并随着我的应用扩展而扩展的最佳实践。
我已尝试在线研究此问题,但尚未找到关于什么是最好的任何真正的建议或文章...只是“如何”文章。
欢迎任何反馈。
这是我对您的建议的建议
一个函数一次只能处理一个请求。根据您的代码设计,但如果您不同时管理数据库请求,则您的函数中需要一个包含 1 个连接的池。 (如果您的代码管理多达 10 个对数据库的并发请求,请创建一个 10 个池)。然后,将这个池放在一个全局变量中。第一次使用它时,初始化池(这样你执行延迟加载,比减少冷启动的急切加载更好)并使用它。每次创建 Cloud Functions 实例时,都会初始化池。每次销毁实例时,池都会关闭。如果数据库连接成为瓶颈,您可以使用 Cloud Functions 上的最大实例参数来保护您的数据库。
这不是个好主意。你添加一个新的层,一个新的潜在故障点,你需要维护,更新,修补这个VM,......我不建议你这样做。
希望我已经回答了你的问题。如果没有,评论一下