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

Что могло вызвать значительные задержки в запросах сервер-сервер с высоким уровнем параллелизма?

Настроить

  1. 4 блейд-сервера в одном шасси, каждое с 48 ядрами и 1 ТБ памяти. Виртуальные машины управляются с помощью Proxmox.
  2. «Родительский» сервис с 7 виртуальными машинами под управлением Linux (Debian) / Apache / PHP, вызывающий несколько микросервисов с использованием cURL (multi) из PHP. Каждому из них назначено 4 ядра и 4 ГБ памяти.
  3. 1 балансировщик нагрузки / кеш для одного из микросервисов (NLP) под управлением Linux (Debian) и Varnish (конфигурация: https://pastebin.com/prE3ZtmN) с 16 процессорами и 16 ГБ памяти.
  4. 6 Vms микросервиса NLP, каждый с 6 процессорами и 12 ГБ памяти.

Проблема

При нагрузочном тестировании родительской службы (с несколькими сотнями одновременных запросов) 7 экземпляров будут генерировать тысячи (> 10k) запросов к балансировщику NLP в секунду.

Во время этого нагрузочного теста балансировщик нагрузки становится медленным / не отвечает - запросы, выполнение которых обычно занимает 1–1000 мс (в зависимости от сложности запроса и всегда <10 мс в случае кеширования), могут занять несколько секунд, если не истекло время ожидания полностью.

Вещи, которые я проверил / исключил как источник проблемы

Мой вывод

Я думаю, что это проблема TCP-соединения Linux - в частности, что-то, связанное с максимальным количеством одновременных подключений и временем ожидания. Это также объясняет, почему другая сетевая активность (например, использование PuTTY) медленная во время нагрузочного теста.

Возможно ли, что я прав в своем предположении? Какие у меня есть варианты решения проблемы?