Почему NEST включает в себя протокол TCP?

Я заметил, что у NEST есть возможность установить поддержку TCP.

Какую проблему это пытается решить?

Я думал, что http keep alive должно быть достаточно, что реализовано по умолчанию во внутреннем пуле подключений NEST?

Может кто-то, пожалуйста, пролить свет на различия здесь, и какие сценарии мы должны использовать.

Спасибо

1 ответ

Решение

Не разработчик Nest, но у меня есть управляемый сервис Elasticsearch. Хотя "поддержание активности" звучит ценно, для HTTP- соединения оно более ценно, чем для TCP- соединения.

В Википедии:

Как правило, сообщения TCP Keepalive отправляются каждые 45 или 60 секунд по незанятому TCP-соединению, и соединение пропадает после пропуска 3 последовательных ACK.

Это звучит довольно удобно, но если вы предпримете некоторые измерения, установление TCP-соединений, вероятно, займет менее миллисекунды в одном и том же центре данных.

Учитывая, что мы смотрим на активность Elasticsearch, мы сейчас находимся в области HTTP. И HTTP-соединение может иметь немного больше накладных расходов. Особенно в наши дни и в эпоху безопасных соединений, когда рукопожатие для обмена сертификатами TLS может состоять из нескольких пакетов и принимать порядка ~50 мс.

Таким образом, в то время как TCP keepalive может сэкономить миллисекунды в минуту, HTTP keepalive может сэкономить десятки миллисекунд на запрос. Для приложения, генерирующего более одного HTTP-запроса в минуту, поддержание активности HTTP может сэкономить много времени в совокупности.

С другой стороны, TCP keepalive будет незначительным.

См. Также: связь между продолжительностью HTTP Keep Alive и продолжительностью тайм-аута TCP

Так почему же в Nest есть опция включения поддержки TCP? Возможно, это лучший вопрос для разработчика Nest. Как соратник, иногда приятно включить опцию для всех настраиваемых возможностей, хотя бы для полноты картины.

Другие вопросы по тегам