Ultimamente ho letto molto sui micro-servizi, ed ecco alcune delle conclusioni che ho ottenuto finora (per favore correggimi se sbaglio in qualsiasi momento).
- L'architettura dei micro-servizi si sposa bene con la progettazione guidata dal dominio. Di solito un MS rappresenta un contesto limitato.
- Se il micro-servizio A richiede funzionalità che risiede nel micro-servizio B , il mio modello è probabilmente sbagliato e A e B dovrebbero effettivamente essere un micro-servizio / BC.
- La comunicazione sincrona tra i micro-servizi (richieste HTTP dirette) è errata, perché sfugge allo scopo dei micro-servizi e introduce l'accoppiamento tra i componenti.
- È auspicabile una comunicazione asincrona tra servizi. I servizi dovrebbero pubblicare eventi nelle code dei messaggi, in modo che altri servizi possano iscriversi ed elaborare la loro parte dell'evento o utilizzarlo per replicare una parte dei dati necessari per il loro contesto. In questo modo, i servizi possono elaborare le richieste anche altri servizi sono inattivi, il che non sarebbe il caso della 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, il micro-servizio A non dovrebbe essere quello che elabora un evento appena creato, perché sarebbe una dipendenza circolare. In questo caso, dovremmo introdurre un terzo micro-servizio o combinare A e B nel micro-servizio AB .
- Micro-servizio è in realtà un termine fuorviante. Dovremmo lottare per piccoli contesti, ma non è necessario che sia così. Il termine non dovrebbe essere "micro-servizio", ma " abbastanza grande per fare il servizio di lavoro ".
- I micro-servizi ci consentono di introdurre nuove funzionalità con maggiore facilità e senza timore di rompere l'intero sistema. Può essere fatto introducendo un nuovo servizio o riformattando uno di quelli esistenti.
- Ogni micro-servizio dovrebbe avere il proprio archivio dati. La replica / duplicazione dei dati è un comportamento desiderabile in questa architettura.
Oltre a confermare la mia comprensione di questa architettura, la mia altra parte della domanda è principalmente legata alla scoperta del servizio. Se i servizi comunicano in modo asincrono e utilizzano la coda degli eventi centrale come Amazon SQS, ciò significa che il rilevamento dei servizi non ha un posto in questa architettura?
I servizi non dovrebbero avere alcuna conoscenza di altri servizi nel sistema. Sono consapevoli solo del contesto e degli eventi a cui dovrebbero pubblicare o abbonarsi?