AWS Балансировщик нагрузки, вызывающий медленные запросы API - PullRequest
1 голос
/ 06 августа 2020

Мои запросы API выполняются очень медленно при вызове через https через мой AWS elasti c балансировщик нагрузки. Как лучше всего выяснить, что мне нужно сделать, чтобы мой балансировщик нагрузки стал более эффективным? Я использую балансировщик нагрузки специально для HTTP и запускаю экземпляр ec2 с HTTP-сервером за ним.

AWS elasti c балансировщик нагрузки в eu-central-1a, eu-central-1b . Экземпляр EC2 в eu-central-1a - это c5.xlarge, на котором размещен http-сервер.

Когда я делаю запросы API из Восточного побережья США к балансировщику нагрузки через вызов HTTPS, он работает, но ужасно медленно . В лучшем случае это 400 мс, а примерно в 20% случаев он увеличивается до 800-1500 мс.

Когда я делаю запросы API из Восточного побережья США напрямую к экземпляру EC2 через HTTP, полностью минуя балансировщик нагрузки, это супер быстрый. Почти всегда 130–140 мс и редко скачки.

ПРИМЕЧАНИЕ. Я использую балансировщик нагрузки только для поддержки HTTPS, меня не особо волнует (прямо сейчас) фактическая балансировка нагрузки между несколькими бэкэндами. На данный момент у меня только один бэкэнд. Все мои входящие звонки будут поступать с восточного побережья США, и мой сервер должен пока оставаться в Европе. Итак, да, я мог бы переместить свой сервер в Восточное побережье США, чтобы звонки поступали в одном регионе, но я не хочу этого делать по другим причинам.

Вопросы и возможные решения:

  • Я выбрал балансировщик нагрузки приложения, верно?
  • Как я могу определить, виновата ли моя конфигурация в ее медленной работе?
  • Следует ли переместить балансировщик нагрузки в Восточное побережье США, откуда будут звонить клиенты? И оставьте экземпляр EC2 в eu-central-1a?
  • В моем экземпляре ec2 (c5.xlarge) не было абсолютно ничего запущенного, кроме http-сервера, поэтому я знаю, что он не перегружается из-за использования ЦП и памяти. Подходит ли мой тип инстанса для подключения к балансировщику нагрузки?

Проблема решена:

  • Получил некоторую помощь от ребят из отдела разработки. В консоли Route 53 он удалил две записи A, которые я создал в мастере настройки, и заменил их записью CNAME прямо на мой псевдоним. Что было странно, волшебник мне этого не позволил. Мне пришлось использовать «старую версию» Route 53, где она позволяла мне вводить текст прямо в запись.
  • Производительность сейчас отличная. Первый запрос при установке безопасного соединения занимает несколько сотен миллисекунд, но каждый последующий запрос составляет ~ 130 мсек. И это от восточного побережья США до Франкфурта, Германия. Сейчас работает, как ожидалось.
  • Я попытался переместить балансировщик нагрузки в другой регион, но AWS не позволяет этого.

1 Ответ

1 голос
/ 06 августа 2020

Для минимальной задержки вам потребуется кратчайшее расстояние между клиентом и серверами, используя облачность Я могу видеть даже непосредственно между AWS регионами на AWS магистрали (это AWS частная сеть) существует задержка 95.22ms. Для publi c inte rnet это будет еще больше.

Если вы не можете в настоящее время переместить экземпляры в другой регион, задержка все равно будет применяться. Однако я бы посоветовал взглянуть на CloudFront, который является службой CDN AWS.

Сеть доставки контента Amazon CloudFront масштабируется и распространяется по всему миру. Сеть CloudFront имеет 216 точек присутствия (PoP) и использует высоконадежную магистральную сеть Amazon для обеспечения превосходной производительности и доступности для ваших конечных пользователей.

Основной функцией CloudFront является локальное кэширование объекты внешнего интерфейса (изображения, css, статистика c HTML), если вы можете кэшировать любой из этих объектов, ваш пользовательский опыт значительно улучшится. Многие сайты будут использовать эту службу для кэширования многих c статических или редко изменяющихся частей своего сайта, таких как домашняя страница.

Если части стат c страницы являются динамическими c, можете ли вы посмотреть на загрузку их асинхронно после загрузки начальной страницы? Это дает пользователю представление о том, что сайт загружается, в то время как части страницы все еще загружаются после этого.

Вы также получите выгоду от улучшений производительности CloudFront, таких как использование магистрали AWS для получения улучшена задержка между местоположением PoP пользователя и целевой конечной точкой.

Несколько ссылок, которые могут быть вам интересны:

...