Обзор проблемы
В микросервисной архитектуре при росте RPS межсервисные вызовы часто становятся узким местом. Если HTTP-клиенты не переиспользуют соединения (Connection reuse), каждый вызов порождает TCP-рукопожатие и перевод сокета в состояние TIME_WAIT на 60 секунд.
Диагностика и анализ
При достижении 15 000 RPS внутри сервисной сети количество сокетов в TIME_WAIT превысило 28 000:
BASH
ss -s
cat /proc/sys/net/ipv4/ip_local_port_range
Решение и оптимизация
1. Включение пула соединений в HTTP-клиентах (MaxIdleConns = 100, IdleConnTimeout = 90s).
2. Тюнинг сетевых параметров ядра Linux:
INI
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15