C10k ( — проблема 10 тысяч соединений) — условное название задачи конфигурирования и обслуживания высокопроизводительного сервера, способного обслуживать порядка 10 тыс. соединений одновременно.
Возникло в 1999 году в рамках задачи обслуживания популярного в то время публичного FTP-сервера , его администратор Дэн Кегель обратил внимание, что обслуживающий узел на гигабитном канале по аппаратным показателям должен был бы справляться с нагрузкой в 10 тыс. соединений, но программное обеспечение этого не позволяло.
Ряд известных веб-серверов особо подчёркивали решение задачи C10k, среди таковых Nginx, Lighttpd, Cherokee HTTP Server, Tornado, Node.js, Yaws. Для обхода проблемы используются различные техники: пулирование потоков выполнения (вместо выделения на каждое соединение отдельного потока), применение легковесных процессов, поддержка функций соединений средствами исключительно пользовательского пространства (с минимизацией системных вызовов для обхода ограничений ядра операционной системы). Кроме того, обслуживание одновременно множества соединений является отличной от задачи обслуживания множества запросов в секунду: первое не требует быстрой обработки запросов, но в то же время требует эффективного управления ресурсами.
К началу 2010-х годов благодаря прогрессу в аппаратном обеспечении и в техниках серверного программирования стала возможна поддержка одновременно более миллиона соединений на одном серверном вычислительном узле массового класса (24 ядра ЦПУ, операционная система FreeBSD, сервис WhatsApp на Erlang) и чуть позже была преодолена отметка в 12 млн соединений (MigratoryData, 24 ядра ЦПУ, Linux, Java), в связи с чем появились требования к программному обеспечению обеспечивать уровень производительности по количеству одновременных подключений, обозначаемые нумеронимом C10M — порядка 10 млн соединений.
Примечания
Ссылки
Категория:Веб-серверы