Chi è responsabile per un interruttore master / slave?

3

Stiamo introducendo uno schema di replica master / slave nella nostra applicazione web. In determinati scenari preferiremmo dirigere esplicitamente le letture su uno slave e scrivere al master, il che per me è un evidente vantaggio dello schema.

Istintivamente, preferirei che il passaggio accadesse da qualche parte nell'ORM, usiamo Doctrine e offre un soluzione pulita . Ma non è davvero una soluzione per noi, perché non abbiamo un modo molto pratico di distinguere quando una lettura è in realtà una scrittura (come negli scenari di aggiornamento).

La prossima cosa migliore sarebbe delegare la responsibillità per il passaggio al controller e / o alcune librerie personalizzate che in un cliché l'approccio MVC potrebbe essere considerato come modelli sovralimentati. Anche se questa è una soluzione molto pratica e probabilmente quella che richiederebbe meno tempo, temo in qualche modo che ci sia qualcosa di molto importante che mi manca e che tornerà e morderò duramente.

Ci sono limiti di tempo vaghi e supporto gestionale a referee febbrili, ma per questo specifico scenario concordiamo per lo più che dovremmo seguire l'approccio pratico, anche se ciò significa limitarci solo dove abbiamo identificato il database come uno dei principali collo di bottiglia.

Per aggiungere confusione, non posso davvero dire di essere esperto in schemi di replica, quando il problema è stato discusso per la prima volta ho pensato che una soluzione migliore sarebbe stata adottare uno schema multi-master, ma quando ho iniziato a cercare come è facile che falliscano e quanto sia solida la loro implementazione, ha smesso di essere ragionevole.

Aiuto?

    
posta yannis 05.01.2012 - 17:14
fonte

1 risposta

4

Dovrai essere in grado di identificare l'intera transazione come readonly o read-write. La transazione garantisce la durata nel database su cui stai operando, non su un altro database.

Detto questo, penso che il controller sia il posto giusto per metterlo. Dovresti mantenere due fonti per le connessioni e usare qualsiasi cosa sia appropriata.

Non penso che lo scenario proposto sia molto comune. Generalmente un intero servizio parla o al master o allo slave, ma non a entrambi.

    
risposta data 05.01.2012 - 17:28
fonte

Leggi altre domande sui tag