Attualmente quando costruisco applicazioni, le costruisco come un'unica grande applicazione monolitica in modo che tutto risieda in un unico assembly compilato e i dati risiedano in un unico database SQL (con alcuni redis / elasticsearch usati come supporto). Questo funziona relativamente bene per i miei scopi, ma mi piacerebbe passare alla progettazione di architetture di micro-servizi. Tuttavia, ho difficoltà a capire come viene mantenuta l'integrità relazionale quando i vostri servizi / database sono distribuiti su più server.
Osservare il diagramma seguente:
Inquestoesempio,ilservizioIdentityèseparatodalserviziodiordinazione.Ovviamentel'IdentityMicroserviceavrebbebisognodirecuperareidatiutentedaundatabaseconcosecomenome,cognome,password,ruoli/reclami,ecc.
Ovviamentealtrepartidelsistemahannorelazioniconl'utente.Adesempio,ogniordineèprobabilmentelegatoall'utentechehaeffettuatol'ordine.InundatabaseSQLtradizionale,sidovrebbesemplicementeavereunachiaveesternapermantenerel'integritàrelazionale.Conildiagrammasopra,"Ordering Microservice" sembra completamente indipendente dal database dell'utente. In che modo l'integrità relazionale viene mantenuta in tale architettura? Il servizio di ordinazione inserisce semplicemente un record "Ordine" con l'ID dell'utente senza mantenere alcun rapporto da nessuna parte? Cosa succede se quell'utente viene quindi cancellato dal sistema. In questo particolare esempio probabilmente vorrai mantenere i dati dell'ordine, ma ci sono molti esempi in cui vorresti cancellare i dati relativi a quell'utente quando l'utente viene cancellato. In un'architettura di microservice sembra che tutto questo debba essere fatto manualmente con un sacco di spazio per errori.