【问题标题】:High latency between Client, Google Flex App Engine and Cloud SQL客户端、Google Flex App Engine 和 Cloud SQL 之间的高延迟
【发布时间】:2018-11-24 07:12:44
【问题描述】:

我有一个 Google Flex App Engine 应用程序,它接收带有 JSON 数据的 POST,然后使用 SQLAlchemy 执行插入语句,将 JSON 数据写入 Cloud SQL 数据库。 POST 设备(达拉斯)和 App Engine(美国东部)之间的延迟远高于 300 毫秒,有时甚至超过 1500 毫秒。我相信这可能是由于 INSERT 写入速度不佳,尽管负载几乎不是“荒谬”或任何东西。大约高达 5-8 次读取/秒和 150-300 次写入/秒

使用 Flask、SQLAlchemy、MySQL 5.6(在 Cloud SQL 上)和第二代 Google Flex App Engine 实例。

我的问题是我需要降低延迟,但我不知道是什么原因造成的。我已经对将 json 数据发布到由 Google App Engine 托管的 Flask App 页面的 IP 运行 traceroute 和 ping 命令。 ping 很好,一跳有打嗝,但它只是一个区域。如果我的延迟太高,IP 可能会丢弃 POST。

from api import app
from sqlalchemy import create_engine
from datetime import datetime, timedelta

engine = create_engine(app.config.get("database_uri"))

Class Events(object):
    @staticmethod
    def add(event):
        connection = engine.connect()
        for observation in event["observations"]:
            try:
                connection.execute("""INSERT INTO events (
                    ...
                ) VALUES (
                    %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
                )""", (
                    ...
                ))
            except Exception as ex:
                print(ex)
        connection.close()

这是由以下原因触发的:

@app.route('/', methods=['POST'])
def events_post():
    data = request.json
    if data["secret"] != app.config.get("secret"):
        return
    Events.add(data["data"])
    return "Success"

我在最后尝试了使用和不使用 connection.close() ,这似乎并不重要。这是一个稳定的数据流,因此每次关闭和重新打开连接对于手头的工作来说似乎是资源繁重的。

提前致谢。

【问题讨论】:

  • 添加一些日志记录并在 Stackdriver Logging 中检查时间戳以查看您使用时间的位置:cloud.google.com/appengine/docs/standard/python/logs
  • 这里没有足够的信息供任何人猜测。正如@blueCat 建议的那样,您可以添加日志记录以尝试识别延迟。 sqlalchemy.engine 记录器即使在 INFO 级别也会发出大量信息。也许使用连接池来避免在每次调用时重新创建连接,否则您的代码似乎没问题。它可能是网络或数据库服务器。对于网络,您需要与 Google 支持人员联系。对于数据库,是否有很多索引等会减慢写入速度?您可以尝试切换到新服务器,否则请再次联系 Google 支持。
  • 抱歉没有更新。目前,这已被搁置以处理与手头项目相关的其他事情,我将在未来切换到 Datastore。如果我弄明白了,我会在稍后更新。

标签: python google-app-engine flask google-cloud-sql app-engine-flexible


【解决方案1】:

正如之前的 cmets 所建议的,您需要查看 Stackdriver 上的日志。 特别是 Cloud SQL Instance 操作日志或 MySQL 错误日志。这将使您了解需要微调哪些内容以提高查询性能。正如您所说,这可能是由于 INSERT 写入速度不佳,确认这一点的唯一方法是过滤日志。

对于第 2 代 Google App Engine Flex 实例,延迟受写入器和数据库位置(sending data a long distance introduces latency)的影响。 Cloud SQL 实例和 App Engine 应用程序之间的距离越远,连接到数据库的延迟就越长。

查看此documentation,它可以帮助您配置应用,以便在从 App Engine Flex for Python 应用连接到 Cloud SQL 时更好地扩展。

我希望这有助于回答您的问题。

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 2013-11-05
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2011-12-28
    • 2021-10-26
    相关资源
    最近更新 更多