Почему 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. Как соратник, иногда приятно включить опцию для всех настраиваемых возможностей, хотя бы для полноты картины.