2015-02-24 6 views
31

Devo creare una coda per l'elaborazione. La coda stessa è relativamente a basso volume. Potrebbero esserci circa 1.000 scritture all'ora. L'esecuzione di ciascuna attività potrebbe richiedere circa un minuto ciascuna e viene elaborata quasi non appena l'elemento viene aggiunto alla coda.SQS vs RabbitMQ

C'è qualche ragione per cui potrei voler implementare RabbitMQ invece di qualcosa di disponibile come Amazon SQS? Quali sono alcuni motivi per cui un'applicazione dovrebbe avere un proprio sistema di accodamento invece di qualcosa come SQS?

+0

1000 scritture all'ora va bene. Se hai tempo e conoscenze sufficienti, quindi esegui l'istanza RabbitMq da solo, risparmia anche denaro se confrontato con il servizio Amazon SQS. Per SQS, era solo lì. Era comodo, semplice e abbastanza veloce da codificare. – BMW

risposta

42

Per iniziare, Amazon SQS è una pseudo-coda che significa che la consegna di ogni messaggio (se raggiunge la coda) è garantita ma non in modalità FIFO che di solito avviene in una coda.

Se l'ordine dei messaggi è importante per te e vuoi che la coda funzioni in modo FIFO, la documentazione di Amazon SQS afferma di gestirla nella logica dell'applicazione in quanto i messaggi di Amazon SQS ti raggiungeranno fuori sequenza .

Rispetto a questo, per quanto ne so, è possibile implementare le code di lavoro in RabbitMQ. Se ciò ti libera dall'implementare il sequenziamento dei messaggi in coda a livello di applicazione, questa sarebbe un'opzione più preferibile.

Ecco alcuni fattori per aiutarvi a decidere quale andare per:

  1. coda sequenza di messaggi di cui sopra.

  2. È possibile configurare il proprio server con RabbitMQ ma non nel caso di Amazon SQS, quindi il costo viene coinvolto qui.

  3. L'installazione del proprio server richiede una buona conoscenza dell'argomento in modo da non lasciare alcun angolo intatto. Questo non è il caso di Amazon SQS in quanto è piuttosto rapido iniziare.

  4. Il proprio server RabbitMQ significa costi di manutenzione in linea con Amazon SQS.

Aggiornamenti:

  1. Amazon SQS ora supporta code FIFO.
+4

Cosa intendi con "Amazon SQS ha una grande portabilità con quasi tutte le piattaforme principali, non è sicuro che sia il caso di RabbitMQ". RabbitMQ funziona su tutte le principali piattaforme (Windows, Linux e Mac), oltre a tutti i principali linguaggi (Java, .Net, PHP, Python, Ruby, ecc.) –

+1

@old_sound Grazie per averlo indicato. Ho aggiornato la mia risposta per omettere quella parte. –

+0

cool. Si menzionano anche i costi di funzionamento di RabbitMQ, AFAIK SQS ha anche un costo, per operazione, o qualcosa del genere, giusto? –

31

SQS sarebbe la mia preferenza su RabbitMQ, ecco perché.

  1. SQS è un servizio gestito. Quindi non devi preoccuparti degli aspetti operativi dell'esecuzione di un sistema di messaggistica tra cui amministrazione, sicurezza, monitoraggio, ecc. Amazon lo farà per te e fornirà supporto se qualcosa dovesse andare storto.
  2. SQS è elastico e in grado di scalare a molto grandi tasso/volumi (illimitato secondo l'AWS;))
  3. disponibilità di SQS ha un sacco di 9 è in esso ed è sostenuta da Amazon, che è una cosa in meno di cui preoccuparsi nella tua applicazione.

Tuttavia RabbitMQ potrebbe fornire tempi di risposta più rapidi per put e ricevi, in genere in decine di migliaia di TPS dai miei test. Affinché SQS fornisca questo tipo di velocità effettiva, è necessario ridimensionare orizzontalmente con più istanze.Quindi, se cerchi meno di 5 ms, RabbitMQ potrebbe essere un'opzione da prendere in considerazione perché ho visto quasi 20ms-30ms di tempo dal mio test SQS a 1000s di TPS, che è leggermente superiore a RabbitMQ.

Abbiamo appena spostato la nostra infrastruttura di messaggistica da ActiveMQ a SQS e non possiamo essere più felici. Abbiamo trovato che è meno costoso di mantenere il nostro cluster ActiveMQ nel cloud.

Spero che questo aiuti! Facci sapere come va ..

+6

cloudamqp.com è un buon servizio RabbitMQ ospitato –

+0

@ssekhar Stiamo anche pianificando la migrazione di activemq su SES. Quanto sono grandi le modifiche sul client? Siamo su java e l'ultima versione di activemq. – Deepak