Flask request.data很慢

问题描述 投票:0回答:1

我们在亚洲和美国有一些客户,在处理POST请求时调用request.data时我们会看到这种奇怪的行为:

  • 新加坡客户超快(> 10毫秒)
  • 美国客户不是那么快(50 - 100毫秒)
  • 中国客户是最慢的(200+ ms)

我们使用cProfile获得了上述数据,因此应该准确(我认为?)。每个客户端的有效负载在50到700字节之间变化,但似乎没有任何模式(新加坡客户端具有中等大小的POST负载,而中国的有效负载小)

在查看this question之后,我怀疑我们正面临类似的问题,在收到标头后立即处理请求,因此调用request.data会阻塞,直到收到完整的POST有效负载。我猜测中国客户是最慢的,因为GFW减慢了POST负载的传输速度。

我有两个问题:

  1. 分析是否有意义?
  2. 我怎样才能解决这个问题?由于我的API实例被阻塞了额外的时间并浪费了CPU周期,因此上述行为似乎非常低效。如果在发送到API实例之前完全接收到请求,它似乎会更好

FWIW,我继承了这个代码库,我的理解可能存在一些差距,但我们的DCOS架构与下图相似。我试图在外部马拉松LB中寻找配置选项以增加缓冲或仅发送完全接收的请求,但我没有找到这样的选项。

DCOS architecture

docker flask mesos dcos
1个回答
0
投票

看起来我想出了这个!

显然,Marathon LB是HAProxy的包装器,HAProxy有一种机制可以在将其转发到后端之前接收完整的HTTP请求有效负载。将http-buffer-request选项添加到Marathon-LB配置似乎已经成功了!

© www.soinside.com 2019 - 2024. All rights reserved.