2008-09-16 2 views
8

При написании настраиваемого сервера, какие лучшие методы или методы определяют максимальное количество пользователей, которые могут подключаться к серверу в любой момент времени?Сколько сетевых подключений может поддерживать компьютер?

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

Также, как вы считаете, достаточно ли ограничить количество сетевых подключений определенным количеством пользователей? Или сервер не будет ограничивать количество сетевых подключений и снизить производительность до тех пор, пока время ответа не будет чрезвычайно высоким?

ответ

7

Дэн Кегель сколотить резюме методов для обработки больших объемов сетевых соединений с одного сервера, то здесь: http://www.kegel.com/c10k.html

+0

Этот документ выглядит очень старый (1999) и на самом деле не в курсе. Например, ulimit под Linux (по крайней мере Ubuntu) установлен в неограниченный ... поэтому установка его на 32768, вероятно, не нужна? – 2015-04-09 18:08:37

5

В целом современные серверы могут обрабатывать очень большое количество одновременных подключений. Я работал над системами, имеющими более 8000 одновременно открытых сокетов TCP/IP.

Для управления такой нагрузкой вам потребуется высококачественный сервисный интерфейс, проверьте libevent или libev.

0

Одним из самых больших неудач в соединениях с высоким уровнем параллелизма является фактически задействованный маршрутизатор. Маршрутизаторы, ориентированные на пользователя, обычно имеют небольшую таблицу NAT, что предотвращает фактическое обслуживание маршрутизатора сервером соединений.

Обязательно изучите настройку вашей инфраструктуры маршрутизатора и сетевой инфраструктуры.

0

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

0

Это действительно зависит от вашей операционной системы.

Различные Unix ароматы будут поддерживать «неограниченное» количество дескрипторов файлов/Розетки другие имеют высокие значения, как 32768.

Типичный предел пользователь является 8192, но это, как правило, может быть установлен выше.

Я думаю, что окна более ограничены, но версия сервера может иметь более высокие пределы.

4

Это хороший вопрос, и он определенно является ситуационным. Какой у вас компьютер? У вас есть 4-х гнездовая машина, заполненная Quad Core Xeons, 128 ГБ оперативной памяти и Fibre Channel Connectivity (например, пара Dell R900, которую мы только что купили)? Или вы работаете на p3 550 с 256 МБ ОЗУ и модем 56K? Сколько нагрузки занимает каждое соединение на вашем сервере? Какая реакция приемлема?

Это вопросы, на которые вы должны ответить. Я думаю, что лучший способ найти ответ - через нагрузочное тестирование. Создайте единичный тест ожидаемых (и, возможно, неожиданных) путей, которые ваш код будет выполнять против вашего сервера. Найдите структуру тестирования загрузки, которая позволит вам одновременно имитировать пользователей 10, 100, 1000, 10000, выполняющих эти задачи.

Это сообщит вам, сколько соединений может поддерживать ваш компьютер.

Отличная вещь, связанная с сценарием загрузки/модуляции, заключается в том, что вы можете в ожидании отклика в своих модульных тестах и ​​увеличить нагрузку до тех пор, пока не выйдете за пределы своего времени отклика. Если у вас есть требование поддержки X-номера пользователей с Y-ответом, вы сможете продемонстрировать его с помощью нагрузочных тестов.