Ho una domanda sulle migliori pratiche dato il seguente scenario.
Requisiti
C'è un processo giornaliero che ha due passaggi:
- Interrogare i dati di configurazione su dozzine di frammenti di database
- Esegue molti lavori intensivi basati su tali dati di configurazione, attraverso un cluster di applicazioni
Il primo passaggio è leggero e può essere eseguito solo da una singola applicazione. In caso contrario, verranno eseguite query duplicate. In seguito, i lavori possono essere distribuiti attraverso il cluster dell'applicazione.
Domanda
Come fare in modo che una sola applicazione nel cluster esegua il primo passo?
idee
- Blocco del database
- Ogni applicazione si avvia allo stesso tempo (ad es. tramite cron) e tenta di ottenere un blocco. Solo uno avrà mai successo. Dopo questo vincitore esegue il passaggio n. 1, distribuisce il lavoro su tutte le applicazioni nel cluster.
- Invia un singolo messaggio di coda al cluster ogni giorno, a seconda di quale applicazione esegue il polling per prima cosa eseguirà le query nel passaggio 1 e quindi distribuirà il lavoro tra i cluster (incluso a se stesso).
- Creare un'applicazione separata, singleton (esterna al cluster) per eseguire il passaggio 1 e quindi distribuire il lavoro.