Come gestisci i concetti condivisi in un'architettura di microservizi?

32

Sto ricercando i modelli architettonici per un'applicazione che sto sviluppando e un approccio microservizio sembra che sarebbe un buon scelta ma non sono sicuro di come gestire le interazioni tra i servizi.

L'applicazione riguarda principalmente utenti, profili di proprietà di utenti, foto e tag che rappresentano uno o più profili in una foto. Ci sarebbero probabilmente metodi per restituire le foto caricate da un utente, restituire foto che contengono un determinato profilo con tag, ecc.

Questo è il mio primo tentativo di progettare un'architettura basata su microservizi e provengo da un modello di dominio monolitico. storia ispirata. In quel mondo, i controllori cucivano insieme questi oggetti del dominio, ma ho difficoltà a capire come funzionerebbe in un microservizio.

    
posta anjunatl 22.03.2015 - 07:21
fonte

2 risposte

26

Solitamente, i servizi chiamano altri servizi quando devono accedere ai propri dati. Ogni pezzo di dati dovrebbe appartenere a un particolare servizio che sarà l'unico punto di accesso per accedere a questi dati e modificarli. Alcuni servizi saranno semplici e di solito corrispondono strettamente al modello del tuo dominio (ad esempio un servizio per la gestione degli utenti) mentre altri saranno di alto livello e utilizzeranno i dati di altri servizi (ad esempio visualizzando un elenco di foto insieme a informazioni sugli utenti che li hanno caricati) ).

Nel tuo caso d'uso, dovresti iniziare dall'esterno e pensare a quali operazioni vuoi rendere disponibili all'utente tramite un'API (se si tratta di un servizio di back-end) o quali operazioni dovrebbero essere disponibili nella GUI se si tratta di un Web applicazione. Si noti che la parte della GUI è spesso un'applicazione regolare con i propri controllori: le operazioni possono essere chiamate tramite REST (come in AngularJS), ma questi endpoint sono progettati solo per l'uso dell'applicazione della GUI e non sono microservizi nel senso comune.

Supponiamo di voler visualizzare le foto insieme alle informazioni sugli uploader. Potresti avere un servizio utente che restituisce informazioni su un utente, dato l'ID dell'utente e un servizio fotografico che può elencare le foto (ad es. Cercando in base a determinati criteri). L'elenco di foto conterrebbe per ogni foto l'ID dell'utente che effettua il caricamento. In questo modo questi due servizi non sono accoppiati: il servizio fotografico conosce solo gli ID utente ma nulla sui dati dell'utente stessi. Oltre a questi due servizi, è possibile creare un terzo servizio con un'operazione come "elenca le foto con informazioni sugli uploader" che chiamerebbe gli altri due servizi e combinerebbe i dati restituiti. In alternativa, questa operazione potrebbe essere eseguita dall'applicazione Web anziché da un servizio.

    
risposta data 22.03.2015 - 17:24
fonte
4

The application primarily deals with users, profiles owned by users, photos, and tags that represent one to many profiles in a photo. There would conceivably be methods to return photos uploaded by a user, return photos that contain a certain tagged profile, etc.

Bene, il servizio profili non dovrebbe funzionare con l'oggetto utente. Può conoscere solo l'ID dell'utente per il quale è richiesto di restituire i dati, non di più. In questo modo non avrai bisogno di interazione tra il servizio utente e il servizio profili.

Se questo non risponde alla tua domanda, potresti chiarirla descrivendo l'esatta situazione con cui ti stai occupando?

    
risposta data 22.03.2015 - 15:28
fonte