Scelta tra i metodi di comunicazione del microservizio

7

Ho un cliente di grandi dimensioni che si trova di fronte all'applicazione web (.net mvc se questo è importante) che devo suddividere in un numero di servizi. Alcuni di questi servizi saranno quindi condivisi con altre applicazioni.

Al momento tutti i server che ho fanno parte di un cluster web che usiamo per questa app, anche se questo potrebbe cambiare in futuro.

Ciò di cui sto combattendo è decidere tra l'apprendimento di un sistema di Accodamento messaggi come RabbitMQ, che dovrebbe migliorare le prestazioni, e verrà eseguito su tcp / ip, rendendo possibile la rimozione di alcuni di questi servizi chiave dal cluster di server Web, e proseguendo con la creazione di un'API JSON / REST interna. (Che conosciamo già, ma non aiuterà a migliorare le prestazioni.)

Tuttavia, essendo le code RabbitMQ sono unidirezionali, dovrei quindi trovare una strategia per gestire le occasioni in cui il sito web / utente ha bisogno di feedback da uno dei servizi. Il che significa un modo per creare una coda di messaggi di ritorno specifica della sessione, o fare affidamento su RPC, che può quindi influire sul rendimento.

A mio parere RabbitMQ mi offre più flessibilità e opportunità (posso spostare il codice dai server web, gestire code di messaggi e così via), ma crea anche più rischi in quanto è sconosciuto al business e significa che non solo stiamo dividendo la nostra applicazione, ma stiamo aggiungendo un nuovo metodo di comunicazione.

Quindi, qualcuno ha implementato RabbitMQ in uno scenario basato sul Web come questo, e in caso affermativo, ora se ne pentono, e desiderano che si siano attenuti all'utilizzo di REST? (O viceversa)

    
posta Matt 06.06.2016 - 12:56
fonte

1 risposta

4

RabbitMQ può essere usato per RPC . Per ulteriori informazioni, vedi RabbitMQ in azione: Messaggistica distribuita per tutti di Alvaro Videla e Jason J. W. Williams: sezione 4.3: RPC con RabbitMQ, pagina 80.

Detto questo, non è necessario scegliere tra un servizio di coda dei messaggi e REST / SOAP. Entrambi possono essere utilizzati e alcuni servizi possono esporre entrambe le interfacce.

Nota che ci sono alcuni vantaggi nel fornire interfacce REST / SOAP in modo coerente su tutti dei tuoi servizi:

  • In alcune lingue, l'utilizzo di AMQP potrebbe non essere particolarmente semplice. Qualche anno fa, era praticamente impossibile usare AMQP con Python 3. Ho provato. E fallito. Oggi è relativamente facile, ma cosa succederà quando verrà rilasciato Python 4? Alcune altre lingue potrebbero avere client AMQP non implementati o implementati male, rendendo doloroso comunicare con RabbitMQ. REST, d'altro canto, è molto più popolare e ha una migliore possibilità di avere buone librerie in più lingue.

  • L'esposizione di AMQP al pubblico potrebbe non essere una cosa facile da fare, specialmente quando si tratta di configurare accessi sicuri, chiavi API, ecc.

  • Molti più sviluppatori hanno un'esperienza professionale che utilizza API REST rispetto alla comunicazione tramite AMQP.

risposta data 06.06.2016 - 14:02
fonte

Leggi altre domande sui tag