Sto considerando l'utilizzo di Amazon RDS con read replicas per ridimensionare il nostro database.Come gestire correttamente la replica di database asincrona?
Alcuni dei nostri controller nella nostra applicazione Web sono di lettura/scrittura, alcuni di loro sono di sola lettura. Abbiamo già un modo automatico per identificare quali controllori sono di sola lettura, quindi il mio primo approccio sarebbe stato quello di aprire una connessione al master quando si richiede un controller di lettura/scrittura, altrimenti aprire una connessione a una replica di lettura quando si richiede una lettura solo controller.
In teoria, suona bene. Ma poi mi sono imbattuto nel concetto di ritardo di replica , che in pratica dice che una replica può trovarsi a diversi secondi dietro al master.
Immaginiamo il seguente caso d'uso, allora:
- I messaggi del browser per
/create-account
, che viene letto/scrittura, collegando in tal modo al master - creato l'account, transazioni impegnato, e il browser ottiene reindirizzato a
/member-area
- Il browser si apre
/member-area
, che è di sola lettura, quindi si collega a una replica. Se la replica è anche leggermente indietro rispetto al master, l'account utente potrebbe non esistere ancora sulla replica, causando di conseguenza un errore.
Come si utilizzano realisticamente le repliche di lettura nell'applicazione, per evitare questi potenziali problemi?