我们在亚洲和美国有一些客户,在处理POST请求时调用request.data时我们会看到这种奇怪的行为:
我们使用cProfile获得了上述数据,因此应该准确(我认为?)。每个客户端的有效负载在50到700字节之间变化,但似乎没有任何模式(新加坡客户端具有中等大小的POST负载,而中国的有效负载小)
在查看this question之后,我怀疑我们正面临类似的问题,在收到标头后立即处理请求,因此调用request.data会阻塞,直到收到完整的POST有效负载。我猜测中国客户是最慢的,因为GFW减慢了POST负载的传输速度。
我有两个问题:
FWIW,我继承了这个代码库,我的理解可能存在一些差距,但我们的DCOS架构与下图相似。我试图在外部马拉松LB中寻找配置选项以增加缓冲或仅发送完全接收的请求,但我没有找到这样的选项。
看起来我想出了这个!
显然,Marathon LB是HAProxy的包装器,HAProxy有一种机制可以在将其转发到后端之前接收完整的HTTP请求有效负载。将http-buffer-request选项添加到Marathon-LB配置似乎已经成功了!