2012-01-03 2 views
1

При проектировании архитектуры клиент/сервер существует ли какое-либо преимущество для мультиплексирования нескольких подключений от одного и того же процесса к удаленному серверу (т.е. совместного использования одного соединения) против открытия одного соединения на поток/сеанс в клиенте (как это обычно делается при подключении к серверам memcached или серверам баз данных).Соединение за сеанс или мультиплексирование нескольких сеансов через одно соединение

Я знаю, что с каждым подключением связано немного накладных расходов (например, если на сервере имеется 50 000 открытых соединений, которые используют большое количество ОЗУ) это была одна из основных причин, почему facebook создал патч UDP для memcached. Но я не ожидаю, что рядом с этим номером. Может быть, 10 000 в лучшем случае. Также можно сэкономить на установлении соединения tcp/ip и выполнении авторизации, но на данный момент я предпочитаю оставить авторизацию для брандмауэра, как это делает memcached.

Есть ли причины для внедрения мультиплексирования соединений в клиентском/серверном приложении tcp/ip с соединениями менее 10 Кбит/с?

Edit - Детали:

Это для сервера баз данных/клиента, я работаю. Я думаю, что Informix и Oracle действительно позволяют мультиплексирование сеанса через одно соединение tcp/ip. В документации Informix они говорят, что вы можете получить повышение производительности для nonthreaded клиентов (без упоминания о многопоточных клиентов, возможно, это не поточно-реализации.)

+0

Нужно больше деталей. У вас есть код клиента и сервера (предположительно, да)? Почему в любом случае клиентскому процессу потребуется несколько соединений с сервером? Являются ли связи недолговечными или они сохраняются в течение длительного времени? Какая система вы строите? – selbie

+0

@selbie добавил больше подробностей выше – Eloff

+0

Хех, я был таким noob два года назад о ядре Linux. Да, это имеет большое значение, и основная причина заключается в том, что вы можете обрабатывать сообщения, поступающие в мультиплексированные по одному сокету, с гораздо меньшим количеством системных вызовов, чем на тысячи сокетов. Системные вызовы очень дорогие, более 30 тыс. Циклов каждый, если они полностью закрывают кеш L1. Контекстные коммутаторы имеют одинаковую стоимость по той же причине. – Eloff

ответ

1

есть какие-либо преимущества мультиплексирования нескольких соединений против открытия одно соединение на резьбу/сеанс

Да, хотя это зависит от реализации симплекса. Вы, вероятно, знаете о проблемах с брандмауэром, например. FTP, SIP и др., Особенно когда шифрование используется частично. Именно это влияет на решение о том, использовать ли несколько или только одно соединение.

Смежные вопросы