Назад | Перейти на главную страницу

Запросы на включение и выключение занимают очень много времени в моей системе

EDITED: у меня есть проблема в моей системе AWS. На каждые несколько запросов требуется почти 130 секунд. Когда я говорю несколько, я имею в виду от 5 до 25 или около того. Обычно, если вы отменяете медленный запрос и отправляете его снова, он просто быстро отвечает. Я также заметил, что это происходит с ЛЮБЫМ запросом, а не только с конкретными. Серверы и внутренняя часть не выглядят перегруженными. система выглядит следующим образом:

ALB with sticky sessions | 2 Web servers | DB on RDS

Система при использовании curl в большинстве случаев отвечает нормально, но когда это занимает много времени, это результат ответа:

Это время измерения завитков по любому URL-адресу.

    time_namelookup:  0.004136
       time_connect:  130.117558
    time_appconnect:  130.125254
   time_pretransfer:  130.125340
      time_redirect:  0.000000
 time_starttransfer:  130.172553
                    ----------
         time_total:  130.172615

Помимо time_connect, запрос в порядке в том смысле, что после этого страница загружается. нормальное время отклика системы составляет менее 0,5 секунды.

Я читал об этом, и в документации указано time_connect, относится к

"time_connect - это трехстороннее рукопожатие TCP с точки зрения клиента. Оно заканчивается сразу после того, как клиент отправляет ACK - он не включает время, необходимое для того, чтобы этот ACK достиг сервера. Он должен быть близок к времени приема-передачи. (RTT) на сервер ... "

Это было взято из Вот.

Добавлено: Сама система - это nginx-Python, работающий на экземплярах ec2 с базой данных MySQL на RDS, и она обслуживает статический контент из s3, и пользователи также могут загружать свои собственные файлы. изнутри сервера (экземпляры nginx-python ec2) на локальном хосте curl всегда FINE, это никогда не занимает ДОЛГОЕ ВРЕМЯ. Это наводит меня на мысль, что это что-то связано с LB и nginx, прослушивающими хосты python.

Добавлено: я также попытался оставить только одну из машин в бэкэнде, и проблема не исчезла.

Я не могу найти ничего значимого в AWS Cloudwatch, журналах приложений или мониторинге БД. Есть идеи о том, что мне следует изучить или как устранить эту проблему?

ИЗМЕНИТЬ 3 благодаря приведенному ниже комментарию:

# curl -v -I -L -k -w "@time.txt" -s "https://my-site.com/url/"
*   Trying "
*   Trying IP.ONE.from.AWS...
* connect to IP.ONE.from.AWS port 443 failed: Connection timed out
* TCP_NODELAY set
* Connected to my-site.com (IP.TWO.from.AWS) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt

IP-ONE-from-AWS и IP-TWO-from-AWS - это IP-адреса из региона AWS, к которому я должен подключиться.

Вы разместили свой балансировщик нагрузки в одной общедоступной подсети и одной частной подсети, что является недопустимой конфигурацией и приведет к поведению, аналогичному тому, что вы наблюдаете, потому что балансировщику назначается по крайней мере один общедоступный IP-адрес для каждой подсети, к которой он подключен. .. но по определению общедоступные IP-адреса не работают, если подсеть не является общедоступной.

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

В качестве альтернативы вы, возможно, намеревались разместить балансировщик в двух общедоступных подсетях, но одна из них имеет неправильно настроенную таблицу маршрутов VPC или сетевой ACL, которые имеют такой же чистый эффект и блокируют трафик при подключении к этому IP-адресу.