Обзор проблемы

В микросервисной архитектуре при росте 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