Ho una situazione abbastanza comune in questi giorni: ho una webapp che scala orizzontalmente su più macchine per servire un carico maggiore. Questa particolare applicazione è scritta in Java.
Su questa stessa webapp, trovo che ho bisogno di eseguire periodicamente un processo in background in questa webapp. Tuttavia, questo processo esegue richieste contro un altro servizio, e non credo che sarebbe sicuro avere più invocazioni di questo processo andando subito.
Sarebbe più semplice ottenere una nuova macchina che esegua questi processi in background da sola. Tuttavia, le politiche aziendali rendono difficile ottenere nuove macchine, quindi sto cercando di indagare su altre opzioni nel caso in cui ciò non fosse possibile. Ciò significa che sto cercando di capire come fare una sola macchina alla volta per eseguire questo processo in background contemporaneamente. Ho pensato ad alcuni dei seguenti modi:
- Scopri come rendere una macchina "leader" ed essere l'unica ad eseguire queste attività periodiche di background. Ciò è complicato dal fatto che sto correndo su un gruppo auto-scala AWS, quindi questo leader potrebbe essere ucciso in qualsiasi momento, quindi sono bloccato a dover fare elezioni da solo.
- Stabilire un mutex di qualche tipo che ogni istanza deve afferrare prima che venga eseguito. Ho pensato di utilizzare una griglia di dati in-memory come Hazelcast per questo, ma mi sembra un po 'pesante da configurare e utilizzare proprio per questo.
Quali sono alcuni buoni modi per raggiungere il mio obiettivo di eseguire questo processo in background nella mia webapp e assicurarmi che venga eseguito solo una volta?