Существует ли какой-либо современный обзор решений проблемы 10000 клиент / сек? - PullRequest
35 голосов
/ 28 июня 2010

(обычно называется проблемой C10K)

Существует ли более современный обзор решений проблемы c10k (Последнее обновление: 2 сентября 2006 г.), специально посвященный Linux (epoll, signalfd, eventfd, timerfd ..) и таким библиотекам, как libev или Libevent

Что-то, что обсуждает все решенные и все еще нерешенные проблемы на современном сервере Linux?

Ответы [ 7 ]

11 голосов
/ 04 августа 2010

Проблема C10K обычно предполагает, что вы пытаетесь оптимизировать один сервер, но, как указывается в вашей ссылочной статье, «оборудование больше не является узким местом». Поэтому первым делом нужно убедиться, что это не самый простой и дешевый способ - просто добавить больше аппаратного обеспечения.

Если у нас есть ящик стоимостью 500 долларов, обслуживающий X клиентов в секунду, гораздо эффективнее просто купить еще одну коробку стоимостью 500 долларов, чтобы удвоить нашу пропускную способность, вместо того, чтобы позволить сотруднику сгорбиться, который знает, сколько часов и долларов пытаются выяснить. как выжать больше из оригинальной коробки. Конечно, это предполагает, что наше приложение совместимо с несколькими серверами, что мы знаем, как балансировать нагрузку и т. Д., И т. Д. *

10 голосов
/ 31 июля 2010

По совпадению, всего несколько дней назад, программирование Reddit или, возможно, Hacker News упомянул эту часть:

Тысячи потоков и блокировка ввода-вывода

В первые дниЯва, мои друзья по программированию на C смеялись надо мной за то, что я делал сокет IO с блокирующими потоками;в то время альтернативы не было.В наши дни, с обильной памятью и процессорами, эта стратегия представляется жизнеспособной.

Статья датирована 2008 годом, поэтому она на несколько лет расширяет ваш кругозор.

5 голосов
/ 06 августа 2010

Чтобы ответить на вопрос OP, вы могли бы сказать, что сегодня эквивалентный документ посвящен не оптимизации загрузки одного сервера, а оптимизации всего вашего онлайн-сервиса под нагрузку.С этой точки зрения, количество комбинаций настолько велико, что вы ищете не документ, а живой веб-сайт, который собирает такие архитектуры и структуры.Такой веб-сайт существует, и он называется www.highscalability.com

Примечание 1:

Я бы поспорил с верой в то, что выбрасывать больше оборудования - это долготермин решение:

  • Возможно, стоимость инженера, который "получает" производительность, высока по сравнению со стоимостью одного сервера.Что происходит, когда вы уменьшаете масштаб?Допустим, у вас есть 100 серверов.10-процентное увеличение производительности сервера может сэкономить вам 10 серверов в месяц.

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

Примечание 2:

Темаэтого поста немного вводит в заблуждение.Документ CK10 не пытается решить проблему 10 тыс. Клиентов в секунду.(Количество клиентов в секунду не имеет значения, если вы не определяете рабочую нагрузку наряду с устойчивой пропускной способностью при ограниченной задержке. Я думаю, что Дэн Кегель знал об этом, когда писал этот документ.).Взгляните на это как на сборник подходов к созданию параллельных серверов и микропроцессоров для них.Возможно, что изменилось с того времени до настоящего момента, так это то, что в какой-то момент вы могли предположить, что сервис предназначен для веб-сайта, который обслуживает статические страницы.Сегодня эта служба может быть хранилищем данных NoSQL, кешем, прокси-сервером или одной из сотен частей программного обеспечения сетевой инфраструктуры.

2 голосов
/ 25 марта 2012

Вы также можете взглянуть на эту серию статей:

http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3

Он показывает достаточное количество данных о производительности и работу по настройке ОС, которую он должен был выполнить для поддержки соединений 10 КБ, а затем 1 МБ.

Похоже, что система с 30 ГБ ОЗУ может обрабатывать 1 миллион подключенных клиентов в симуляторе типа социальной сети, используя свободный интерфейс для сервера приложений на основе Erlang.

1 голос
/ 07 августа 2010

Посмотрите на проект RamCloud в Стэнфорде: https://ramcloud.atlassian.net/wiki/display/RAM/RAMCloud

Их цель - 1 000 000 операций RPC / сек / сервер.У них есть многочисленные тесты и комментарии по поводу узких мест, присутствующих в системе, которые не позволяют им достичь своих целей по пропускной способности.

1 голос
/ 07 августа 2010

Я бы порекомендовал Редингу Зеда Шоу poll, epoll, science, and superpoll [1]. Почему epoll - не всегда ответ, и почему иногда даже лучше пойти с опросом, и как собрать лучшее из обоих миров.

[1] http://sheddingbikes.com/posts/1280829388.html

1 голос
/ 01 августа 2010

libev запускает некоторые тесты против себя и libevent ...

...