Abbiamo creato un'applicazione che ha un elenco di URL intranet fissi e li scorre periodicamente, trasforma i dati, li memorizza in un database.
Abbiamo il requisito che l'applicazione abbia un qualche tipo di meccanismo di failover automatico. Quindi abbiamo ordinato due server in due diversi data center. Ora: non possiamo permettere che le due applicazioni su ciascun host funzionino contemporaneamente, il che raddoppierà il carico sugli URL spidered. Quindi, quando il primario si abbassa, il secondario dovrebbe salire e continuare a spidering. "Scende" significa che non riceviamo più punti dati per un periodo di tempo nel database.
La mia prima idea:
- Abbiamo a disposizione un cluster etcd, quindi possiamo inserire una chiave che contenga informazioni che siano attive / passive.
- Le due istanze ascoltano la chiave e sulla modifica della chiave avvia / interrompe l'invio dei dati.
- Abbiamo messo un semplice script su e. g. un server di compilazione che è onesto presumere che sia disponibile e lo script attiva il failover se non si ricevono i datapoint per X time attivando la chiave.
In teoria ciò risolverebbe il problema, ma in realtà è un grande sforzo da implementare. Al momento l'applicazione è molto stupida e fa solo una cosa: spidering URL. Ora ho bisogno di migliorarlo ascoltando un tasto etcd, fermando / avviando i thread in base a se l'host corrente dovrebbe essere attivo, ...
La mia precedente esperienza lavorativa mi ha permesso di lavorare principalmente con sistemi che gestiscono le richieste in arrivo e si basano su un sistema di bilanciamento del carico di fronte a loro e strutture simili. Non ho mai dovuto creare un meccanismo di failover per un'applicazione che richiede richieste in uscita .
Esiste un semplice meccanismo di failover (più semplice delle cose chiave che ho descritto prima) che sto trascurando, che ha un intervento manuale minimo o nullo? Disponiamo anche di un cluster di bilanciamento del carico, ma non riesco a vedere come ciò possa essere d'aiuto quando le richieste escono invece di venire.