Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
¿Cuál es el mejor enfoque para programar tareas en el clúster de Docker?

Actualmente, tengo una aplicación ejecutándose en un servidor. Hay un crontab configurado, de acuerdo con reglas específicas, hay tareas que se ejecutan en ciertos momentos.

Ahora, estoy pensando en migrar mi aplicación a un contenedor docker para poder ejecutar varias instancias de mi aplicación de forma independiente. Lo que me pregunto cómo hacer es cómo programar tareas en varios contenedores acoplables .

Digamos que tengo un comando php que cada hora obtiene nuevos datos de una aplicación de terceros a través de la API. Actualmente, usaría un cron para programarlo así: 0 */1 * * * php /some/path/index.php mycommand . Puede haber múltiples comandos similares lanzados a diferentes frecuencias.

No puedo simplemente empaquetar crontab en la imagen de mi ventana acoplable, ya que el comando se ejecutaría 5 veces cuando hay 5 contenedores en ejecución. Quiero lanzarlo solo una vez de forma independiente en el conteo de contenedores en ejecución.

¿Cuál sería la solución ideal para lograr esto?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Podría usar un mecanismo de bloqueo, usando algo como redis. Básicamente funcionaría así.

el script se despierta, lo primero que hace es intentar obtener el bloqueo. Si obtiene el bloqueo, entonces avanza, si algo más tiene el bloqueo, entonces sale. Haga lo que hace el script y luego suelte el bloqueo.

Dado que solo un script puede obtener el bloqueo a la vez, solo permitirá que el script se ejecute una vez.

Es importante eliminar el bloqueo cuando finalice el script y también agregar un TTL al bloqueo para que, si el script muere antes de liberar el bloqueo, el bloqueo se abra automáticamente después de que caduque el TTL.

Aquí hay algunos documentos sobre cómo usar Redis como un bloqueo distribuido. https://redis.io/topics/distlock

about 4 years ago · Santiago Trujillo Denunciar

0

Una estrategia simple en su caso sería usar contenedores con roles separados. Por ejemplo, en lugar de usar 5 contenedores que respondan a las solicitudes HTTP Y ejecuten cron, podría tener 4 contenedores que ejecuten solo su aplicación y uno exclusivamente para trabajos cron.

Si alguna vez necesita escalar sus trabajos cron agregando más nodos, entonces necesitará una solución de bloqueo/cola distribuida como lo describió @Ken Cochrane.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda