2011-06-20 25 views
5

en este momento, tenemos un único servidor con una pestaña cronjob que envía correos electrónicos diarios. Nos gustaría escalar ese servidor. La aplicación es una aplicación estándar zend framework desplegada en el servidor centos en Amazon Cloud.Escalar cronjobs en varios servidores

Ya nos ocupamos del equilibrio de carga, la administración de contenido y la implementación de administración. Sin embargo, el cronjob sigue siendo un problema para nosotros, ya que tenemos que conceder que algunos trabajos se realicen solo una vez.

Por ejemplo, la tarea programada correos electrónicos todos los días hay que sólo se ejecuta una vez por ser un único servidor. Estoy buscando el mejor método para el beneficiario, solo un servidor lo ejecutará solo una vez.

Estoy pensando en 2 soluciones, pero me preguntaba si alguien más tenía el mismo problema.

  1. Haga que uno de los servidores sea "maestro", que solo envía los correos electrónicos diarios. Eso será un problema, si el servidor funciona mal, y generalmente no queremos tener un servidor "especial". También significa que tendremos que hacer un seguimiento de qué servidor es maestro.
  2. Haga que se realice una cola de tareas de programación. Cada servidor abre esa cola y ve qué tareas deben realizarse. El primer servidor que "agarra" la tarea, preformará la tarea y la marcará como terminada. Estaba viendo el servicio de cola simple de Amazon como una solución para la cola.

Ambas soluciones tienen ventajas y desventajas, y me preguntaba si alguien pensó en otra persona que podría ayudarnos aquí.

+1

Esto podría ser mejor servido en ServerFault? –

Respuesta

5

Cuando tenga que escalar trabajos de cron, usted es mejor utilizar un gestor de trabajo como Gearman

+1

Puedes usar PHP con Gearman. – datasage

+0

gracias, vi la biblioteca php nativa. parece interesante. – aporat

+0

+1 para Gearman, está bien integrado con PHP. Lo usamos para muchas comunicaciones multiplataforma, ETL entre bases de datos para migrar datos, enviar correos electrónicos, rastrear la actividad del usuario, y más. Lo único que encuentro es que si bien puede tener múltiples clientes de Gearman en ejecución, el proceso central del servidor de Gearman no se escala, por lo que terminaría teniendo que ejecutar múltiples servidores, tal vez llamando a diferentes clasificaciones de clientes que tienen acceso a algunos trabajos y no otros. – iandouglas

0

Tuve el mismo problema. Lo que hice fue muy simple.

  1. Hice la instancia más barata de EC2 en AWS.
  2. Creé los cronjob (s) solo en este servidor.
  3. El trabajo cron simplemente ejecuta trabajos que solo hacen una solicitud simple a mi punto final/api (es decir, api.midominio.com).
  4. En mi API, solo tengo una ruta para ver estas solicitudes especiales que ejecutarán el trabajo que quiero. Entonces, básicamente, todo lo que hago en lugar de ejecutar la tarea usando un cronjob, estoy ejecutando la tarea a través de una solicitud http.

espero que tiene sentido! ¡Ahora no importa cuántos servidores tenga, simplemente escalará! Además, la única función del servidor de cronjob es ejecutar trabajos simples muertos para enviar una solicitud, nada más.

Cuestiones relacionadas