2010-09-15 11 views
5

Sto scrivendo una piccola applicazione proxy che dovrebbe essere ridondante, ad es. il proxy primario verrà eseguito su un server e quello ridondante verrà eseguito su un server separato. Esiste un semplice framework ad alta disponibilità che posso utilizzare per implementare questa ridondanza? Ad esempio, questo framework HA invierà ping tra le istanze e solleverà qualche sorta di eccezione o notifica sull'altra istanza quando il primo si spegnerà.Java HA framework

risposta

1

Costruire un tale sistema è stato il mio lavoro di routine negli ultimi anni. Ho trovato jgroups uno strumento molto utile per ricevere e gestire questo tipo di eventi di raggruppamento. Questo è il caso se vuoi costruire la tua infrastruttura HA. Non lo so, ma forse nel tuo caso basta un semplice proxy inverso come HAProxy.

-2

hadoop è un buon punto di partenza

+0

Seriamente? Hadoop è un framework di calcolo distribuito. Perché dovresti usare un framework per ridurre le mappe per questo? –

0

Se volete HA senza problemi, basta usare un po 'di bilanciamento del carico con capacità di HA per esempio Ultramonkey, LVS con keepalived ecc

In una configurazione HA, genere un utente desideri utilizzare l'IP virtuale, quindi, anche se avresti questo ping/avvisare funzionalità come un quadro, avrai ancora cose da fare (inizia a rispondere alle richieste sull'IP virtuale una volta che l'altra istanza non è riuscita). Quindi, a meno che tu non stia cercando un'occasione di apprendimento, consiglierei di usare un middleware invece di codificarlo da solo usando i framework.

Esistono numerosi controlli di integrità che è possibile configurare per questi middleware. Ad esempio, un semplice healthcheck potrebbe generare una richiesta GET sulla tua app. periodicamente e cerca una stringa specifica (ad es. "XXX in esecuzione".) nella risposta per verificare la tua app. sta andando bene.

0

Non si forniscono molti dettagli sul lavoro eseguito dall'applicazione, quindi, a seconda di quanto è stato, se è in grado di tollerare un minor dataloss, è importante in termini di tempo, se si considera il tempo degli sviluppatori rispetto al tempo della macchina, è possibile avere un diverso spettro di soluzioni.

Ci sono alcuni buoni suggerimenti sopra, vorrei aggiungere: dare un'occhiata a JMS e messaggistica persistente. Di solito questi rendono il recupero abbastanza banale, ma al costo del colpo di latenza (a meno che tu non sia un prodotto commerciale e lo impari bene o paghi il venditore per mettere a punto la tua applicazione). Con le code JMS è possibile implementare l'elaborazione active-active e risparmiarsi il mal di testa del rilevamento degli errori.

Un'altra direzione da osservare è la gestione dello stato distribuita/framework di cluster come Gigaspaces, Coherence, Gemstone, Infinispan, Gridgain e Teracotta. Questi possono replicare i tuoi dati e garantire una qualità variabile dei livelli di servizio. Molti di questi sono dotati di un tipo di rilevamento degli errori e di un meccanismo di gestione distribuito.