-
应用程序引擎Python标准环境(
线程安全
)
-
云SQL MySQL第二代
-
所有请求处理程序都需要数据库并面向用户
-
没有ORM,只有普通SQL
根据
Cloud SQL: Pricing and Access Limits
对于我们的机器类型,云SQL的限制为
每个应用最多4000个并发连接
,更重要的是,在我们的情况下,从App Engine标准环境连接时,限制为
每个应用实例最多60个并发连接
到云SQL实例。(其他限制尚未接近成为瓶颈)
最可能的瓶颈是每个应用程序实例最多有60个并发连接。我没有可用的数字,所以我不确定一个应用实例(F1/B1)是否可以同时为60多个用户提供服务(可能不会)。
当前代码确保为每个请求(需要数据库的地方)创建并最终关闭连接(即使在较早发生异常的情况下也是如此)。连接可能会根据情况更早关闭。我不确定这是否是最佳方法。从
webapp2.RequestHandler
类别:
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
建议一种(线程安全的)重复使用数据库连接(或游标)的方法。我认为这将有助于节省因打开/关闭连接而损失的时间,但却无法确保应用程序实例保持在连接限制内,对吗?
应用程序引擎是否能够自行检测连接问题并自动生成新实例(具有自动缩放功能),而不是将更多流量定向到该实例?
还是应用程序需要自己处理限制?解决方案是什么,以避免用户面临的服务器错误超过给定的限制而随机发生?