处理从 App Engine 标准环境到云的每个应用程序实例 60 个并发连接限制的最佳方法 SQL?
Best way of dealing with limit of 60 concurrent connections per app instance from App Engine standard environment to Cloud SQL?
- App Engine Python 标准环境(线程安全)
- 云端SQLMySQL二代
- 所有请求处理程序都需要数据库并且面向用户
- 没有 ORM,只是普通的 SQL
根据 Cloud SQL: Pricing and Access Limits 我们的机器类型 Cloud SQL 有限制 每个应用最多 4,000 个并发连接 ,更重要的是在我们的例子中,从 App Engine 标准环境连接时,每个应用程序实例 到云 SQL 实例的最大并发连接限制为 60 个。 (其他限制还没有成为瓶颈)
最可能的瓶颈是每个应用程序实例最多 60 个并发连接。我没有可用的数字,所以我不确定单个应用程序实例 (F1/B1) 是否可以同时服务超过 60 个用户(可能不会)。
当前代码确保对于每个请求(需要数据库的地方),都会创建一个连接并最终关闭(即使之前发生异常。连接可能会根据情况提前关闭。我是不确定这是否是最佳方法。从 webapp2.RequestHandler
class:
调用的简化函数
def handle_FAW_Request_approve(reqh, ref):
try:
conn = connect_to_cloudsql()
# do queries, maybe updates
# eventually conn.close() earlier if database not needed anymore
# do something else
# return response
finally:
try:
conn.close()
except Exception as err:
# connection never existed or already closed
pass
这个 question 的答案提出了一种(线程安全的)方法来重新使用数据库连接(或游标)。我认为这将有助于节省因 opening/closing 连接的任何开销而丢失的时间,但仍无法保证应用程序实例将保持在连接限制内,对吗?
App Engine 是否能够自行检测连接问题并自动生成新实例(使用自动缩放)而不是将更多流量引导至该实例?
还是APP需要自己处理限额?解决方案是什么,以避免因超过给定限制而随机发生面向用户的服务器错误?
App Engine 内置了在启动新实例之前向单个实例发送多少请求的限制。使用自动缩放,max_concurrent_requests
的默认值为 8,因此除非出现问题,否则您不太可能在单个实例上达到 60 个并发请求。
您还应该考虑提高 max_concurrent_requests
值,因为与 8 个请求相比,您从单个实例中获得的收益可能更多。
- App Engine Python 标准环境(线程安全)
- 云端SQLMySQL二代
- 所有请求处理程序都需要数据库并且面向用户
- 没有 ORM,只是普通的 SQL
根据 Cloud SQL: Pricing and Access Limits 我们的机器类型 Cloud SQL 有限制 每个应用最多 4,000 个并发连接 ,更重要的是在我们的例子中,从 App Engine 标准环境连接时,每个应用程序实例 到云 SQL 实例的最大并发连接限制为 60 个。 (其他限制还没有成为瓶颈)
最可能的瓶颈是每个应用程序实例最多 60 个并发连接。我没有可用的数字,所以我不确定单个应用程序实例 (F1/B1) 是否可以同时服务超过 60 个用户(可能不会)。
当前代码确保对于每个请求(需要数据库的地方),都会创建一个连接并最终关闭(即使之前发生异常。连接可能会根据情况提前关闭。我是不确定这是否是最佳方法。从 webapp2.RequestHandler
class:
def handle_FAW_Request_approve(reqh, ref):
try:
conn = connect_to_cloudsql()
# do queries, maybe updates
# eventually conn.close() earlier if database not needed anymore
# do something else
# return response
finally:
try:
conn.close()
except Exception as err:
# connection never existed or already closed
pass
这个 question 的答案提出了一种(线程安全的)方法来重新使用数据库连接(或游标)。我认为这将有助于节省因 opening/closing 连接的任何开销而丢失的时间,但仍无法保证应用程序实例将保持在连接限制内,对吗?
App Engine 是否能够自行检测连接问题并自动生成新实例(使用自动缩放)而不是将更多流量引导至该实例?
还是APP需要自己处理限额?解决方案是什么,以避免因超过给定限制而随机发生面向用户的服务器错误?
App Engine 内置了在启动新实例之前向单个实例发送多少请求的限制。使用自动缩放,max_concurrent_requests
的默认值为 8,因此除非出现问题,否则您不太可能在单个实例上达到 60 个并发请求。
您还应该考虑提高 max_concurrent_requests
值,因为与 8 个请求相比,您从单个实例中获得的收益可能更多。