处理从App Engine标准环境到Cloud SQL的每个应用程序实例的60个并发连接限制的最佳方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理从App Engine标准环境到Cloud SQL的每个应用程序实例的60个并发连接限制的最佳方法?相关的知识,希望对你有一定的参考价值。

  • App Engine Python标准环境(线程安全)
  • Cloud SQL mysql第二代
  • 所有请求处理程序都需要数据库并且面向用户
  • 没有ORM,只是简单的SQL

根据我们的机器类型Cloud SQL: Pricing and Access Limits,Cloud SQL每个应用程序最多可以有4,000个并发连接,更重要的是在我们的情况下,从App Engine标准环境连接时,每个应用程序实例最多60个并发连接的限制到Cloud 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的答案建议(线程安全)方式重用数据库连接(或游标)。我认为这有助于节省因打开/关闭连接的任何开销而丢失的时间,但是没有保护应用程序实例将保持在连接限制内,对吧?

App Engine是否能够自行检测连接问题并自动生成新实例(使用自动扩展),而不是将更多流量引导到该实例?

或者应用程序是否需要自己处理限制?如何通过超过给定限制来避免随机发生的面向用户的服务器错误的解决方案是什么?

答案

App Engine已经内置了限制它在发送新实例之前将发送给单个实例的请求数量。通过自动缩放,max_concurrent_requests的默认值为8,因此除非出现问题,否则您不太可能在单个实例上达到60个并发请求。

您还应该考虑提高max_concurrent_requests值,因为您可能从单个实例获得的数量超过8个请求。

以上是关于处理从App Engine标准环境到Cloud SQL的每个应用程序实例的60个并发连接限制的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章