2008-08-20 1 views
20

Кто-нибудь знает хороший и надежный сервер/платформу для массового обслуживания с открытым исходным кодом?Хорошая платформа с открытым исходным кодом?

Я работаю над проектом, который нам нужно обрабатывать миллионы предметов из очереди в день. Моя задача состоит в том, что очередь не является FIFO, что означает, что новые элементы имеют приоритет и могут быть вставлены где-то посередине очереди. Кроме того, для обработки этих элементов мы будем использовать параллельную серверную платформу распространения, поэтому очередь должна быть доступна со многих серверов.

ответ

5

Не совсем открытый с открытым исходным кодом, но довольно открытый: Amazon's Queue service. Очень надежный, очень простой в использовании.

Рубин с открытым исходным кодом: Beanstalkd.

JBoss имеет Java-Messaging-Service поддержка. См. message bean page.

Apache имеет JMS продукт; все продукты Apache имеют открытый исходный код.

+1

Beanstalkd - это демон, написанный на C. Он имеет клиентские библиотеки для нескольких языков. Это далеко не единственное решение для рубинов. – 2008-11-05 23:57:57

3

Мне нравится идея Гая об амазонах SQS однако у него есть большая задержка время между сообщениями. Некоторые benchmarks показывают 15-30 секунд сообщение, которое происходит медленнее, чем сообщение min. Поэтому, если скорость является проблемой, вы можете запустить свой собственный MOM.

Я бы порекомендовал ActiveMQ с Apache. Мы сделали тесты, и его скорости довольно близки к соединениям сокетов. Однако никогда не использовали его в крупном масштабе.

+0

Когда я прочитал те тесты, к которым вы привязались ([переехал сюда] (http://devver.wordpress.com/2008/06/18/speed-with-messaging-matters/)) Я вижу время в 0,4 секунды снаружи AWS и 0,04 секунды от EC2. – chmac 2012-10-11 21:44:57

7

ActiveMQ - довольно хороший продукт: легко настраивается, легко развертывается, легко работать. Clusterizable, многие поддерживаемые протоколы и т. Д. Мы пытаемся его создать, кажется надежным (с его собственными проблемами, но не так много)

Я пробовал JBoss Messaging, но я счел его гораздо более трудным в использовании, и менее зрелый (это рефакторинг JBoss MQ, и он не совсем стабильный и полный ...)

[Изменить] Извините, я не читал ваш вопрос с достаточным вниманием ... Я проверял спецификацию JMS: реализовать приоритетное упорядочение сообщения, но в JMS есть только 10 уровней приоритета, и разработчики не вынуждены их уважать (я не проверял, что делает AMQ) Но управление приоритетом также может быть достигнуто с использованием очередей различного назначения ... [/ Edit]

+0

ActiveMQ 5.4.2 поддерживает приоритеты сообщений. – 2011-02-12 19:36:50

5

Помимо ActiveMQ, который должен работать на ваши требования, вы также можете взглянуть на RabbitMQ или OpenAMQ.

-2

Напишите свой собственный, используя таблицу mysql, проиндексированную на время вставки и приоритет. Хотя это не дает атомной поп-музыки. Маленькая ориентированная на транзакцию магия, чтобы получить атомную поп - поле флага. Обновите верхний элемент с помощью поля нулевого флага, чтобы иметь уникальный идентификатор вашего клиента, зафиксировать, выбрать элемент с уникальным идентификатором, а затем удалить его, когда закончите с этим элементом. Теперь у вас есть не только система очередей, но и панель управления, потому что вы можете видеть, кто работает над тем, что, выбрав все элементы таблицы очереди с ненулевыми флагами.

+0

Есть некоторые достоинства. Если ваш сервис уже зависит от центральной базы данных, и если требования к производительности не очень высоки. – 2009-09-21 22:03:25

15

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

Одним из основных видов использования очереди сообщений является, как правило, получение надежного балансировщика нагрузки - тогда вы можете запустить как можно больше Competing Consumers, так как вы хотите, чтобы все вытягивались из одной очереди, чтобы обеспечить вам массивную масштабируемость.

Если вы отправите маршрут очереди сообщений; то Apache ActiveMQ является самой популярной версией с открытым исходным кодом, и я бы посоветовал начать с этого, получив biggest and most active community (мой личный любимый показатель для выбора между аналогичными проектами с открытым исходным кодом).

Существуют различные способы: implement priority queues with ActiveMQ - основной компромисс - вы можете справиться с задержкой Resequencer pattern introduces или просто использовать селекторы и различные пулы процессов/потоков для разных диапазонов приоритетов - это лучшее решение с низкой задержкой.

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

+0

Спасибо. Я узнал о шаблоне Resequencer из вашего ответа. – 2009-11-17 16:31:48

2

Кстати, другой вопрос к вашему вопросу - это то, что API использовать для разговоров с любой технологией, которую вы выбираете.

Моей рекомендацией с любым промежуточным программным обеспечением или инфраструктурой является попытка установить hide the middleware from your business logic as this article describes. Сохранение вашей бизнес-логики отдельно от промежуточного программного обеспечения позволяет легко изменить реализацию промежуточного программного обеспечения - так как на самом деле не существует универсальных технологий одноразового использования - все они имеют свои плюсы и минусы. Плюс требования меняются - особенно в случае нагрузки, объема, пропускной способности, синхронности и латентности - поэтому иногда вам нужно переключать технологию промежуточного программного обеспечения в течение всего жизненного цикла проекта.

Смежные вопросы