La mia nuova squadra in cui lavoro sta discutendo di come modifichiamo le nostre attuali vecchie applicazioni monolitiche per percorrere la strada dei microservizi. Siamo ancora nella fase iniziale di discussione e prova di concetti.
La prima dimostrazione del concetto che stiamo provando, ad alto livello, è quella di mimik un cliente aggiungendo qualcosa al loro paniere, e cosa ciò comporterebbe nella nuova architettura.
Attualmente abbiamo il seguente:
Quellochestaaccadendoquièilseguente:
- Ilclientefaclicsulpulsante"Aggiungi al carrello" nel browser che invia la richiesta POST al gateway API
- Il gateway API funge da pass-through, inviando una richiesta "Aggiungi al carrello" a Rabbit MQ
- Basket Saga prende questa richiesta, inizia una nuova saga
- Basket Saga aggiunge "Aggiungi elemento al carrello" e "Prenota elemento" richieste a Rabbit MQ
- Stock Service preleva la richiesta "Prenota elemento" e la riserva
- Stock Service aggiunge un evento "Oggetto riservato" a Rabbit MQ
- Il servizio Basket preleva la richiesta "Aggiungi oggetto al carrello" e la aggiunge
- Il servizio Basket aggiunge un evento "Articolo aggiunto" a Rabbit MQ
- Basket Saga raccoglie gli eventi "Oggetto riservato" e "Oggetto aggiunto"
- Basket Saga pubblica un evento "Aggiungi al carrello completo" su Rabbit MQ
- Host SignalR raccoglie l'evento "Aggiungi al carrello completo"
- SignalR Host consente al browser di sapere che l'azione è stata completata con successo
Questo è un esempio molto semplice, appena usato per testare le acque con questo tipo di architettura.
Questa architettura sembra abbastanza solida? O darà dolore a lungo termine? Ci sono ovviamente altre opzioni, come chiamare i microservizi direttamente dal gateway API, tra gli altri.
Pensieri?