处理从 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?

根据 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 个请求相比,您从单个实例中获得的收益可能更多。