Problema di concorrenza dei job Sidekiq

Abbiamo un problema con Sidekiq in esecuzione su più pod.

Scenario 1:
In sviluppo, abbiamo una singola replica, il che significa un singolo pod in esecuzione. Non abbiamo problemi qui.
Per tua informazione,
Controllato: forum_url/sidekiq/busy (1 processo in esecuzione)

Scenario 2:
In pre-produzione e produzione abbiamo più di una replica (più di un pod in esecuzione). Stiamo riscontrando problemi di concorrenza di Sidekiq (il job è in esecuzione ma salta l’esecuzione del codice).

Per tua informazione,
Controllato: forum_url/sidekiq/busy (più di 1 processo in esecuzione). Per ogni pod un processo Sidekiq in esecuzione.

Correggimi,
È normale eseguire più processi Sidekiq?
Se non è normale, come risolvere il problema di concorrenza del job?

Per tua informazione, stiamo utilizzando Discourse Docker

Quali sono i passaggi appropriati che dovrei seguire. Grazie in anticipo.

Cosa intendi esattamente con “problema di concorrenza”? Puoi elaborare? Cosa viene eseguito fuori ordine esattamente?

L’aggiunta di un job Sidekiq a una coda non garantisce l’ordine generale di esecuzione poiché ci sono code diverse con priorità diverse, quindi alcuni job possono precederne altri.

Inoltre, “saltare l’esecuzione del codice”. Puoi elaborare? Quale codice? Quando un job viene eseguito, il codice non verrà saltato. Hai controllato i tuoi /logs per assicurarti che nulla si interrompa?

E tieni presente che potresti utilizzare un’installazione non supportata, che potrebbe essere alla radice dei tuoi problemi…

4 Mi Piace

Ciao @merefield Grazie per la risposta

Cosa intendi esattamente con “problema di concorrenza”? Puoi elaborare? Cosa sta succedendo fuori ordine esattamente?

Come ho menzionato sopra, negli ambienti preprod e di produzione sono in esecuzione più processi sidekiq.

Non sono sicuro! Il job potrebbe confondersi quando entra in conflitto con quale processo dovrebbe prendere a causa del processo multi-worker.

Anche “saltare l’esecuzione del codice”. Puoi elaborare? Quale codice? Quando un job viene eseguito, il codice non verrà saltato. Hai controllato i tuoi /logs che nulla si interrompa?

Stiamo eseguendo alcuni job sidekiq personalizzati che esportano alcune statistiche personalizzate su un file CSV. Il job viene eseguito periodicamente. A volte l’esportazione del file non avviene. Il job viene eseguito senza alcun messaggio di errore.

Ad esempio:

A scopo di test, se clicco questo pulsante di attivazione, il job viene eseguito ma l’esportazione del file a volte non avviene.

Per tua informazione, nell’ambiente Dev lo stesso codice viene eseguito ma è solo un processo worker sidekiq. Qui funziona bene. Mi chiedo se il problema sia dovuto a più di un processo sidekiq in esecuzione su prod/preprod.

Hai controllato i tuoi /logs che nulla si interrompa?

Sì, non abbiamo ricevuto alcun errore relativo al job.

E sii consapevole che potresti eseguire un’installazione non supportata

Stiamo eseguendo l’ultima versione di discourse.

Grazie

Devi aspettarti la concorrenza. È un sistema batch multi-threaded.

Anche alcune persone usano Kubernetes, ma qui non è supportato.

Penso che dovrai aggiungere dei log al tuo job per scoprire cosa sta succedendo.

Questo è il tuo codice personalizzato, giusto?

Abbiamo già aggiunto il logging al nostro codice personalizzato. Nessun problema con il nostro codice.

Sì, stiamo usando un cluster Kubernetes.

Solo una domanda!

Il sidekiq dovrebbe eseguire un solo processo? o eseguire più di un processo sidekiq va bene?

Come ogni buon sistema batch, è progettato per eseguire più di un job contemporaneamente, altrimenti non scalerebbe.

Assicurati di tenerne conto quando progetti i tuoi job.