Архитектура:
У нас есть группа устройств IoT, подключенных через сетевой балансировщик нагрузки AWS (NLB) к нашим внутренним серверам. Это двунаправленный канал (не стиль ответа на запрос, а сообщения, передаваемые от одной стороны к другой).
Цель:
Как сохранить соединения (обе стороны NLB) живыми во время бездействия.
Описание: Часто клиенты переходят в неактивный режим и ничего не отправляют (или не получают) на (или с) серверы. Если это состояние длится более 350 секунд (значение тайм-аута простоя соединения NLB), LB молча уничтожает соединение. Это плохо, потому что мы видим много RST-пакетов повсюду.
Вопросы:
- Я знаю о функции
SO_KEEPALIVE
и могу включить ее на наших внутренних серверах. Это поддерживает связь между внутренними серверами и NLB. Но как насчет клиентов? Пересылают ли NLB пакеты поддержки активности TCP другой стороне? ( Здесь сказано, что нет). Если это не так, как сохранить клиентские соединения открытыми? (В данный момент я думаю отправить пустое сообщение, чтобы сохранить соединение.) - Это поведение специфично для NLB AWS или балансировщики нагрузки обычно работают таким образом?