Почему лагают запросы между frontend (отдельный прокси) и backend (везде nginx)?

Есть проксирующий сервер в OVH (Roubaix RBX7 - France) и сервер приложения в Мюнхене (ДЦ другой компании). На обоих серверах nginx и CentOS. Серверы достаточно мощные, каналы гигабитные, процессоры на прокси не загружены. Обрабатывают они около 1000 запросов в секунду в пике. По вечерам наступают проблемы: некоторые запросы подвисают на 1-5 секунд. Если запрос не идет на backend, то прокси отмечает мгновенно, проблем нет. Если на backend, то какой-то процент запросов начинает подвисать (грубо говоря 1 из 10), хотя основная масса выполняется так же быстро (ответ в браузер приходит где-то за 50 ms). Если зайти через консоль на прокси, то запросы через curl к backend так же лагают. Если зайти через консоль на backend, то запросы через curl (к самому себе) не лагают. Выходит, дело не в nginx. Более того, если делать запросы к backend с других серверов (через curl) тоже лагов нет. Получается проблема либо в системных настройках проксирующего сервера, либо в канале между OVH и backend. Подскажите, куда копать дальше.
На прокси исходящий плюс входящий трафик около 80 мегабит (канал гигабит). В данный момент (не пик) статус nginx.
Прокси:
Active connections: 11605 
server accepts handled requests
 3016792 3016792 36761410 
Reading: 0 Writing: 41 Waiting: 11560

В пике "Active connections" около 18 тысяч (в nginx 8 worker_processes, 2048 worker_connections, но дело не в nginx, curl тоже лагает).

Backend:
Active connections: 14 
server accepts handled requests
 118781210 118781210 118781116 
Reading: 0 Writing: 13 Waiting: 1
  • Вопрос задан
  • 1193 просмотра
Пригласить эксперта
Ответы на вопрос 5
@Badbuka
Проверьте mtu между сетями, пропингуйте полным пакетом, посмотрите нет ли где-то фрагментации.
Ответ написан
Комментировать
alfss
@alfss
https://career.habr.com/alfss
Какая задержка между серверами в указанный вами период? Ping, traceroute, etc. Проблема сама по себе обычная, бек и фронт должны быть в одном дц.
Ответ написан
@vitaly_il1
DevOps Consulting
Обрабатывают они около 1000 запросов в секунду в пике. По вечерам наступают проблемы:

А по вечерам больше нагрузка?

каналы гигабитные,

что показывает мониторинг - по траффику и кол-ву пакетов? Можно уткнуться в лимит по кол-во пакетов, если много маленьких.

куда копать дальше.

1) системные логи и логи апликаций
2) статистика NIC-ов
3) на прокси сервере - посмотреть на
sysctl fs.file-nr (https://access.redhat.com/documentation/en-us/red_...
впрочем, если дело в этом, то должны быть ошибки в логах
Ответ написан
Комментировать
xenozauros
@xenozauros
Админю, пишу на питоне, вот это вот все...
Проверьте через mtr/ping потерю пакетов. Вполне вероятно, что скорость хорошая, а пакеты между балансером и приложением пропадают.
В целом, чем у вас больше таких сетевых "ног" тем выше вероятность проблемы на какой из них.
Проще и правильнее сблизить балансер (ваш прокси) и приложение максимально, чтоб избежать таких вот неочевидностей
Ответ написан
Комментировать
@Hint Автор вопроса
Во что именно упиралось, так и не понял. Но проблема была решена настройкой keepalive между серверами (было 1000 подключений в секунду от front к back, стало где-то 50). Трафик особо не упал, нагрузка на процессоры не снизилась, но задержка при открытии некоторых новых соединений между серверами пропала. Почему именно она возникала - не знаю. Может в том же OVH какие-то лимиты на оборудовании настроены...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы