2015-08-12 32 views
5

Ho uno script nodejs: consente di chiamarlo "processo1" su server1 e lo stesso script è in esecuzione su server2 - "processo2" (solo con flag = false).Script di nodo - Failover da un server a un altro server

Process1 eseguirà le azioni preformate e sarà in stato "in esecuzione" all'inizio. process2 sarà in esecuzione ma in stato "block" con flag programmato al suo interno.

Quello che voglio fare è implementare il failover/fallback per questo processo. Se process1 abbassa il flag su process2 cambierà e process2 assumerà tutte le attività da process1 (e viceversa quando process1 torna indietro - fallback).

Qual è l'approccio migliore per farlo? Connessione TCP tra quelli?

enter image description here


NOTA: Anche il suo non troppo rilevante, ma voglio dire che questi processi stanno andando a lavorare internamente, stabilire una connessione TCP con il terzo server e analisi dei dati che stiamo ottenendo da quel server. Entrambi i processi saranno in esecuzione su entrambi i server, ma solo ONE processo al momento può essere la fornitura di servizi - in esecuzione con bandiera vero (e non entrambi)


Aggiornamento: Come per discussioni muggito e ricerca interna/test e monitoraggio della soluzione, utilizzando il proxy inverso farà risparmiare un sacco di tempo. Il failover di programmazione basato su 2 server coprirà solo il 70% dei casi relativi al processo interno utilizzato su entrambe le macchine, ma non sarà possibile rilevare altri 30% dei problemi causati a causa dei problemi con il rete (soprattutto se si ha molto traffico verso DATA RECEIVER).

+0

proxy inverso. o con nodo o nginx (o altri ...) – Amit

+0

@Amit Potresti per favore elaborarlo almeno un po '. Stai suggerendo di aggiungere altro server nel mezzo che gestirà questo? Non sono sicuro che sto seguendo? Questi script non saranno disponibili pubblicamente (per servire le richieste http) se ci si riferisce al posizionamento del proxy inverso prima dei server per quel caso. – cool

+0

quindi immagino che il mio commento sia irrilevante, ma la tua domanda non sta raccontando abbastanza della trama (secondo me, comunque). Cosa sta facendo il processo? è un singolo compito lungo o serve richieste in corso? cosa significa "scende" e come può essere identificato? – Amit

risposta

2

Questo è più un problema di infrastruttura che un nodo, e la stessa situazione può essere applicata a quasi tutti i server.

Ciò di cui si ha fondamentalmente bisogno è un servizio che monitora Server 1 e determina se è "sano" o "vivo" e in tal caso continua a indirizzare il traffico verso di esso. Se il servizio determina che il server non è più in una condizione stabile (ad esempio impiega troppo tempo a rispondere, restituisce un errore), reindirizzerà qualsiasi traffico in entrata a Server 2. Quando è felice, Server 1 è tornato alle normali condizioni operative, reindirizzerà il traffico su di esso.

Nella maggior parte dei casi, il "servizio" in questo scenario è un reverse proxy come Nginx o CloudFlare. Nella tua situazione, questo server agisce da buffer tra Data Reciever e la tua rete (Server 1/Server 2) e indirizza il traffico in entrata al server pertinente.

+0

Quindi, in pratica, è impossibile implementare una soluzione stabile senza aggiungere altro server proxy tra il Data Receiver e quei 2 server proxy? – cool

+0

Non è certamente * impossibile * ma probabilmente sarebbe più efficiente e affidabile utilizzare un proxy inverso in questa situazione (è esattamente ciò per cui sono stati progettati). – James

+0

Per quanto riguarda la soluzione "impossibile" mi riferivo a una soluzione stabile. Baserò questa implementazione sulla connessione TCP (in entrambi i modi) tra i processi. Sarà abbastanza stabile, ma non abbastanza come soluzione di reverse proxy. – cool

1

Sembra un classico caso d'uso per un proxy inverso. L'utilizzo di un server ben collaudato come nginx dovrebbe garantire un'affidabilità elevata che il proxy non fallirà (a parte l'errore hardware) e potresti metterlo di fronte a qualsiasi dimensione di cluster desideri. Avrai anche il vantaggio del bilanciamento del carico se questo è applicabile e configurato correttamente.

In alternativa e anche verso una soluzione di bilanciamento del carico, è possibile avere una richiesta di push server anteriore in una coda (ZMQ per esempio) e inviare dalla coda ai server delle app o avere il proprio server delle app (s) estrae le attività dalla coda in modo indipendente.

In entrambe le soluzioni, se è necessario non "inviare" 2 risultati simultanei al ricevitore di dati, è possibile utilizzare una coda in uscita su cui tutti i server delle applicazioni inseriscono.