Как сохранить соединения TCP в сети AWS - PullRequest
0 голосов
/ 10 октября 2019

Архитектура:
У нас есть группа устройств IoT, подключенных через сетевой балансировщик нагрузки AWS (NLB) к нашим внутренним серверам. Это двунаправленный канал (не стиль ответа на запрос, а сообщения, передаваемые от одной стороны к другой).

Цель:
Как сохранить соединения (обе стороны NLB) живыми во время бездействия.

Описание: Часто клиенты переходят в неактивный режим и ничего не отправляют (или не получают) на (или с) серверы. Если это состояние длится более 350 секунд (значение тайм-аута простоя соединения NLB), LB молча уничтожает соединение. Это плохо, потому что мы видим много RST-пакетов повсюду.

Вопросы:

  1. Я знаю о функции SO_KEEPALIVE и могу включить ее на наших внутренних серверах. Это поддерживает связь между внутренними серверами и NLB. Но как насчет клиентов? Пересылают ли NLB пакеты поддержки активности TCP другой стороне? ( Здесь сказано, что нет). Если это не так, как сохранить клиентские соединения открытыми? (В данный момент я думаю отправить пустое сообщение, чтобы сохранить соединение.)
  2. Это поведение специфично для NLB AWS или балансировщики нагрузки обычно работают таким образом?

1 Ответ

0 голосов
/ 11 октября 2019

Не ответ, просто документировать то, что я нашел / сделал:

  1. NELB не пересылают пакеты поддержки активности. Это означает, что вы должны включить их как на сервере, так и на клиентах.
  2. Тайм-аут NELB не может быть изменен. это 350 секунд
  3. Я не мог найти способ подделать пустой TCP-пакет, чтобы обмануть LB и направить его на другую сторону LB.

В концемы реализовали функцию поддержания активности на уровне приложений (периодически отправляя пустое сообщение клиентам.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...