Problema de concurrencia de trabajos de Sidekiq

Tenemos un problema con Sidekiq ejecutándose en múltiples pods.

Escenario 1:
En desarrollo, tenemos una sola réplica, lo que significa que se está ejecutando un solo pod. No tenemos ningún problema aquí.
Para tu información,
Comprobado: forum_url/sidekiq/busy (1 proceso en ejecución)

Escenario 2:
En preproducción y producción, tenemos más de una réplica (se están ejecutando más de un pod). Estamos experimentando un problema de concurrencia de Sidekiq (el trabajo se está ejecutando pero omite la ejecución del código).

Para tu información,
Comprobado: forum_url/sidekiq/busy (Más de 1 proceso en ejecución). Un proceso de Sidekiq se ejecuta por cada pod.

Corrígeme,
¿Está bien ejecutar más de un proceso de Sidekiq?
Si no está bien, ¿cómo solucionar el problema de concurrencia del trabajo?

Para tu información, estamos usando Discourse Docker

¿Cuáles son los pasos apropiados que debo seguir? Gracias de antemano.

¿A qué te refieres exactamente con un problema de “concurrencia”? ¿Puedes dar más detalles? ¿Qué se está ejecutando fuera de orden exactamente?

La adición de un trabajo de Sidekiq a una cola no garantiza el orden general de ejecución, ya que existen diferentes colas con diferentes prioridades, por lo que algunos trabajos pueden adelantarse a otros.

Además, “¿omitir la ejecución del código?”. ¿Puedes dar más detalles? ¿Qué código? Cuando un trabajo se ejecuta, el código no se omitirá. ¿Has revisado tus /logs para asegurarte de que nada se rompe?

Y ten en cuenta que podrías estar ejecutando una instalación no compatible, lo que podría ser la causa de tus problemas…

4 Me gusta

Hola @merefield Gracias por la respuesta

¿A qué te refieres exactamente con el problema de “concurrencia”? ¿Puedes dar más detalles? ¿Qué está sucediendo fuera de orden exactamente?

Como mencioné anteriormente, en el entorno de preproducción y producción se ejecutan más de un proceso de sidekiq.

¡No estoy seguro! El trabajo podría confundirse cuando se activa, qué proceso debería tomar debido al proceso de múltiples trabajadores.

También “omitir la ejecución del código”. ¿Puedes dar más detalles? ¿Qué código? Cuando un trabajo se ejecuta, el código no se omitirá. ¿Has revisado tus /logs para asegurarte de que nada se rompa?

Estamos ejecutando trabajos personalizados de sidekiq que exportan algunas estadísticas personalizadas en un archivo CSV. El trabajo se ejecuta periódicamente. A veces, la exportación del archivo no se realiza. El trabajo se ejecuta sin ningún mensaje de error.

Por ejemplo:

Para fines de prueba, si hago clic en este botón de activación, el trabajo se ejecuta, pero la exportación del archivo no se realiza a veces.

Para tu información, en el entorno de desarrollo, el mismo código se ejecuta, pero solo hay un proceso de trabajador de sidekiq. Aquí funciona bien. Me pregunto si el problema se debe a que se ejecutan más de un proceso de sidekiq en producción/preproducción.

¿Has revisado tus /logs para asegurarte de que nada se rompa?

Sí, no hemos recibido ningún error relacionado con el trabajo.

Y ten en cuenta que podrías estar ejecutando una instalación no compatible

Estamos ejecutando la última versión de discourse.

Gracias

Tienes que esperar concurrencia. Es un sistema de lotes multihilo.

Algunas personas también están en Kubernetes, pero eso no es compatible aquí.

Creo que tendrás que añadir algo de registro a tu trabajo para averiguar qué está pasando.

Este es tu propio código personalizado, ¿verdad?

Ya hemos añadido registro en nuestro código personalizado. No hay ningún problema en nuestro código.

Sí, estamos usando un clúster de Kubernetes.

¡Solo una pregunta!

¿El sidekiq solo debe ejecutar un proceso? ¿O está bien ejecutar más de un proceso sidekiq?

Como cualquier sistema de lotes decente, está diseñado para ejecutar más de un trabajo a la vez, de lo contrario, no escalaría.

Asegúrate de tener eso en cuenta al diseñar tus trabajos.