Проблема C10k — это проблема оптимизации сетевых сокетов для одновременной обработки большого количества клиентов. [1] Название C10k — это нумероним для одновременной обработки десяти тысяч соединений. [2] Обработка множества одновременных соединений — это проблема, отличная от обработки множества запросов в секунду : последняя требует высокой пропускной способности (их быстрой обработки), в то время как первая не обязательно должна быть быстрой, но требует эффективного планирования соединений.
Проблема оптимизации сервера сокетов была изучена, поскольку необходимо учитывать ряд факторов, чтобы веб-сервер мог поддерживать множество клиентов. Это может включать сочетание ограничений операционной системы и ограничений программного обеспечения веб-сервера. В зависимости от объема предоставляемых услуг и возможностей операционной системы, а также аппаратных соображений, таких как возможности многопроцессорной обработки, может быть предпочтительна многопоточная модель или однопоточная модель . Одновременно с этим аспектом, который включает соображения относительно управления памятью (обычно связанные с операционной системой), подразумеваемые стратегии относятся к самым разным аспектам управления вводом-выводом. [2]
Термин C10k был придуман в 1999 году инженером-программистом Дэном Кегелем [3] [4] со ссылкой на FTP-хост Simtel , cdrom.com , обслуживавший 10 000 клиентов одновременно по Ethernet со скоростью 1 гигабит в секунду в том году. [1] С тех пор этот термин использовался для общей проблемы большого количества клиентов, с похожими нумеронами для большего количества подключений, в последнее время «C10M» в 2010-х годах для обозначения 10 миллионов одновременных подключений. [5]
К началу 2010-х годов стали возможны миллионы подключений на одном стандартном сервере высотой 1U, монтируемом в стойку: более 2 миллионов подключений ( WhatsApp , 24 ядра, с использованием Erlang на FreeBSD ) [6] [7] и 10–12 миллионов подключений (MigratoryData, 12 ядер, с использованием Java на Linux ). [5] [8]
Распространенные приложения с очень большим количеством подключений включают в себя серверы общего пользования, которые должны обслуживать тысячи или даже миллионы пользователей одновременно, такие как файловые серверы , FTP-серверы , прокси-серверы , веб-серверы и балансировщики нагрузки . [9] [5]
Около десяти лет назад Дэниел Кегель, известный инженер-программист, … Манифест Кегеля C10K … решающий проблему C10K 10 000 одновременных подключений, nginx …
компьютеры тоже большие. Вы можете купить машину на 500 МГц с 1 гигабайтом оперативной памяти и шестью картами Ethernet 100 Мбит/с примерно за 3000 долларов. Давайте посмотрим — при 10000 клиентов это 50 кГц, 100 Кбайт и 60 Кбит/с на клиента. Не должно потребоваться больше лошадиных сил, чтобы взять четыре килобайта с диска и отправить их в сеть раз в секунду для каждого из десяти тысяч клиентов. (Кстати, это составляет 0,30 доллара за клиента. Те лицензионные сборы в размере 100 долларов за клиента, которые взимают некоторые операционные системы, начинают казаться немного тяжелыми!) Так что оборудование больше не является узким местом.
этот раз мы также хотели поделиться с вами некоторыми техническими подробностями об оборудовании, ОС и программном обеспечении: hw.machine: amd64 hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz hw.ncpu: 24 hw.physmem: 103062118400 hw.usermem: 100556451840