Se stai progettando i servizi per essere veramente indipendenti, allora dovranno servire a funzioni di identità ... modi per identificare in modo univoco le entità, in modo che possano essere riferite esternamente. Dopotutto, il servizio è il limite e non è previsto che lo veda attraverso il negozio sottostante. Quella identità non dovrebbe davvero cambiare di fronte alla mutazione delle entità, quindi non dovrebbe essere composta da dati mutabili, come il nome di un cliente o il nome di un dipendente.
Una particolare applicazione che utilizza l'identità può mapparla o può usarla come fornita. Ogni applicazione sviluppata sarebbe libera di mappare o utilizzare l'identità in modo coerente con il suo scopo. Non c'è motivo di assumere una sorta di mappatura globalizzata / centralizzata. Se una mappatura centralizzata sembra giusta, allora un archivio centralizzato e relazionale per tutti i microservizi deve sentirsi ancora più giusto.
Diventa complicato se i servizi devono supportare garanzie ... come "Non distruggerò questa entità finché non la rilasci" - che potrebbe essere una promessa lunga o breve. Questo è un po 'come esternare dichiarativamente l'idea di una chiave straniera. Le applicazioni dovrebbero essere in grado di rilasciare la protezione sulle entità quando tutti i riferimenti vengono rimossi; e questo può complicarsi.
Ad esempio, immagina il servizio s che serve l'entità e e l'applicazione a vuole fare riferimento a e e vuole una garanzia che e non perirà, quindi a ha bisogno di un modo unico per fare riferimento alla protezione contestuale di e . In questo modo, a può informare s quando e non è più necessario. Il conteggio dei riferimenti (in s o in a ) non è sufficiente.
Forse, s può semplicemente deprecare e e non distruggerlo, forse contrassegnarlo come cancellato logicamente. Ciò ovvia alla complessità di esternalizzare la relazione con le chiavi esterne, ma rende i dati disponibili più a lungo di quanto potrebbe altrimenti.
Un'altra strategia a potrebbe impiegare è semplicemente superare il fatto che un'entità referenziata non è più lì. Neanche questo è così semplice.
In breve: le applicazioni che fanno affidamento su una molteplicità di microservizi hanno il loro lavoro da ritagliare per loro - i servizi possono o no giocare bene in un tale ambiente. Ci si chiede se la gioia di scegliere il proprio data store quando costruisce un servizio sia superata dalla complessità visitata dai consumatori del servizio. Le strategie scelte saranno dettate dalla capacità di adattare il comportamento del servizio alle esigenze delle applicazioni. Se parliamo di microservizi da "là fuori", allora le applicazioni dovranno essere molto più robuste e potrebbero persino decidere di replicare parti sostanziali dei dati forniti dal servizio.