代码之家  ›  专栏  ›  技术社区  ›  Ani

处理从应用引擎标准环境到云SQL的每个应用实例最多60个并发连接的最佳方法?

  •  1
  • Ani  · 技术社区  · 6 年前
    • 应用程序引擎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 建议一种(线程安全的)重复使用数据库连接(或游标)的方法。我认为这将有助于节省因打开/关闭连接而损失的时间,但却无法确保应用程序实例保持在连接限制内,对吗?

    应用程序引擎是否能够自行检测连接问题并自动生成新实例(具有自动缩放功能),而不是将更多流量定向到该实例?

    还是应用程序需要自己处理限制?解决方案是什么,以避免用户面临的服务器错误超过给定的限制而随机发生?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Vadim    6 年前

    App Engine对在启动新实例之前向单个实例发送的请求数量有内置限制。自动缩放时,默认值为 max_concurrent_requests 是8,所以在单个实例上不太可能达到60个并发请求,除非出现真正的问题。

    您还应该考虑提高 最大并发请求数 值,因为您可能可以从单个实例中获得比8个请求更多的信息。