服务时出现间歇性ELB 4XX错误,紧急时间窗口

时间:2016-11-04 19:40:22

标签: php curl amazon-ec2 tornado

这个问题一直很难调查和诊断。我们有一个亚马逊ALB为多个内部龙卷风服务器(由ECS管理的码头集装箱)提供流量。这些服务器的响应时间非常一致,非常小:通常为4-5毫秒。

然后我们有一个PHP服务器通过ALB使用这个基于龙卷风的服务器。它对ALB地址发出curl请求,但鉴于此环境的性质,我们要求对连接超时和请求超时有严格的容差。分别为50毫秒和100毫秒。由于窗口紧张,如果发生超时,我们也会重试3次。

鉴于基于龙卷风的响应时间仅为5毫秒,我预计这些容差会绰绰有余。另外,我们已经扩展了EC2实例,以便CPU永远不会超过~25%,所以它不应该是CPU限制的东西。

不幸的是,我们看到间歇性的问题,ALB的ELB 4XX错误显着跳跃,直到大约3%的流量在所有4个请求/重试中返回超时。我们也没有在龙卷风服务器上看到任何问题迹象。

我想知道是否有其他人遇到这样的问题,或者是否有人有关于如何调查的建议。 PHP报告超时,ALB报告4XX问题,龙卷风服务器继续显示5毫秒响应并且没有表明任何错误。

以下是来自PHP方面的curl请求:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url,
    CURLOPT_USERAGENT => 'web backend',
    CURLOPT_CONNECTTIMEOUT_MS => 50,
    CURLOPT_TIMEOUT_MS => 100,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => $jsonContent,
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($jsonContent))));
));

$response = curl_exec($curl);

$retry = 0;
while(curl_errno($curl) != 0 && $retry < 3) {
    $response = curl_exec($curl);
    $retry++;
}

// log error

0 个答案:

没有答案