2010-06-28 4 views
36

(обычно называются проблема C10K)Есть ли современный обзор решений проблемы 10000 клиента/сек

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

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

+0

Тем, кто проголосовал за закрытие: вы прочитали ссылку и вопрос? Есть ли что-то более недавнее, чем в 2006 году, которое говорит о некоторых/всех этих моментах? – Joe

+3

Это не похоже на вопрос, связанный с прогаммой. – Gabe

+6

@Gabe: Как вы думаете, какой-то ИТ-парень поймет разницу между [a] синхронным вводом-выводом и вкусами API? –

ответ

10

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

Thousands of Threads and Blocking IO

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

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

+2

Я уверен, что ваш поставщик оборудования счастлив. – ninjalj

+3

Я больше беспокоюсь о том, чтобы сделать damjan.mk счастливым.Но, пожалуйста, не вводите меня в заблуждение. Этот подход отлично работает на приобретенном ПК магазина, который в наши дни трудно найти с использованием двухъядерного процессора и 2G оперативной памяти. –

+0

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

1

libev запускает несколько тестов против себя и Libevent ...

11

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

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

+13

Что делать, если кто-то хочет написать высокопроизводительную библиотеку, чтобы сэкономить ваши деньги и, возможно, тысячи других? – jweyrich

+1

@jweyrich: я бы не завидовал этой письменной задаче, потому что, вероятно, вы всегда будете играть в перехватывание новых версий o/s-server-hardware версий 4, которые вы поддерживаете, в то время как конкурировать с версиями o/s-server-hardware u не поддерживают. спектр тестов клиентов/серверов/транзакций/пропускной способности для определения «наилучшего» или «самого быстрого» будет огромным и широко варьируется от клиента. работник может сжечь 500 долларов в зарплате и накладных расходах в «высокопроизводительной библиотеке» поиска/оценки всего за несколько часов и до сих пор не имеет проверенного решения. это трудная продажа, чтобы убедить людей не просто купить другую дешевую коробку ... –

+2

Это плохая энергия, которая тратит впустую способ сделать что-то. Мы не должны делать этого сейчас, когда затраты на охрану окружающей среды растут много (вместе с ценами на электроэнергию). Twitter обрабатывает около 800 КБ/с на входящих твитах и ​​требует 100 000 серверов для его обработки - это просто безумный результат этого мышления. – Lothar

5

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

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

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

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

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

Примечание стороны 2:

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

+2

Я согласен с вашими точками, но вам нужно обновить точку безубыточности для инженера-исполнителя. Разумный сервер (8 ядер, 7 ГБ оперативной памяти) стоит US $ 0,68 в час на EC2 Amazon. Вырезание 10 серверов только экономит вам 60 тысяч долларов в год. Это не принесет вам большой производительности. –

1

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

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

+0

Я не могу подтвердить свои результаты прямо сейчас, но я считаю, что это верно, поскольку каждый звонок для опроса требует гораздо большего количества данных (все события, которые вас интересуют) для передачи между пользователем и ядром. Компенсация должна начинаться, когда больше этих событий активны, и появляются новые события (читайте более высокую нагрузку). Я должен сказать, что мне не нравится подход «суперполл», поскольку он добавляет много ненужных системных вызовов для того, чтобы не быть реализацией ядра. Во всяком случае, статья дала мне хорошую информацию. +1. – jweyrich

+0

@jweyrich: Вы видели это? http://sheddingbikes.com/posts/1280882826.html Он предоставил полный код C, а также среду R своих тестов, может помочь поэкспериментировать с этим – racetrack

+0

да, спасибо. Я буду тестировать это, когда я получу свободное время. Подробнее здесь: http://sheddingbikes.com/posts/1281174543.html – jweyrich

1

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

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

+0

Им нужно изменить цель на 1. Или есть еще люди, пытающиеся получить к ней доступ? :-( – jweyrich

+0

I я не говорю, что вы пытаетесь сказать? Я говорю 1M обслуживаемых запросов независимо от количества клиентов. –

+0

Я имел в виду, что ссылка, которую вы опубликовали, недоступна для меня. Отвечает ли ваш запрос на запросы? – jweyrich

2

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

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

Он показывает изрядное количество данных об эффективности и работы конфигурации ОС он должен был сделать, чтобы поддержать 10K и затем 1М соединения.

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