Domanda

Mi piacerebbe avere una configurazione master-slave di nodi Erlang, dove leggere e scrivere le operazioni avvengono su un solo nodo master. nodi slave sono mantenuti solo come hot-standbys.

Per quanto ho capito il comportamento predefinito di mnesia è quello di acquisire il blocco in modo sincrono su tutti i nodi prima di eseguire l'operazione di scrittura. Questo si tradurrebbe in latenza elevata soprattutto per i nodi geograficamente distribuite.

La mia domanda è: mnesia supporta operazioni asincrone, in cui i blocchi vengono acquisiti solo nodo master e scrittura vengono propagate poi verso nodi slave

?
È stato utile?

Soluzione

Credo che sarete più felici se si costruisce questa replica fuori sede utilizzando un sistema di coda di messaggi (RabbitMQ forse) l'aggiornamento del db replicato da soli dal feed coda di messaggi. collegamenti WAN sono più probabilità di diventare congestionato o scendere, e protocolli di messaggio-coda sono modi per gestire questo. distribuzione di Erlang solo rinunciare e si deve versare gli aggiornamenti in un file fino a quando la replica si avvicina e può consumare.

Per la migliore simmetria, hanno posting-to-the-Message Queue essere il metodo principale per aggiornare il db. Quindi, anche il maestro viene aggiornato da consumare dalla coda dei messaggi. Se è necessaria una risposta, il master corrente può inviare un messaggio all'emittente del messaggio.

mnesia ha alcuni tipi diversi di mnesia contesti di transazione ma niente che si adattano davvero esattamente con quello che volete.

Altri suggerimenti

Forse l'applicazione può beneficiare utilizzando serrature appiccicose. Credo che è abbastanza vicino alle vostre esigenze, ma ... non è esattamente quello che volevi http://www.erlang.org/documentation/doc-5.8.3/lib/mnesia-4.4.17/doc/html/Mnesia_chap4.html # id70700

Q Interessante e altrettanto interessanti A!

In sostanza, quello che sei suggesing, Christian, è per esempio per avere un gen_server - serializzazione l'accesso al DB. La prima volta l'ho fatto e poi ho capito: appendere! Mnesia è transazionale in modo che suoni un po 'strano per serializzare primo accesso e poi sorta di farlo di nuovo aggiornando il DB tramite una transazione.

lo sono ancora un po 'perplesso, tuttavia, dato che mnesia impone semantica transazionale tendo a prenderlo come un suggerimento che non si dovrebbero avere per serializzare voi stessi di accesso, soprattutto perché i implementatori di mnesia probabilmente conoscono il sistema meglio di me ;)

Mi rendo conto che questa non è una risposta abbastanza diretta alla sua domanda, però, direi che uso mnesia + memorynodes + disknodes. I memorynodes per acquisizione rapida e le disknodes per il recupero dopo un crash / backup.

HTH, haavee

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top