Implementazione del semaforo distribuito per il carico di lavoro di AWS

1

Abbiamo un gateway di messaggistica in AWS (Amazon Cloud) che comprende un numero di nodi (server Linux) responsabili di ricevere, inoltrare, inviare e inoltrare messaggi (email, SMS e chiamate vocali). Parlano tutti con un database MySQL back-end su una macchina dedicata.

Ogni pochi minuti eseguiamo uno script di manutenzione: escalation di messaggi non aggiornati, ecc.

Il problema è che non dovremmo eseguire la manutenzione su più nodi allo stesso tempo - quindi voglio implementare una sorta di semaforo distribuito che verrebbe generato dal primo nodo e se l'altro nodo tenta di eseguire lo script prima che il primo termini debba semplicemente uscire. Al momento eseguiamo lo script solo su un nodo e il processo cron è disabilitato sugli altri, ma preferiamo avere tutti i nodi con la stessa configurazione.

Su un singolo host probabilmente utilizzerei un file di blocco, ma come faccio a farlo su più host? Non hanno un filesystem condiviso e praticamente l'unica cosa che condividono è il database MySQL. Inoltre, se il processo o il nodo muore a metà dell'elaborazione, il semaforo dovrebbe finalmente rilasciare o scadere.

Preferisco utilizzare il database come titolare del semaforo, ma sono anche abbastanza felice di utilizzare qualsiasi altro servizio AWS.

FWIW Lo script è scritto in Python. Non che io pensi che importi ...

Grazie per qualsiasi idea!

    
posta MLu 26.07.2014 - 14:10
fonte

1 risposta

1

Se vuoi che solo una macchina alla volta faccia qualcosa puoi avere un token e solo la macchina che "ha" questo token può avviare il processo. Quando una macchina finisce il processo passa il token ad un'altra macchina (a caso, round robin, alla macchina che ha meno carico ...).

puoi passare questo token via AWS o memorizzarlo nel database. Un problema a questo approccio è che la macchina che tiene il token si blocca e non passa mai il token agli altri. Forse hai bisogno di qualcosa per recuperare questi errori, i sistemi distribuiti sono cose molto complesse.

E proprio per questa complessità, sei sicuro di aver bisogno di qualcosa del genere ?, puoi avere una macchina con il rol "maintenance_scripts_runner" e solo questa macchina esegue lo script.

    
risposta data 26.07.2014 - 18:42
fonte

Leggi altre domande sui tag