这个问题一直很难调查和诊断。我们有一个亚马逊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