我们在亚洲和美国有一些客户,在处理他们的post请求时,我们看到了这种奇怪的行为:
新加坡客户端速度超快(>10ms)
美国客户机没有那么快(50-100毫秒)
中国客户端最慢(200+毫秒)
我们用cprofile得到了上面的数据,所以应该是准确的(我想?)。每个客户端的负载在50-700字节之间变化,但似乎没有任何模式(新加坡客户端有一个中等大小的post负载,中国客户端有一个小的post负载)
在看了这个问题之后,我怀疑我们遇到了类似的情况,在接收到报头之后立即处理请求,因此调用request.data块直到接收到完整的post负载。我猜中国客户是最慢的,因为gfw减慢了post负载的传输。
我有两个问题:
分析有意义吗?
我怎样才能解决这个问题?上面的行为似乎非常低效,因为我的api示例被阻塞了额外的时间,并且浪费了cpu周期。如果在将请求发送到api示例之前完全接收到请求,似乎效果会更好
fwiw,我继承了这个代码库,在我的理解中可能有一些差距,但我们的dcos架构类似于下图。我试图在外部marathonlb中寻找配置选项,以增加缓冲或只发送完全接收的请求,但没有找到这样的选项。
1条答案
按热度按时间0g0grzrc1#
看来我找到这个了!
显然,marathonlb是haproxy的 Package 器,haproxy有一种机制,可以在将其转发到后端之前接收完整的http请求负载。在marathonlb配置中添加http缓冲区请求选项似乎已经成功了!