sincronizzazione tra due servizi

1

Ho due applicazioni: un'applicazione è essenzialmente un servizio REST, un'altra ha un'interfaccia utente che comunica con REST (utilizza le sue funzioni).

L'idea è che rule engine è un servizio che può eseguire regole contro l'input - l'input non è necessariamente player dati ma qualche altro (come level specifico, o quest specifico e così via ). Così l'ho trasformato in un microservizio separato. Ma come REST deve convalidare l'input - l'input può provenire non solo dall'applicazione dell'interfaccia utente (che potrebbe fornire i propri controlli) ma da qualche client REST - così ho deciso di creare un database per il servizio del motore di regole (perché i microservizi avrebbero dovuto i propri archivi) che conterrebbero i dati che consentono di convalidare l'input. L'applicazione Sandbox rappresenta una sorta di admin o sandbox in cui posso creare players , eseguire alcuni test come level up e così via. Ha anche un proprio database perché riflette più o meno la finale di un'altra applicazione.

Lo schema è simile a questo

L'applicazione UI Sandbox invia richieste REST al servizio Motore regole con alcuni dati. Il servizio Motore regole convalida i dati con il proprio RDB1 (che contiene gli stessi dati di RDB2 nella sandbox - le tabelle players e levels sono uguali in entrambi i database in modo che i dati siano coerenti), esegue l'esecuzione delle regole e restituisce il risposta.

I miei problemi è scegliere la strategia su come sincronizzare entrambi i database per mantenerli coerenti (per ora all'avvio, popolano entrambi i database con gli stessi dati). Vedo diversi approcci

  1. crea un servizio separato che sarà un singolo endpoint per RDB, in pratica solo questo servizio avrà accesso ai dati players e levels .
  2. usa il sistema di messaggistica (usa RDB2 come una sorta di database master) e dopo le modifiche in RDB2 invia il messaggio e aggiorna RDB1 (o altri database) (usa il modello pub-sub).
  3. utilizza la cache nell'applicazione REST anziché nel database e utilizza il modello pub-sub per aggiornarlo.

Quale approccio sarebbe meglio usare? O ci sono altri modi?

    
posta lapots 06.03.2018 - 16:03
fonte

1 risposta

1

Quindi mi sembra che se non hai una buona ragione per avere database separati, dovresti avere un solo database. Dal tuo diagramma, sembra che il motore delle regole stia ricevendo solo l'accesso in sola lettura mentre l'interfaccia utente diventa di lettura / scrittura.

Se ciò è vero, è possibile condividere lo stesso DB oppure avere il master di interfaccia utente come master e quello di regole come slave. Lascia che il DB gestisca la replica, poiché è costruito per farlo.

    
risposta data 06.03.2018 - 20:04
fonte

Leggi altre domande sui tag