Есть ли какой-нибудь современный обзор решений проблемы 10000 клиент/сек?

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

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

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


person gdamjan    schedule 28.06.2010    source источник
comment
Тем, кто проголосовал за закрытие: вы читали ссылку и собственно вопрос? Есть ли что-нибудь более свежее, чем 2006 год, в котором говорится о некоторых/всех этих пунктах?   -  person Joe    schedule 28.06.2010
comment
Это просто не похоже на вопрос программирования для меня.   -  person Gabe    schedule 28.06.2010
comment
@Gabe: Как вы думаете, какой-нибудь ИТ-специалист поймет разницу между синхронным вводом-выводом и разновидностями API?   -  person L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o&#x    schedule 28.06.2010
comment
Longpoke: Он просит поискать документ, а не совет по программированию.   -  person Gabe    schedule 28.06.2010
comment
Хотя я согласен с Гейбом в отношении природы этого запроса, основная проблема связана с программированием и интересна. Однако, судя только по длине связанного документа, для ответа может потребоваться расширенное обсуждение. Наконец, @damjan.mk, было бы лучше рассказать нам, что означает c10k (то есть возможность обслуживать не менее 10 000 клиентов одновременно с одной машины в веб-контексте). Я пока держу свое близкое голосование, но...   -  person dmckee --- ex-moderator kitten    schedule 30.06.2010
comment
Извините, я думал, что c10k — известная аббревиатура в этих кругах. Я никогда не помню, чтобы быть настолько явным, насколько это возможно.   -  person gdamjan    schedule 30.06.2010
comment
Пожалуйста, не закрывайте этот вопрос. ИМО, это совершенно актуально, и я искал ответ в прошлом. Хотя не повезло :-)   -  person jweyrich    schedule 29.07.2010
comment
@damjan.mk — StackOverflow обслуживает самые разные группы программистов. Рискну предположить, что большинство (и уж точно многие) вообще не знакомы с сетевым программированием. Ваш вопрос не к аудитории сетевых программистов, а к аудитории программистов на StackOverflow.   -  person Omnifarious    schedule 03.08.2010
comment
Я не думаю, что за последние пять лет в технологиях select/poll/epoll/kqueue и т. д. на стороне ядра для c10k произошли значительные улучшения. И, если вам нравится интерфейс libevent, он, вероятно, будет использовать лучшие инструменты для рассматриваемой платформы.   -  person sarnold    schedule 05.08.2010
comment
Этот комментарий просто добавляет статью, которую я считаю важной: Сравнение и оценка механизмов событий epoll, select и poll - cs.uwaterloo.ca/~brecht/papers/getpaper.php?file=ols-2004.pdf   -  person jweyrich    schedule 07.08.2010


Ответы (7)


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

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

person joe snyder    schedule 04.08.2010
comment
Что, если кто-то захочет написать высокопроизводительную библиотеку, чтобы сэкономить ваши деньги и, возможно, тысячи других? - person jweyrich; 05.08.2010
comment
@jweyrich: я бы не позавидовал этой задаче написания, потому что вы, вероятно, постоянно будете догонять новые версии o/s-server-hardware 4 конфигураций, которые вы поддерживаете, конкурируя с версиями o/s-server-hardware u не поддерживаю. Спектр тестов клиентов/серверов/транзакций/пропускной способности для определения лучших или самых быстрых будет огромным и сильно различаться в зависимости от клиента. сотрудник может потратить 500 долларов на зарплату и накладные расходы на высокопроизводительный поиск/оценку библиотеки всего за несколько часов, и все еще не иметь проверенного решения. сложно убедить людей не покупать еще одну дешевую коробку... - person joe snyder; 05.08.2010
comment
Это плохой способ тратить энергию. Мы не должны делать этого сейчас, когда стоимость окружающей среды сильно возрастает (вместе с ценами на электроэнергию). Твиттер обрабатывает около 800 КБ/с входящих твитов и нуждается в 100 000 серверов для обработки — это просто безумный результат такого мышления. - person Lothar; 28.03.2014

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

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

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

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

person Carl Smotricz    schedule 31.07.2010
comment
Я уверен, что ваш поставщик оборудования доволен. - person ninjalj; 31.07.2010
comment
Я больше озабочен тем, чтобы сделать damjan.mk счастливым. Но, пожалуйста, не поймите неправильно мой комментарий: этот подход отлично работает на обычном ПК, купленном в магазине, который в наши дни трудно найти с менее чем двухъядерным процессором и 2 ГБ оперативной памяти. - person Carl Smotricz; 01.08.2010
comment
Я думаю, что смысл презентации в том, что вы можете использовать тысячи потоков, и для этого больше не требуется более мощное оборудование. Ваше приложение станет привязанным к вводу-выводу или процессору независимо от выбора между асинхронным или многопоточным вводом-выводом. - person Dobes Vandermeer; 24.03.2012

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

Боковое примечание 1:

Я бы возражал против убеждения, что добавление большего количества оборудования — это долгосрочное решение:

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

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

Дополнительное примечание 2:

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

person carlsborg    schedule 06.08.2010
comment
Я согласен с вашими пунктами, но вам нужно обновить точку безубыточности для инженера по производительности. Приемлемый сервер (8 ядер, 7 ГБ ОЗУ) стоит 0,68 доллара США в час на Amazon EC2. Сокращение 10 серверов экономит вам всего 60 тысяч долларов в год. Это не поможет вам стать инженером по производительности. - person Ken Fox; 13.08.2010

Вы также можете ознакомиться с этой серией статей:

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

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

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

person Dobes Vandermeer    schedule 25.03.2012

libev проводит несколько тестов против себя и libevent...

person rogerdpack    schedule 01.08.2010

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

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

person racetrack    schedule 06.08.2010
comment
Я не могу подтвердить его результаты прямо сейчас, но я верю, что это правда, поскольку каждый вызов опроса требует передачи гораздо большего количества данных (все интересующие вас события) между пользователем и пространством ядра. Компенсация должна начинаться, когда активны больше этих событий и происходит больше новых событий (читай, более высокая нагрузка). Я должен сказать, что мне не нравится подход суперопроса, так как он добавляет много ненужных системных вызовов из-за того, что не является реализацией ядра. В любом случае, статья дала мне хорошее представление. +1. - person jweyrich; 07.08.2010
comment
@jweyrich: ты это видел? sheddingbikes.com/posts/1280882826.html Он предоставил полный код C, а также среда R его тестов, может помочь поэкспериментировать с этим самостоятельно - person racetrack; 07.08.2010
comment
Да, спасибо. Буду тестировать, когда будет свободное время. Подробнее здесь: sheddingbikes.com/posts/1281174543.html - person jweyrich; 07.08.2010

Взгляните на проект RamCloud в Стэнфорде: https://ramcloud.atlassian.net/wiki/display/RAM/RAMCloud

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

person Noah Watkins    schedule 06.08.2010
comment
Им следует изменить свою цель на 1. Или есть еще люди, пытающиеся получить к ней доступ? :-( - person jweyrich; 07.08.2010
comment
Я не понимаю. Что ты хочешь этим сказать? Я говорю об 1 млн обслуживаемых запросов независимо от количества клиентов. - person Noah Watkins; 07.08.2010
comment
Я имел в виду, что ссылка, которую вы разместили, недоступна для меня. Он отвечает на ваши запросы? Тайм-ауты здесь. - person jweyrich; 07.08.2010
comment
О, ха-ха... Да, в Стэнфорде сейчас лето. Никаких системных администраторов :P - person Noah Watkins; 07.08.2010