Architettura basata su eventi e sincronizzazione con un "microservizio del primo timer"

2

Sto lavorando su un'applicazione distribuita e approfondisco le architetture basate su Event con Microservices. Diciamo che ho eseguito due microservizi, CustomerService e AccountService . Entrambi hanno un proprio database e si sono mantenuti sincronizzati con una messaggistica in stile evento con RabbitMQ.

Ad esempio, quando un nuovo utente viene creato in CustomerService , un evento CustomerCreated viene inviato a RabbitMQ. Il AccountService ha un sottoscrittore che ascolta questo evento e crea immediatamente un account per questo utente.

Ora, diversi anni nel futuro, desidero avere un nuovo servizio, MusicListService , che ogni volta che viene generato un nuovo evento CustomerCreated , associare una playlist Musica a tale utente. Ovviamente gli utenti creati in precedenza devono avere anche una playlist vincolata a loro. Ma poiché questo servizio è nuovo di zecca, non ha ricevuto il passato CustomerCreated degli anni precedenti, quindi nessuna playlist sarà vincolata per gli ex utenti a meno che non crei una sorta di script fuori banda che porta il database in uno stato corretto e aggiornato.

Quale sarebbe la migliore strategia di avvio per un nuovo Microservice in modo che rimanga sincronizzata con quelli già esistenti?

    
posta David Jiménez Martínez 01.11.2017 - 13:01
fonte

1 risposta

2

Generalmente si acquisisce un'istantanea nel tempo dei dati esistenti e si elabora tale snapshot tramite un processo esterno o si riproducono i messaggi dello snapshot sul bus / la coda.

In pratica, dovrai tenere conto dei messaggi fuori servizio e dei messaggi duplicati perché l'istantanea e il normale flusso di messaggi devono essere leggermente sovrapposti per garantire che non vi siano spazi vuoti (e quindi dati mancanti). Ma dovresti già essere accomodante per questo dato che stai utilizzando un sistema di messaggistica.

    
risposta data 01.11.2017 - 13:57
fonte