2013-03-19 3 views
6

Прежде чем повторно изобретать колесо, я ищу указатели на проекты с открытым исходным кодом, соответствующие этим требованиям.Ищете постоянную, распределенную рабочую очередь для erlang

  • реализован в Эрл, хотя идти или C возможны, если не слишком много багажа (например, скручивание лабиринты зависимостей)
  • конечной точки или клиент в Эрл (например: Я хочу Erlang код для запуска, когда я выполняю задания.)
  • распределяет задания на узлы и вызывает функцию erlang для выполнения заданий.
  • сохраняется рабочие места, как-то
  • нет мастера-узлов, ни единой точки отказа
  • гомогенного архитектура
  • управления очередью заданий, которые могут получить резервные копирование, не опуская рабочие места на полу
  • работы будучи сделал больше, чем один раз в порядке
  • операционный профиль, как Riak или Couchbase (например, запустить один узел, а затем запустить других и указать их к нему)

Стро нг предпочтение чему-то легкому. В erlang есть много перегруженных решений в области корпоративного класса, которые кажутся такими, что им потребуется столько времени, чтобы учиться, поскольку это было бы для меня воссоздать это с нуля (фактически, я в основном архивировал решение этой самой проблемы в ответ кому-то else здесь, здесь, в stackoverflow.Я могу построить то, что я описал, но это похоже на одну из этих потребностей, которая находится прямо в середине того, для чего был разработан erlang.)

Что я рассмотрел: - ejabbered - больше рамки обмена сообщениями - rabitmq - теоретически это делает, но каждый раз, когда я иду на их сайт, я тону в море абстракций. Кажется, все готово. Я даже не могу сказать, имеет ли он какое-то упорство.

Редактировать добавить: Вот слайд-колода на распределенной блокировке с помощью шкафчика. Похоже, он решает ключевую часть проблемы http://www.slideshare.net/knutnesheim/locker-distributed-consistent-locking

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

ответ

1

Мы используем RabbitMQ для выполнения таких задач. Модель привязки Exchange-очереди RabbitMQ поддерживает гибкую конфигурацию. Вы публикуете на обмен, привязка гарантирует, что сообщения поступают в очередь (-ы). Один или несколько рабочих процессов могут подписаться на очередь. Очереди и обмены могут быть постоянными. Некоторые люди говорят, что для полного понимания RabbitMQ требуется около полугода.

+0

Полгода, чтобы полностью понять, что RabbitMQ намного длиннее месяца или около того, я думаю, мне понадобится построить собственное решение, которое я бы полностью понял с самого начала. Я думаю, что это моя проблема с RabbitMQ. Он делает все и является «Оценка предприятия», но также имеет крутую кривую обучения. Хорошо знать, что он может делать то, что мне нужно, я сделаю немного больше исследований, чтобы выяснить, могу ли я понять, как упорствовать и настроить его для моей потребности. – nirvana

+1

Попробуйте RabbitMQ. Вы получите гораздо больше от этого, чем с помощью собственного решения. – Tilman

+1

Изучение RabbitMQ должно быть намного меньше, чем кататься самостоятельно. Ключевые части -> Обмены привязки к очередям. Сообщения публикуются в разделе «Обмен», которые стекают в связанные очереди. В очередях вы получаете сообщения с Потребителями. Существует множество примеров с использованием библиотек RabbitMQ. – Travis

5

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

Мы придумали формат сообщений, который может быть в JSON или XML, в котором системы обмениваются данными друг с другом. Это так быстро.Тем не менее, есть так много деталей, в которые я не буду входить, но мне пришлось написать приложение OTP на вершине RABBITMQ Client, чтобы отвлечь все материалы AMQP от программистов erlang. Все программисты знают APi, скажем, я отправляю запрос System A, просто подготовьте формат сообщения M и вызовите API: zeenode_amqp:req(SystemA,Message). Системы могут отправлять запросы synchronous или asynchronous.

Что должно получиться от этого: RABBITMQ очень хорош для систем массового обслуживания. Infact в нашей настройке, RABBITMQ pushes сообщения прямо на серверы, как только они нажмут RABBITMQ от клиентов. Используя тщательно разработанное соглашение об именах очередей и обменов и тщательно изучая различные модели использования AMQP, он будет идеально подойдет вам.

Я думаю, что можно катить самостоятельно, используя технологические словари, такие как Gproc в сочетании с Erlang Queue Module и Poolboy. В любом случае, я бы порекомендовал RABBITMQ. дайте мне знать, я могу отправить вам несколько библиотек, чтобы вы изучили их и посмотрели, работают ли они на вас. как только у вас будет хорошая настройка RABBITMQ, хорошо настроенная в соответствии с документами на их сайте, а затем у вас будет установлен клиент Erlang amqp, тогда вы сможете динамически создавать очереди и обмены (хотите ли вы, чтобы они были постоянными или нет, зависит от того, что вы делаете). Вы даже можете сгруппировать серверы RABBITMQ, чтобы гарантированная доступность.

+1

Полезно знать, что RabbitMQ может работать с JSOn и сохраняться. Если у вас есть предложения для библиотек RabbitMQ, я ценю это. Я знаю, что один из них называется кролик, а другие - на веб-сайте RabbitMQ. Часть моей проблемы заключается в том, что RabbitMQ предлагает так много вариантов - например, три различные стратегии кластеризации, и трудно понять, что правильно. Наверное, я могу читать больше документов. Рад слышать, как люди используют его для такого рода работы, это часть моей заботы. – nirvana

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