2011-10-24 17 views
6

Sto scrivendo un'applicazione distribuita che coinvolge diversi nodi front-end che devono negare l'azione all'utente a meno che non facciano parte di un elenco.Ha senso utilizzare Zookeeper per memorizzare i permessi utente

In questo momento abbiamo più di 4 di questi nodi ma solo un singolo server di database che esegue DB2 che è spesso inattivo per manutenzione.

In questo momento stiamo eseguendo il polling del database per aggiornare un elenco in memoria in modo che se un utente viene rimosso dall'elenco, la modifica venga riflessa su tutti e 4 i nodi. Ma se uno dei nodi viene riavviato mentre il database è inattivo ci ritroveremmo con una lista vuota che negherebbe tutte le richieste degli utenti che non vogliamo. Possiamo accettare la richiesta da parte dell'utente anche se il database è inattivo mentre li memorizziamo in una coda di messaggi, ma vogliamo rifiutarli immediatamente se devono essere rifiutati!

Ha senso eseguire un'istanza Zookeeper su ciascuno dei nostri 4 nodi e memorizzare l'autorizzazione utente in Zookeeper. La lettura dovrebbe quindi essere veloce e i dati altamente disponibili e coerenti. Non dovremmo più eseguire il polling e anche se riavviamo il database il nodo sarà in grado di ottenere la loro configurazione da zookeeper!

risposta

10

Sì, il modo in cui hai descritto il problema, Zookeeper dovrebbe adattarsi perfettamente al disegno di legge. Ci sono alcune domande però che deve essere risolta:

  • Quanti dati stiamo parlando? Zookeeper persiste i dati su disco, ma funziona solo se i dati si adattano alla RAM.

  • Con quale frequenza vengono modificati i dati? Zookeeper assicurerà che più della metà dei nodi ha ricevuto l'aggiornamento, quindi le scritture non sono esattamente performanti.

  • Quanti dati devono essere letti contemporaneamente? Zookeeper ha un limite di dimensioni di risposta di 1 MB, ma il loro consiglio è di mantenere i dati ben al di sotto del limite. Si noti che questo limite può essere raggiunto anche se si sta elencando un nodo con molti bambini, poiché i nomi dei bambini contano come dati.

Considerando che i dati viene servita dalla RAM, leggendo non dovrebbe essere un gran problema, ma si può sempre risultati della cache e orologio impostato su nodi appropriati per invalidare i dati locali.

Problemi correlati