我有一个Google Flex App Engine App,它接收带有JSON数据的POST,然后使用SQLAlchemy执行insert语句,将JSON数据写入Cloud SQL数据库。POST设备(在达拉斯)和App Engine (美国东部)之间的延迟远高于300ms,有时会超过1500ms。我认为这可能是由于慢的插入写入速度,尽管负载几乎不是‘荒谬’或任何东西。大约高达5-8次/秒读取和150-300次/秒写入
使用Flask、SQLAlchemy、MySQL 5.6 (在Cloud SQL上)和第二代Google Flex App Engine实例。
我的问题是我需要降低延迟,但我找不出是什么原因造成的。我已经运行traceroute和ping命令到IP,该IP将json数据发布到由Google App Engine托管的Flask应用程序页面。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(),似乎都无关紧要。这是一个稳定的数据流,因此对于手头的工作来说,每次关闭和重新打开连接似乎都需要大量的资源。
提前谢谢。
发布于 2018-06-20 04:31:40
正如在前面的评论中所建议的,您需要查看Stackdriver上的日志。尤其是云SQL实例操作日志或MySQL错误日志。这将使您了解哪些内容需要进行微调以提高查询的性能。正如您所说的,这可能是由于插入写入速度较慢,确认这一点的唯一方法是过滤日志。
对于第二代Google App Engine Flex实例,延迟受编写器位置和数据库sending data a long distance introduces latency的影响。云SQL实例和App Engine应用程序之间的距离越大,连接到数据库的延迟就越大。
看看这个documentation,它可以帮助你在从app Engine Flex for Python应用程序连接到Cloud SQL时,配置你的应用程序以获得更好的伸缩性。
我希望这能帮助回答你的问题。
https://stackoverflow.com/questions/50858658
复制相似问题