Problème de concurrence de tâches Sidekiq

Nous avons un problème avec Sidekiq fonctionnant sur plusieurs pods.

Scénario 1 :
En développement, nous avons une seule réplique, ce qui signifie un seul pod en cours d’exécution. Nous n’avons aucun problème ici.
Pour information,
Vérifié : forum_url/sidekiq/busy (1 processus en cours d’exécution)

Scénario 2 :
En préproduction et en production, nous avons plus d’une réplique (plus d’un pod en cours d’exécution). Nous rencontrons un problème de concurrence Sidekiq (le travail s’exécute mais saute l’exécution du code).

Pour information,
Vérifié : forum_url/sidekiq/busy (Plus d’un processus en cours d’exécution). Un processus Sidekiq s’exécute pour chaque pod.

Corrigez-moi,
Est-il acceptable d’exécuter plus d’un processus Sidekiq ?
Si ce n’est pas le cas, comment résoudre le problème de concurrence des travaux ?

Pour information, nous utilisons Discourse Docker.

Quelles sont les étapes appropriées que je devrais suivre. Merci d’avance.

Qu’entendez-vous exactement par problème de « concurrence » ? Pouvez-vous développer ? Qu’est-ce qui se déroule dans le désordre exactement ?
Un job Sidekiq ajouté à une file d’attente ne garantit pas l’ordre général d’exécution car il existe différentes files d’attente avec des priorités différentes, de sorte que certains jobs peuvent devancer d’autres.

Aussi, « sauter l’exécution du code ». Pouvez-vous développer ? Quel code ? Lorsqu’un job s’exécute, le code ne sera pas sauté. Avez-vous vérifié vos /logs pour voir si rien ne casse ?

Et sachez que vous utilisez peut-être une installation non prise en charge, ce qui pourrait être à l’origine de vos problèmes…

4 « J'aime »

Salut @merefield Merci pour la réponse

Que voulez-vous dire exactement par problème de « concurrence » ? Pouvez-vous s’il vous plaît développer ? Qu’est-ce qui se déroule dans le désordre exactement ?

Comme je l’ai mentionné ci-dessus, sur les environnements preprod et production, plus d’un processus sidekiq est en cours d’exécution.

Je ne suis pas sûr ! Le travail pourrait être confus lorsqu’il se déclenche, quel processus il devrait prendre en raison du processus multi-worker.

Aussi « sauter l’exécution du code ». Pouvez-vous développer ? Quel code ? Quand un travail s’exécute, le code ne sera pas sauté. Avez-vous vérifié vos /logs pour voir si rien ne plante ?

Nous exécutons des travaux sidekiq personnalisés qui exportent des statistiques personnalisées dans un fichier CSV. Le travail s’exécute périodiquement. Parfois, l’exportation du fichier ne se produit pas. Le travail s’exécute sans message d’erreur.

Par exemple :

À des fins de test, si je clique sur ce bouton de déclenchement, le travail s’exécute, mais l’exportation du fichier ne se produit pas parfois.

Pour information, sur l’environnement Dev, le même code s’exécute mais il n’y a qu’un seul processus worker sidekiq. Ici, cela fonctionne bien. Je me demande si le problème est dû à plus d’un processus sidekiq en cours d’exécution sur prod/preprod.

Avez-vous vérifié vos /logs pour voir si rien ne plante ?

Oui, nous n’avons reçu aucune erreur liée au travail.

Et sachez que vous pourriez exécuter une installation non prise en charge

Nous exécutons la dernière version de discourse.

Merci

Vous devez vous attendre à de la concurrence. C’est un système de traitement par lots multi-threadé.

Certaines personnes utilisent Kubernetes, mais ce n’est pas pris en charge ici.

Je pense que vous allez devoir ajouter des journaux à votre tâche pour découvrir ce qui se passe.

C’est votre propre code personnalisé, n’est-ce pas ?

Nous avons déjà ajouté une journalisation à notre code personnalisé. Aucun problème avec notre code.

Oui

Oui, nous utilisons un cluster Kubernetes.

Juste une question !

Le sidekiq ne doit exécuter qu’un seul processus ? ou exécuter plus d’un processus sidekiq est-il acceptable ?

Comme tout système de traitement par lots décent, il est conçu pour exécuter plusieurs tâches à la fois, sinon il ne serait pas évolutif.

Assurez-vous d’en tenir compte lors de la conception de vos tâches.