Подтвердить что ты не робот

Понимание AWS ELB Latency

Я очень хочу понять, что означает статистическая статистика ELB, предоставляемая CloudWatch.

Согласно документам:

  • Задержка ELB: "Измеряет время, прошедшее через несколько секунд после того, как запрос покидает балансировщик нагрузки до получения ответа".

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_MonitoringLoadBalancerWithCW.html

То, что я не на 100% очищаю, это то, отвечает ли буфер на ELB, прежде чем он будет передан клиенту?

Соответствует ли инструкция в документах:

  • Задержка ELB: "Измеряет время, прошедшее через несколько секунд после того, как запрос покидает балансировщик нагрузки до тех пор, пока ответ не будет получен [клиентом].

Или:

  • Задержка ELB: "Измеряет время, прошедшее через несколько секунд после того, как запрос покидает балансировщик нагрузки, пока не будет получен ответ [с помощью ELB].

Я хочу понять, можно ли объяснить слабую метрику максимальной латентности CloudWatch, имея значительное число пользователей в канальных 3G-соединениях или, если это указывает, указывает на основную проблему, с которой серверы приложений иногда реагируют на замедление.

4b9b3361

Ответ 1

В соответствии с поддержкой AWS:

Поскольку ELB (при настройке с помощью HTTP-прослушивателей) действует как прокси (заголовки запросов поступают и проверяются, а затем отправляются на бэкэнд), метрика задержки начнет тикать, как только заголовки будут отправлены на бэкэнд до тех пор, пока бэкэнд отправляет ответы первого байта.

В случае POST (или любых методов HTTP, когда клиент отправляет дополнительные данные), латентность будет тикать, даже когда клиент загружает данные (поскольку бэкэнд нуждается в полном запросе на отправку ответа) и будет останавливаться один раз бэкенд посылает первый ответ байта. Поэтому, если у вас медленный клиент, отправляющий данные, латентность учитывает время загрузки + время, которое потребовалось для резервного копирования.

Ответ 2

Похоже, что это измерение того, сколько времени сервер берет для генерации своего ответа с точки зрения ELB, независимо от того, как долго может потребоваться, чтобы ELB возвращал ответ клиенту.

Я пришел к такому выводу, просмотрев мои собственные журналы в одном из моих приложений, который использует ELB перед другим балансировщиком нагрузки, HAProxy, который, в свою очередь, находится перед фактическими серверами приложений. (Это может показаться излишним, но это дает нам несколько преимуществ перед использованием только ELB или только HAProxy.)

Здесь настройка, о которой я говорю:

ELB -->>-- EC2+HAProxy -->>-- EC2+Nginx (multipe instances)

HAProxy регистрирует несколько показателей времени по каждому запросу, включая один, называемый Tr.

Tr: время отклика сервера (только для режима HTTP). Это время, прошедшее между моментом, когда TCP-соединение было установлено на сервере, и как только сервер отправил свои полные заголовки ответов. Он чисто показывает время обработки запроса без сетевых издержек из-за передачи данных.

Теперь, придерживайтесь меня для объяснения того, почему так много обсуждений того, что HAProxy делает здесь, имеет отношение к ELB и метрике Latency.

Несмотря на то, что HAProxy регистрирует несколько других таймеров, связанных с тем, сколько времени прокси проводит ожидания различных событий в каждом запросе/ответе, этот Tr таймер - это единственный таймер в моих журналах HAProxy, который аккуратно соответствует значения, зарегистрированные по метке "Латентность" Cloudwatch для ELB поминутно, дают или принимают миллисекунду или два... другие - это дико вариант... поэтому я бы предложил, чтобы этот показатель ELB аналогично регистрирует время отклика вашего сервера приложений, не связанное с дополнительным временем, которое может потребоваться для доставки ответа клиенту.

Кажется очень маловероятным, чтобы HAProxy и ELB были настолько последовательно согласованы, в противном случае, учитывая определение HAProxy соответствующего таймера, если таймер ELB не измеряет что-то очень похожее на то, что HAProxy измеряет, поскольку эти системы буквально измерение производительности одних и тех же точных серверов приложений с одинаковыми точными запросами.

Если ваш сервер приложений не тестирует сам себя и таймеры регистрации собственной производительности, вы можете захотеть добавить их, поскольку (по моим наблюдениям) высокие значения для показателя латентности действительно показывают, что, что ваше приложение может иметь проблему отзывчивости, не связанную с качеством подключения клиента.