2013-03-19 33 views
6

Przed ponownym wynalezieniem koła szukam wskazówek do projektów open source, które spełniają te wymagania.Poszukuję trwałej, rozproszonej kolejki pracowników dla erlang

  • zaimplementowana w Erlang chociaż iść lub C są możliwe, jeśli nie ma zbyt dużo bagażu (np. Skręcenia labirynt z zależnościami)
  • lub klient końcowy w Erlang (np: Chcę kod erlang do uruchomienia, gdy wykonuję zadania.)
  • rozsyłanie zadań do węzłów i wywołanie funkcji erlang w celu wykonania zadań.
  • utrzymują miejsca pracy jakoś
  • żadne węzły Mistrzu, nie pojedynczy punkt awarii
  • jednorodna architektura
  • zarządzać kolejkę zadań, które mogą się w kopii zapasowej, bez pomijania pracy na podłodze
  • zadania będącego zrobić więcej niż jeden raz jest ok
  • profil operacyjny jak Riak lub Couchbase (np. uruchomić jeden węzeł, a następnie rozpocznij innych i skieruj je do niego)

Stro preferuj coś lekkiego. W Erlangu jest dużo przepracowanych rozwiązań klasy korporacyjnej, które wydają się zajmować tak długo, jak długo będę się uczyć, ponieważ byłoby to dla mnie odtworzenie od zera (w zasadzie zasadniczo zaprojektowałem rozwiązanie tego problemu w odpowiedzi na kogoś na pytanie na stackoverflow, mogę zbudować to, co opisałem, ale to wydaje się być jedną z tych potrzeb, która jest dokładnie w środku tego, do czego został zaprojektowany erlang.)

Co rozważałem: - ejabbered - więcej struktury wiadomości - rabitmq - teoretycznie robi to, ale za każdym razem, gdy odwiedzam ich stronę, tonę w morzu abstrakcji. Wygląda na to, że jest gotowy zrobić wszystko. Nie potrafię nawet stwierdzić, czy ma jakiś upór.

Edytuj, aby dodać: Oto platforma slajdów na rozproszonym blokowaniu za pomocą szafki. Wygląda na to, że rozwiązuje kluczową część problemu http://www.slideshare.net/knutnesheim/locker-distributed-consistent-locking

Dalsze Edit (jeśli chce się toczyć własnym zakresie.): ja naprawdę szukam czegoś więcej niż RabbitMQ lekkiej. Wiem, że może zrobić to, co chcę, ale wydaje się, że koszt uczenia się jest porównywalny z kosztem zrobienia tego sam, gdzie na końcu niestandardowe rozwiązanie byłoby bliższe temu, czego naprawdę potrzebuję.

Odpowiedz

1

Używamy RabbitMQ do takich zadań. Model wiążący kolejkę RabbitMQ obsługuje elastyczną konfigurację. Publikujesz na giełdzie, a powiązanie zapewnia, że ​​komunikaty dotrą do kolejki. Jeden lub więcej procesów roboczych może subskrybować kolejkę. Kolejki i wymiany mogą być trwałe. Niektórzy mówią, że pełne zrozumienie RabbitMQ zajmuje około pół roku.

+0

Pół roku, aby w pełni zrozumieć RabbitMQ, jest o wiele dłuższy niż miesiąc, więc myślę, że zbudowanie własnego rozwiązania byłoby dla mnie zrozumiałe od samego początku. Myślę, że to moja troska o RabbitMQ. To robi wszystko i jest "klasy Enterprise", ale także ma stromą krzywą uczenia się. Dobrze wiedzieć, że może zrobić to, czego potrzebuję, zrobię trochę więcej śledztwa, aby sprawdzić, czy mogę wymyślić, jak utrzymać i skonfigurować go na moje potrzeby. – nirvana

+1

Wypróbuj RabbitMQ. Dostaniesz o wiele więcej niż z własnego rozwiązania. – Tilman

+1

Uczenie się gry RabbitMQ powinno być o wiele mniejsze niż samodzielne toczenie. Kluczowe części -> Wymiany Przywiąż do kolejek. Wiadomości są publikowane na giełdach, które spływają do oprawionych kolejek. Kolejki są miejscem, w którym otrzymujesz wiadomości z Konsumentami. Istnieje mnóstwo przykładów przy użyciu bibliotek RabbitMQ. – Travis

5

Używamy RabbitMQ związać się wszystkie nasze aplikacje w kompletny zestaw rzeczy. W obrębie całej konfiguracji znajduje się centralny serwer RABBITMQ, do którego systemy tworzą kolejki, trwałe lub tymczasowe. Ze względu na dostępność RABBITMQ, nasz cały system dystrybucyjny działa na nim. Systemy zbudowane przy użyciu różnych technologii wysyłają i odbierają zadania z innych systemów za pośrednictwem RABBITMQ.
Wymyśliliśmy format wiadomości, który może być w JSON lub XML, w którym systemy komunikują się ze sobą. Jest tak szybki.Jednak jest tak wiele szczegółów, których nie będę tu wprowadzać, ale musiałem napisać aplikację OTP na najwyższym kliencie RABBITMQ, aby wyodrębnić wszystkie treści AMQP od programistów erlang. Wszystko, co programista wie, to APi, powiedzmy, że wysyłam żądanie do System A, po prostu przygotuj format wiadomości, M i zadzwoń do API: zeenode_amqp:req(SystemA,Message). Systemy mogą wysyłać żądania w postaci synchronous lub asynchronous.
Co należy wziąć z tego: RABBITMQ jest bardzo dobry dla systemów kolejkowania. Infekcja w naszych konfiguracjach, wiadomości RABBITMQ pushes bezpośrednio na serwery, gdy tylko trafią one na RABBITMQ od klientów. Dzięki starannie zaprojektowanej konwencji nazewnictwa kolejek i wymian oraz uważnemu zrozumieniu różnych modeli przypadków użycia AMQP, będzie idealnie pasować do Ciebie.
Myślę, że można przetasować własne, używając słowników procesów, takich jak Gproc w połączeniu z Erlang Queue Module i Poolboy. W każdym razie, polecam RABBITMQ. daj mi znać, mógłbym wysłać ci kilka bibliotek, żebyś je przestudiował i sprawdził, czy działają dla ciebie. gdy masz już dobrą konfigurację RABBITMQ, dobrze skonfigurowaną po dokumentach na swojej stronie, a następnie masz zainstalowany klient AMLP Erlang, możliwe jest dynamiczne tworzenie kolejek i wymian (bez względu na to, czy chcesz, aby były stałe czy nie, zależy od tego, co robisz). Można nawet grupować serwery RABBITMQ, aby zagwarantować dostępność.

+1

Dobrze wiedzieć RabbitMQ może pracować z JSOn i działać. JEŚLI masz sugestie dotyczące bibliotek RabbitMQ, doceniam to. Jestem świadomy tego, który nazywa się bunny i inni na stronie RabbitMQ. Część mojego problemu polega na tym, że RabbitMQ oferuje tak wiele opcji - na przykład trzy różne strategie klastrowania i trudno jest określić, co jest poprawne. Myślę, że mogę przeczytać więcej dokumentów. Cieszę się, że ludzie używają go do tego rodzaju pracy, to także część mojego zainteresowania. – nirvana