Microservices - condivisione di dati tramite cache distribuita in memoria?

2

Sono abbastanza nuovo per entrambi i microservizi e database in-memory condivisi come Redis.

Mi chiedo però se sarebbe una buona idea combinare i due per affrontare le sfide della duplicazione, condivisione e proprietà dei dati in un'architettura orientata ai microservizi.

Non sarebbe una buona soluzione che i microservizi che hanno bisogno di accedere ad altri dati di servizio si uniscano semplicemente al cluster come nodo slave di sola lettura?
In questo modo la proprietà (e l'accesso in scrittura) si troverebbe ancora completamente all'interno del singolo servizio, ma l'accesso ai dati sarebbe molto veloce per ogni slave e anche se il master dovesse scendere potremmo continuare a fornire un certo livello di servizio dallo slave.

Ovviamente la quantità di dati potrebbe essere un fattore limitante, ma a parte questo, quali sono le ragioni per cui questo approccio non sembra essere ampiamente utilizzato?

    
posta TommyF 15.07.2018 - 10:10
fonte

1 risposta

5

Proprio come usare un singolo database per più servizi, l'approccio che descrivi provoca un strong accoppiamento tra i servizi. Ad esempio, non è possibile modificare il modello di dati di un servizio senza dover modificare di conseguenza il modello in altri. Ciò significa che sia lo sviluppo che il dispiegamento sono accoppiati ei tuoi microservizi in realtà diventano un monolite con più processi. Poiché lo sviluppo indipendente e la distribuzione di servizi sono uno dei motivi importanti per l'architettura dei microservizi, senza di essi si potrebbe costruire anche un monolite.

Come per qualsiasi buona pratica, ci sono, naturalmente, delle eccezioni a ciò che ho appena detto. Se utilizzato in un ambito limitato, la cache condivisa può offrire un incremento delle prestazioni così importante, che ha senso rinunciare all'abbinamento di servizi. Una situazione ragionevole sarebbe per esempio due servizi sviluppati da una singola squadra, entrambi con un ambito ristretto e che necessitano comunque di una stretta collaborazione. Pensa a un servizio che riempie la cache con i dati e un altro che legge quei dati. In questo caso si ha comunque un accoppiamento abbastanza strong e la cache condivisa, anche se non così buona dal punto di vista dell'architettura e della manutenzione, può ancora essere un ragionevole compromesso a causa dei vantaggi in termini di prestazioni. Ma in generale, una tale cache condivisa è una cattiva idea (vedi sopra).

    
risposta data 15.07.2018 - 13:03
fonte

Leggi altre domande sui tag