Un po 'di background.Architettura orientata ai servizi: AMQP o HTTP
Applicazione Django monolitica molto grande. Tutti i componenti utilizzano lo stesso database. Abbiamo bisogno di separare i servizi in modo da poter aggiornare in modo indipendente alcune parti del sistema senza influenzare il resto.
Usiamo RabbitMQ come broker per Celery.
In questo momento abbiamo due opzioni:
- servizi HTTP utilizzando un'interfaccia REST.
- JSONRPC su AMQP a un servizio di ciclo di eventi
La mia squadra sta appoggiandosi a verso HTTP perché è quello che hanno familiarità con, ma credo che i vantaggi di utilizzare RPC su AMQP superano di gran lunga esso.
AMQP ci fornisce le funzionalità per aggiungere facilmente bilanciamento del carico e alta disponibilità, con consegne di messaggi garantite.
Considerando che con HTTP dobbiamo creare wrapper client HTTP per lavorare con le interfacce REST, dobbiamo mettere in un bilanciatore di carico e impostare che l'infrastruttura in modo da avere HA ecc
Con AMQP posso solo genera un'altra istanza del servizio, si collegherà alla stessa coda delle altre istanze e bam, HA e bilanciamento del carico.
Mi manca qualcosa con i miei pensieri su AMQP?
Abbiamo finito per andare con HTTP/REST. Volevo davvero seguire la rotta AMQP perché si adattava così bene alla nostra architettura, ma il mio team non voleva provare qualcosa di nuovo, quindi è un peccato. Molto più lavoro è necessario per lo sviluppo di un sistema SOA ridondante e altamente disponibile utilizzando HTTP invece di AMQP e RPC. – jreid42
@pinepain Penso che una cosa da menzionare (e correggermi se sbaglio) è che con AMQP puoi effettivamente inviare messaggi alla destinazione dove come con HTTP non puoi (lavorando su metodo richiesta-risposta) – rayman
@rayman HTTP e AMQP sono concetti diversi, quindi preferirei non utilizzare tali criteri per il loro confronto. – pinepain