2013-03-19 19 views
6

Prima di reinventare la ruota, sto cercando dei riferimenti a progetti open source che soddisfino questi requisiti.Ricerca di coda persistente, distribuita, di lavoro per erlang

  • implementato in Erlang se andare o C sono possibili, se non c'è troppo bagaglio (ad esempio:. Torcendo labirinto delle dipendenze)
  • endpoint o cliente in Erlang (Ad esempio: voglio codice erlang da eseguire quando eseguo i lavori.)
  • distribuire i lavori ai nodi e chiamare alcune funzioni di erlang per eseguire i lavori.
  • persistono i posti di lavoro in qualche modo
  • senza nodi master, nessun single point of failure
  • architettura omogenea
  • gestire una coda di posti di lavoro che possono ottenere il backup, senza far cadere i lavori sul pavimento
  • un lavoro di essere fatto più volte è ok
  • profilo operativo come Riak o Couchbase (Es:. iniziare un nodo, quindi avviare altri e li punto ad esso)

Stro ng preferenza per qualcosa di leggero. Ci sono un sacco di soluzioni per il business grade esagerate là fuori in erlang che sembrano impiegherebbero tanto tempo per imparare come sarebbe per me ricreare questo da zero (in effetti, ho praticamente architettato una soluzione a questo problema in risposta a qualcuno la domanda di else qui sullo stackoverflow.Posso costruire quello che ho descritto, ma questo sembra uno di quei bisogni che è proprio nel mezzo di ciò per cui è stato progettato erlang.)

Quello che ho preso in considerazione: - ejabberato - altro di un quadro di messaggistica - rabitmq - teoricamente lo fa, ma ogni volta che vado sul loro sito web affogo in un mare di astrazioni. Sembra pronto a fare tutto. Non posso nemmeno dire se ha qualche tipo di persistenza.

Modifica per aggiungere: Ecco un gruppo di diapositive su blocco distribuito utilizzando l'armadietto. Sembra che risolve una parte fondamentale del problema http://www.slideshare.net/knutnesheim/locker-distributed-consistent-locking

Ulteriori Edit (se uno vuole rotolare il proprio.): sono davvero alla ricerca di qualcosa di più leggero di RabbitMQ. So che può fare quello che voglio, ma sembra che il costo nell'apprendimento sia paragonabile al costo di farlo da solo, dove alla fine la soluzione personalizzata sarebbe più vicina a ciò di cui ho veramente bisogno.

risposta

1

Usiamo RabbitMQ per compiti come questo. Il modello di scambio code in scambio con RabbitMQ supporta la configurazione flessibile. Pubblichi in uno scambio, l'associazione si assicura che i messaggi arrivino nella coda (s). Uno o più processi di lavoro possono iscriversi a una coda. Le code e gli scambi possono essere persistenti. Alcuni dicono che ci vuole circa mezzo anno per capire pienamente RabbitMQ.

+0

Un anno e mezzo per comprendere pienamente RabbitMQ è molto più lungo del mese o così penso che mi servirebbe per costruire la mia soluzione, che capirò fin dall'inizio. Penso che sia la mia preoccupazione per RabbitMQ. Lo fa tutto ed è "Enterprise grade", ma ha anche una curva di apprendimento ripida. Buono a sapere che può fare ciò di cui ho bisogno, farò un po 'più di indagini per vedere se riesco a capire come persistere e configurarlo per il mio bisogno. – nirvana

+1

Prova RabbitMQ. Ne ricaverete molto di più che con la vostra soluzione. – Tilman

+1

Learning RabbitMQ dovrebbe essere molto meno che rotolare il tuo. Parti chiave -> Scambi Bind to Queues. I messaggi sono pubblicati su Exchanges, che scendono verso le code legate. Le code sono dove ricevi i messaggi con i consumatori. Ci sono un sacco di esempi usando le librerie RabbitMQ. – Travis

5

Utilizziamo RABBITMQ per collegare tutte le nostre applicazioni a un set completo di cose. All'interno dell'intero setup è presente un server RABBITMQ centrale a cui i sistemi creano code, sia persistenti che temporanee. Grazie alla disponibilità di RABBITMQ, l'intero sistema di distribuzione viene eseguito su di esso. I sistemi realizzati con tecnologie diverse inviano e ricevono attività da altri sistemi tramite RABBITMQ.

Abbiamo creato un formato messaggio, che può essere in JSON o XML in cui i sistemi comunicano tra loro. È così veloceTuttavia, ci sono così tanti dettagli che non entrerò qui ma, ho dovuto scrivere un'applicazione OTP sul client RABBITMQ per astrarre tutte le cose AMQP dai programmatori di erlang. Tutto ciò che un programmatore sa è un APi, dire che sto inviando una richiesta allo System A, basta preparare il formato del messaggio, M e chiamare l'API: zeenode_amqp:req(SystemA,Message). I sistemi possono inviare richieste da synchronous o da asynchronous.

Quale dovrebbe essere il tuo prendere da questo: RABBITMQ è molto buono per i sistemi di accodamento. Infatti, nella nostra configurazione, RABBITMQ pushes i messaggi direttamente ai server non appena raggiungono RABBITMQ dai client. Usando una convenzione di denominazione attentamente progettata di code e scambi e comprendendo attentamente i vari modelli di casi d'uso AMQP, sarà perfetto per te.

Penso che sia possibile eseguire il rollover, utilizzando dizionari di processo come Gproc in combinazione con Erlang Queue Module e Poolboy. Ad ogni modo, consiglierei RABBITMQ. fammi sapere, potrei mandarti delle librerie, quindi le studi e vedi se lavorano per te. una volta che hai una buona configurazione RABBITMQ, ben configurata seguendo i documenti sul loro sito, e poi, hai anche il client Erlang amqp, installato, allora è possibile creare code e scambi dinamicamente (se vuoi che siano persistenti o meno, dipende da cosa stai facendo). È possibile anche raggruppare i server RABBITMQ in modo da garantire la disponibilità.

+1

Buono a sapersi RabbitMQ può funzionare con JSOn e persistere. Se hai suggerimenti per le librerie RabbitMQ, lo apprezzo. Sono a conoscenza di un coniglietto chiamato e gli altri sul sito Web RabbitMQ. Parte del mio problema è che RabbitMQ offre così tante opzioni - tre diverse strategie di clustering, ad esempio, ed è difficile sapere cosa sia giusto. Credo di poter leggere più documenti. Sono contento di sentire che le persone lo usano esattamente per questo tipo di lavoro, fa parte di quello che anche la mia preoccupazione era. – nirvana

Problemi correlati