Sincronizzazione cache tra nodi in un cluster

1

Recentemente ho iniziato a lavorare su un'applicazione web Spring, in cui una cache per alcuni dati pesantemente utilizzati è memorizzata nella JVM di ciascun nodo nel cluster AWS. Qualsiasi modifica in uno qualsiasi dei valori del nodo comporta una chiamata REST a tutti i nodi per aggiornare la cache nella JVM. Ci sono molti problemi in questo design, principalmente:

  1. La raccolta utilizzata per la cache è HashMap, che non è thread-safe

  2. Le informazioni dei nodi sono memorizzate nel DB e questo è anche memorizzato in questa cache. Ogni errore di cache risulterà nel saltare completamente il nodo risultante in valori non aggiornati.

  3. Chiamate REST non sicure tra i nodi per aggiornare la cache.

  4. L'origine della verità è la cache, non il DB. In caso di mancanze della cache, il DB non viene inviato.

IMO, l'approccio ideale è usare una cache centralizzata come EHCache o Redis o usare qualcosa come Hazelcast. Quali sono gli altri modi in cui un tale problema è risolto?

    
posta Neo 04.10.2017 - 15:33
fonte

0 risposte

Leggi altre domande sui tag