Влияние на производительность при создании нового TCP-соединения для каждого сообщения - PullRequest
0 голосов
/ 06 октября 2011

В прошлом наше серверное приложение было разработано таким образом, чтобы клиент создавал одно TCP-соединение, сохранял его в течение неопределенного времени и отправлял сообщения при необходимости.Эти сообщения могут приходить с большими объемами или с более длительными периодами простоя между ними.Сейчас мы переключаемся на другой протокол соединения, где клиент создает новое соединение для каждого сообщения, а затем отключается после отправки.

У меня есть несколько вопросов:

  1. Я знаю, что для установления связи требуется 3 рукопожатия.Но значительны ли эти издержки (процессор, память, пропускная способность и т.По сравнению с созданием нового соединения и отправкой сообщения?

  2. Есть ли другие факторы / соображения, которые мне следует учитывать, если я пытаюсь определить влияние на производительность переключения на этот новыйПротокол соединения по сравнению со старым?

Любая помощь вообще приветствуется.

1 Ответ

1 голос
/ 06 октября 2011

Открытие и закрытие большого количества сеансов TCP может повлиять на брандмауэры отслеживания соединений и балансировщики нагрузки, вызывая их замедление или даже сбой и отклонение соединения.Некоторые из них, например Linux iptables conntrack, имеют умеренные значения по умолчанию для числа отслеживаемых соединений.

В программе могут не хватить доступных номеров локальных портов, если она слишком быстро обрабатывает сообщения.Есть тайм-аут TCP, прежде чем сокет можно считать «закрытым».Часто есть таймер операционной системы для очистки этих закрытых соединений.Если слишком много сокетов открываются слишком быстро, операционная система, возможно, не успела очистить.

Рукопожатие добавляет около 80 байтов к вашей стоимости полосы пропускания.Закрытие соединения TCP также включает пакеты FIN или RST, хотя эти флаги можно комбинировать с пакетом данных.

Задержка в установленном сеансе TCP может быть чуть выше, если для сообщения включен алгоритм Nagle.отправитель.Nagle заставляет ОС ждать больше данных перед отправкой частично заполненного пакета.Закрываемый сеанс TCP сбрасывает все данные.Тот же эффект можно получить в открытом сеансе, отключив Nagle с флагом TCP_NODELAY.

...