【发布时间】: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