Прерывистые ошибки ELB 4XX при обслуживании с ограниченным временем ожидания

Эту проблему было очень сложно исследовать и диагностировать. У нас есть amazon ALB, обслуживающий трафик к нескольким внутренним серверам торнадо (в док-контейнерах, управляемых ECS). Время отклика этих серверов очень стабильно и очень мало: обычно 4-5 мс.

Затем у нас есть сервер PHP, который использует этот сервер на основе торнадо через ALB. Это делает запросы curl к адресу ALB, но, учитывая природу этой среды, нам требуются очень жесткие допуски на время ожидания соединения и время ожидания запроса. 50 мс и 100 мс соответственно. Из-за этих узких окон мы также повторяем 3 раза, если тайм-аут все же наступил.

Учитывая, что время отклика на основе торнадо составляет всего 5 мс, я бы ожидал, что этих допусков будет более чем достаточно. Кроме того, мы увеличили количество экземпляров EC2 так, чтобы ЦП никогда не превышал ~ 25%, поэтому это не должно ограничивать ЦП.

К сожалению, мы наблюдаем периодические проблемы, когда ошибки ELB 4XX для ALB значительно возрастают, пока примерно 3% трафика не возвращает время ожидания для всех 4 запросов / повторных попыток. Мы также не видим никаких признаков проблем на сервере торнадо.

Мне интересно, сталкивался ли кто-то еще с подобной проблемой, или есть ли у кого-нибудь предложения о том, как провести расследование. PHP сообщает об истечении времени ожидания, ALB сообщает о проблемах 4XX, а сервер торнадо продолжает показывать ответы в течение 5 мс и не указывает, что что-то не так.

Вот запрос curl со стороны PHP:

$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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]