Solo una applicazione nel cluster esegue un lavoro

1

Ho una domanda sulle migliori pratiche dato il seguente scenario.

Requisiti

C'è un processo giornaliero che ha due passaggi:

  1. Interrogare i dati di configurazione su dozzine di frammenti di database
  2. 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

  1. 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.
  2. 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).
  3. Creare un'applicazione separata, singleton (esterna al cluster) per eseguire il passaggio 1 e quindi distribuire il lavoro.
posta displayname12345678 26.02.2018 - 17:03
fonte

1 risposta

1

Mi sembra che i tuoi due passaggi siano in gran parte non correlati. Mentre esiste una dipendenza del flusso di dati tra di essi, si sta già pianificando di eseguirli separatamente. Quindi crea loro processi completamente separati che comunicano attraverso una coda di messaggi.

Questa è fondamentalmente la via di mezzo tra le soluzioni 2 e 3. È ancora possibile pianificare il processo di raccolta della configurazione sul cluster. Distribuire uniformemente tutti i processi sarà probabilmente più facile a lungo termine. Poiché questo processo di configurazione rimane inattivo per la maggior parte del tempo, non richiede un nodo di cluster dedicato e consuma risorse trascurabili.

Un'implementazione diretta della soluzione 2 potrebbe non essere una buona idea a seconda di come sono configurate le code dei messaggi. 1: n o n: 1 code offrono un flusso di dati molto più semplice di n: m code necessarie per un "ogni processo può scrivere un messaggio, e ogni processo dovrebbe ricevere un messaggio" architettura.

    
risposta data 26.02.2018 - 17:15
fonte

Leggi altre domande sui tag