Introducción
Yo trabajo en una empresa en la que nos encontramos muchos puestos de trabajo de procesamiento por lotes de millones de registros de datos de todos los días y he estado pensando últimamente sobre todas las máquinas que se sientan alrededor de cada uno y todos los días sin hacer nada durante varias horas. ¿No sería bueno si pudiéramos utilizar esas máquinas para reforzar el poder de transformación de nuestros sistemas? En este conjunto de artículos que voy a ver los beneficios potenciales del empleo de una oficina de la red utilizando entornos virtualizados.
En la parte 1 me dio una visión general del sistema y las tecnologías que va a utilizar, así como se discute algunas de las posibles razones por las que se desea crear una red de oficinas.
Trabajo de control
Si usted va a estar ejecutando trabajos, entonces vamos a necesitar alguna forma de manejarlos. Su sistema de control de trabajos (en el servidor de trabajo) tiene que ser muy bien pensado, incluso antes de intentar ejecutar una red de oficinas. Así que en primer lugar, ¿cuáles son las tareas de un sistema de control de trabajo:
- Trabajos de la mano a cabo a petición de los trabajadores
- Dígales a los trabajadores qué tipo de trabajos se ejecuten
- Seguimiento de los trabajos
- Asegurar que los trabajos sólo se ejecutan una vez
- Proporcionar los datos del trabajo a los trabajadores, o por lo menos decir dónde conseguirlo
El sistema también debe ser extensible, una solución que funciona por ahora en un solo caso se puede extender para ejecutar varios tipos de trabajos como el negocio ve la pena en una solución de red. Por ejemplo, los trabajos pueden ganar las prioridades, más de un tipo de trabajo puede existir (es decir, varias bases de código), con el tiempo puede incluso ejecutar varias máquinas diferentes trabajadores que están optimizadas para cada tipo de trabajo (a pesar de que se aleja de los trabajadores "genéricos 'idea). Siempre trato de pensar en el futuro en el desarrollo de sistemas, una visión a corto plazo puede conducir a la frustración a largo plazo y el tiempo de desarrollo mayor.
Servidor de tareas de
Vamos a necesitar un lugar para el control de nuestros puestos de trabajo a partir de, este debe ser el único sistema en su red que cuenta con un localizador de recursos fijos, ya sea una dirección IP, nombre de host, la dirección URL (usando DNS interno), etc Esto se debe a los trabajadores necesitan saber dónde buscar empleo, los trabajadores necesitan para encontrar el sistema de control de trabajo (no el sistema de control de trabajo encontrar a los trabajadores).
El servidor de trabajo en sí no tiene realmente una tarea complicada (en un sistema básico de todos modos), que necesita para almacenar una lista de puestos de trabajo, entregar trabajos, recibir los resultados, y posteriormente almacenarlos para su posterior recuperación. ¿Cómo estas partes (tales como "mano puestos de trabajo") se definen pueden ser muy básicas. Más adelante se puede ampliar el sistema para incluir una interfaz de administración para agregar, editar, borrar, suspender trabajos, pero esto está más allá de este ejercicio.
No hay ninguna razón entonces de que su servidor de trabajo no podía ser una máquina virtual que se ejecuta en el servidor de procesamiento principal, siempre que no drena demasiados recursos de la misma. El servidor de trabajo sin embargo es necesario una alta disponibilidad, si se cae en un viernes por la noche usted va a perder un fin de semana de tratamiento, lo que podría costarle un par de semanas de tiempo de procesamiento (en comparación con el servidor de procesamiento principal solamente) . Es posible que desee considerar la posibilidad de su servidor de trabajo en un entorno de equilibrio de carga de alta disponibilidad.
Configuración básica
La configuración básica de nuestro servidor de trabajo consistirá en lo que estoy llamando a uno de mis servidores Bizkit (que es nux Li, m ySql, P HP). El código que se ejecuta en los trabajadores thea realmente averiguar qué trabajos se pueden ejecutar mediante la interacción con bases de datos con el trabajo del sistema de control. Más adelante se podría crear un servicio web y la mano en realidad a puestos de trabajo en lugar de que los trabajadores hacen el trabajo duro sí, pero por ahora vamos a seguir utilizando el principio KISS (Keep It Simple, Estúpido!).
Por lo tanto, vamos a crear tres mySQL para hacer frente a las tablas de puestos de trabajo. Estos trabajos se ``, `jobRecords`, y `jobResults`.
Aquí estoy usando SQL Buddy una gran alternativa poco a phpMyAdmin sólo porque es más fácil de instalar en CentOS (para otros ver: 10 grandes alternativas a phpMyAdmin )
Esta tabla se compone de 5 campos de simple,
- Identificación: identifican el trabajo
- Nombre: Podría ser una referencia de cliente, o cualquier número de otros identificadores
- Estado: Usted necesita saber que el trabajo es, por ejemplo,
- 0: No se ha iniciado
- 1: Recogido
- 2: Completado
- started_by: ¿Quién empezó a hacer el trabajo? Esto no es del todo necesario, pero es un agradable de tener. Te sugiero que los trabajadores de seguimiento por su dirección IP en la red
- started_at: ¿Cuándo el trabajador iniciar el trabajo? Mediante el seguimiento de los trabajos que no hayan completado dentro de X cantidad de tiempo que sabemos que tenemos que recoger el trabajo de nuevo y empezar a procesar por otro trabajador. Los trabajadores podrían dejar de procesar / fuera de línea para cualquier número de razones, falta de luz, caída, pérdida de red, etc
Es fácil cómo esta tabla podría ser ampliado con un unos pocos campos adicionales para permitir el seguimiento de las estadísticas, una columna de tiempo de llegada para ver cuánto tiempo tomó el trabajo, un contador para ver cuántos trabajadores tomó el trabajo (obviamente esto tiene que tienden a 1), prioridad de los trabajos, la lista puede seguir y seguir. En los escenarios de trabajo más complejo que sería posible especificar la cantidad de memoria que el trabajador tendría que tener acceso a (y por lo tanto, sólo el uso adecuado de trabajadores), o incluso qué tipo de trabajo sería necesario.
Permite añadir un ejemplo algunos trabajos:
La tabla siguiente de nuevo es bastante sencillo de entender, estos son nuestros registros de trabajos. Están vinculados a la mesa de trabajo principal por una columna `jobs_id`. La composición de esta tabla depende mucho de los datos que debe proporcionar a sus trabajadores, permite hacer un ejemplo muy simple, donde tenemos cuatro columnas:
- id: identificador del registro
- Nombre: nombre de la persona
- Dirección: Dirección de la Persona
- jobs_id: El ID de la tarea que este registro está vinculado a
La tabla de la tercera y última consiste en una tabla de resultados, tiene mucho de la misma marca hasta nuestra mesa, como los registros, y con la adición de algunas columnas pueden ser parte de la tabla de registros:
- job_record_id: Enlace el resultado a la mesa de trabajo
- Resultados: Los datos de resultado
... Y eso es todo lo que necesita para el control de trabajo! (Aunque a un nivel muy básico) En mi caso me señaló a otra mesa en la que mis datos de proceso se encuentra, pero esto podría muy fácilmente ser un archivo, los parámetros para ejecutar el código de simulación, lo que sea.
Selección de un trabajo
Como se mencionó anteriormente, los trabajadores a hacer nuestra gestión de trabajo por nosotros, por ahora, así que todo lo que necesitamos realmente es encontrar un trabajo que las necesidades de procesamiento y obtener la información. ¿Cómo hacemos esto? Así recoger los criterios de selección de empleo y buscar trabajo en SQL hice lo siguiente:
- Tener trabajos que no están marcados como completa, pero a partir de nuestros trabajadores y recuperar los (sustituto __ME__ con un identificador más fácil, sería la dirección IP):
ACTUALIZACIÓN `puestos de trabajo` SET `estado` = 0 donde `status` Y `= 1 started_by` = __ME__;
- Utilizando los criterios de selección de tareas, seleccione un trabajo y decirle al sistema de control que este trabajador se trata de que:
ACTUALIZACIÓN `puestos de trabajo` SET `estado` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `estado` = 0 o
(`Status` Y `= 1 started_at`> DATE_SUB (NOW (), intervalo de una hora X)) ORDER BY `id` ASC;
Por el acaparamiento de los trabajos que no han arrojado resultados en X cantidad de tiempo que nos aseguramos de que todos los trabajos se ejecutan en el caso de un trabajador de chocar o ir sin permiso.
- A continuación tomar los datos de puestos de trabajo seguido por los mismos registros:
SELECT * FROM `puestos de trabajo` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Una vez finalizado el trabajo que insertar nuestros registros de resultados y marcar el trabajo lo más completo. Recuerde que trabajos se pueden suspender / reanudar en cualquier momento, permitir cierta solidez en su guión. Es posible que la tarea se suspende la mitad del camino a través de la actualización del sistema de control de trabajos para comprobar el número de registros en un puesto de trabajo y el número de resultados vuelve a guardar en el sistema de control de trabajo sería un acierto.
Además, si bien esto demuestra cómo los trabajos pueden ser seleccionados y administrados desde un marco de consulta SQL que realmente debería ser la abstracción de su control sobre el trabajo de manera que si usted decide pasar a utilizar un servicio web, un sistema de archivos basado en XML , o cualquier otro número de sistemas que no afectará el código por encima de ella.
Trabajo de configuración
El siguiente aspecto a considerar es el tamaño del trabajo y la configuración. Al jugar con la configuración de trabajo que puede lograr un excelente equilibrio entre la velocidad, la duplicación de procesos, y la fiabilidad. Tome un par de escenarios deA:
- Puestos de trabajo tome un día para ejecutar cada uno: Esto significa que sus trabajadores necesitan 15 días para procesar cada trabajo (recuerde que el 10% de la energía para 2/3rds de la época). Esto claramente no es una buena configuración, el tamaño de su trabajo es demasiado grande! Se necesitaría por lo menos el doble de tiempo para conseguir un trabajo procesado si el trabajador se ausentan sin permiso inicial (tiempo para recoger a que no ha devuelto un resultado más el tiempo de reprocesamiento). En un ideal que le gustaría tener al menos un trabajo de jornada completa fácilmente aclarado por el final de cada período de inactividad larga, de esa manera a mantener los puestos de trabajo marcando más y en el peor caso, un trabajo que tomaría dos días para el proceso si el primero van a faltar.
- Puestos de trabajo tome un minuto para correr: Esto significa que los trabajadores toman unos 15 minutos para ejecutar cada trabajo. Si bien este principio puede parecer ideal, la ganancia de procesamiento de trabajo adicional durante la hora del almuerzo, coffee break, reuniones, etc este escenario pone la tensión en otras áreas de su sistema y presenta sus propios problemas. Por ejemplo, en primer lugar la configuración / procesamiento relación de tiempo que va a ir a la derecha hacia abajo, por lo tanto perder la eficiencia del sistema. La red va a ser constante flujo de información de trabajo para el personal de los trabajadores de varios frustrantes que están dong su día a día. También vas a poner más presión sobre el servidor de procesamiento de trabajo, ya que tiene que repartir montones y montones de pequeñas piezas de trabajo sobre una base regular. Por último, en esta situación si el servidor de trabajo de baja que va a crear un registro de vuelta enorme de trabajo no realizado, mientras que más puestos de trabajo podrían continuo de procesamiento felizmente ignorante de que el servidor de trabajo estaba experimentando dificultades.
En realidad no habrá una configuración ideal para la configuración de la red, mucho depende de los recursos disponibles, tipo de empleo, los requisitos de trabajo de tiempo de respuesta, capacidad de red, y así sucesivamente. Sin embargo, algunas directrices serían:
- Trabajos de tamaño de modo que cada trabajador puede obtener a través de puestos de trabajo por lo menos 3.4 en un período de 15 horas (el período más largo posible el tiempo de inactividad)
- Jugar con el tamaño del trabajo a fin de que el tiempo de instalación se convierte en bastante insignificante en comparación con el tiempo de procesamiento (teniendo en cuenta el punto anterior).
- Si un trabajo no termina en el doble de la cantidad de tiempo (tal vez menos) que espera que se complete que suponer que su pasado sin permiso y comenzar a procesar con otro trabajador. Esto significa que usted puede tener que esperar hasta tres veces la duración normal de un puesto de trabajo a que se complete (posiblemente más si el trabajo de fallar). Es posible que desee reducir este tiempo, pero tenga cuidado de no reducir demasiado, ya que puede comenzar a duplicar las tareas de procesamiento en una base regular.
- Puestos de trabajo debe ser independiente de las necesidades externas, tanto como sea posible. El servidor de trabajo, por ejemplo, sólo se debe contactar al inicio y al final de cada trabajo.
- No sature su red, esto tiene dos efectos negativos, a su personal durante el día se encuentra con la red de frustración y los problemas se pueden experimentar con las conexiones se agote el tiempo un problema que sólo va a empeorar a medida que la escala de su red.
- Garantizar puestos de trabajo se puede ejecutar en sus trabajadores. Si los trabajos se vuelven demasiado espacio de memoria puestos de trabajo intensivo o intensivo del disco comenzará a abortar y lo único que notará es una caída en el número de trabajos procesados sin ninguna razón real de por qué.
Resultados de la presentación de un trabajo
Al presentar los resultados de un trabajo es importante comprobar que los resultados no han sido presentados por otro trabajador, especialmente si el trabajo actual ha estado inactivo desde hace algún tiempo.
Cuando los resultados se presentan para que el número de resultados coincide con el número de registros en el trabajo.
Como se indicó anteriormente, y no está de más insistir, construir la tolerancia a fallos en la recuperación de puestos de trabajo y presentación de resultados. Los trabajadores pueden (y lo más probable es que) entrar en el modo de suspensión en la mayoría de los inconvenientes de los tiempos y esto tiene que ser atendidos. Además, una vez más abstracción de su presentación resultados ayudarán a atender a futuros cambios en su sistema de control de trabajo mucho más fácil de tratar.
Resumen
En este seccion_a hemos visto qué es un servidor de control de trabajo que tiene que hacer y cómo llegar a un sistema muy básico establecido. Hablamos de cómo recuperar un puesto de trabajo del sistema de control y de la mejor manera de configurar puestos de trabajo para aprovechar al máximo nuestro sistema de red de su oficina. Para finalizar, un párrafo o dos sobre la presentación de los resultados al servidor de control de trabajo fue presentado.
- Un servidor de control de trabajo administra los trabajos y asegura que todas las unidades de trabajo se completan
- Mediante la abstracción de su trabajo de selección / resultados de la presentación que podemos cambiar la tecnología del servidor de control sin problemas mucho
- Configure su trabajo para asegurarse de que se ejecute de forma rápida y eficiente, sin poner demasiada presión sobre su infraestructura de red, y sin duplicar las tareas de procesamiento en una base regular.
- Asegúrese de que construir la tolerancia a fallos y checking error en su rutina, los trabajadores pueden suspender y reanudar la mayoría de los inconvenientes de los tiempos. Recuerde verificar si los resultados han sido presentados por otro trabajador.
La próxima vez
En la parte 3 vamos a crear nuestra máquina de procesamiento virtual y configurar las ventanas de nuestras máquinas para convertirse en tiempo de inactividad los trabajadores.