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!