Ultimamente ho letto molto sui micro-servizi, e qui ci sono alcune delle conclusioni che ho ottenuto finora (correggimi se sbaglio in qualsiasi momento).
- L'architettura di micro-servizi si sposa bene con la progettazione basata sul dominio. Di solito una MS rappresenta un contesto limitato.
- Se il micro-servizio A richiede funzionalità che risiedono nel file micro-service B , il mio modello è probabilmente sbagliato e A e B dovrebbe effettivamente essere un micro-servizio / BC.
- La comunicazione sincrona tra i microservizi (richieste HTTP dirette) è errata, poiché sfugge allo scopo dei micro-servizi e introduce l'accoppiamento tra i componenti.
- È auspicabile la comunicazione asincrona tra servizi. I servizi dovrebbero pubblicare eventi sulle code di messaggi, in modo che altri servizi possano sottoscrivere ed elaborare la loro parte dell'evento o utilizzarli per replicare una porzione di dati necessari per il loro contesto. In questo modo, i servizi possono elaborare le richieste anche se altri servizi non funzionano, il che non sarebbe il caso nella comunicazione sincrona.
- Se il micro-servizio A pubblica un evento, il micro-servizio B si iscrive a quell'evento e produce un nuovo evento come risultato, micro-service A non dovrebbe essere l'unica elaborazione dell'evento appena creato, perché sarebbe una dipendenza circolare. In questo caso, dovremmo introdurre un terzo micro-servizio o combinare A e B in AB micro-service.
- Micro-service è in realtà un termine fuorviante. Dovremmo lottare per piccoli contesti, ma non è necessario che sia così. Il termine non deve essere "micro-service", ma " abbastanza grande da fare il servizio di lavoro ".
- I micro-servizi ci permettono di introdurre nuove funzionalità con più facilità e senza timore che interromperemo l'intero sistema. Può essere fatto introducendo un nuovo servizio o rifattorizzando uno dei precedenti.
- Ogni micro-servizio dovrebbe avere il proprio archivio dati. La replica / duplicazione dei dati è un comportamento auspicabile in questa architettura.
Oltre a confermare la mia comprensione di questa architettura, l'altra parte della domanda riguarda principalmente l'individuazione dei servizi. Se i servizi comunicano in modo asincrono e utilizzano la coda di eventi centrale come SQS di Amazon, significa che l'individuazione dei servizi non ha la sua collocazione in un'architettura del genere?
I servizi non dovrebbero avere alcuna conoscenza di altri servizi nel sistema. Sono a conoscenza del loro contesto e degli eventi a cui dovrebbero pubblicare o iscriversi?