Introducción
Yo trabajo en una empresa donde corremos muchos puestos de trabajo de procesamiento por lotes millones de registros de datos cada día y he estado pensando sobre todos los equipos que se sientan alrededor de cada uno y cada día sin hacer nada durante varias horas. ¿No sería bueno si pudiéramos utilizar esas máquinas para reforzar la capacidad de procesamiento de nuestros sistemas? En esta serie 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.
Control de trabajos
Si usted va a estar ejecutando trabajos entonces usted va a necesitar una cierta manera de gestionarlos. Su sistema de control de trabajos (en el servidor de trabajo) tiene que ser muy bien pensado antes incluso de intentar ejecutar una red de oficina. Así que en primer lugar, ¿cuáles son las tareas de un sistema de control de trabajos:
- Entregue los trabajos a petición de los trabajadores
- Informe a los trabajadores qué tipo de puestos de trabajo para ejecutar
- Seguimiento de los trabajos
- Asegúrese de que los trabajos sólo se ejecutan una vez
- Proporcionar los datos del trabajo a los trabajadores, o por lo menos decirles dónde conseguirlo
El sistema también debe ser extensible, una solución que funciona por ahora en un solo caso puede ampliarse para ejecutar varios tipos de puestos de trabajo como la empresa considera que el valor en una solución de red. Por ejemplo, el empleo puede tener prioridades, más de un tipo de trabajo pueden existir (es decir, varias bases de código), con el tiempo incluso se puede ejecutar varias máquinas diferentes trabajadores que están optimizadas para cada tipo de trabajo (a pesar de que se aleje del "trabajador genérico 'idea). Siempre trato de pensar en el futuro cuando los sistemas en desarrollo, 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 de, este debe ser el único sistema en la cuadrícula que tiene 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 trabajos (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 todas formas), es necesario almacenar una lista de puestos de trabajo, entregar trabajos, recibir los resultados, y posteriormente almacenarlos para su posterior recuperación. ¿Cómo estas partes (por ejemplo, "entregar el empleo") se definen pueden ser muy básicas. Más tarde se puede extender el sistema para incluir una interfaz de administración para agregar, editar, eliminar, suspender los trabajos, pero esto está más allá de este ejercicio.
No hay motivo entonces de que su servidor de trabajo no podía ser una máquina virtual que se ejecuta en el servidor de proceso principal, siempre que no drena demasiados recursos de ella. El servidor de trabajo sin embargo se necesita de 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 principal de procesamiento solo) . 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 LIMP (es decir Li nux, ySql m, HP P). El código que se ejecuta en los trabajadores Thea realmente averiguar qué puestos de trabajo que se puede 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 de hecho reparten 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 las tablas para hacer frente a puestos de trabajo. Estos serán «puestos de trabajo», «jobRecords`, y `jobResults».
Aquí estoy usando SQL Buddy una alternativa poco grandes para phpMyAdmin sólo porque es más fácil de instalar en CentOS (para otros ven: 10 grandes alternativas a phpMyAdmin )
Esta tabla se compone de 5 campos simples,
- Identificación: identificar en forma única el trabajo
- Nombre: ¿Podría ser una referencia del cliente, o cualquier número de otros identificadores
- Situación: Usted necesita saber que el trabajo es, por ejemplo,
- 0: No ha comenzado
- 1: Recogido
- 2: Completado
- started_by: ¿Quién empezó a hacer el trabajo? Esto no es del todo necesario, pero es bueno tener. Te sugiero que el seguimiento de los trabajadores 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 comenzar a procesar por otro trabajador. Los trabajadores podrían dejar de procesar / go en línea para cualquier número de razones, falta de energía eléctrica, accidentes, pérdida de red, etc
Es fácil cómo este cuadro podría ampliarse con algunos 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), la prioridad del trabajo, la lista puede seguir y seguir. En escenarios más trabajo complejo que sería posible especificar la cantidad de memoria que el trabajador tendría acceso a (y por tanto, sólo el uso adecuado de trabajadores), o incluso qué tipo de trabajador se requiere.
Vamos a añadir un ejemplo algunos trabajos:
En la tabla siguiente de nuevo es muy sencillo de entender, estas son nuestras fichas de trabajo. Están vinculados a la mesa de trabajo principal por una columna `jobs_id». La composición de este cuadro depende mucho de los datos que debe proporcionar a sus trabajadores, vamos a hacer un ejemplo muy simple, donde tenemos cuatro columnas:
- Identificación: Identificación del registro
- Nombre: el nombre de la persona
- dirección: La dirección de la persona
- jobs_id: El ID de trabajo 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 que la mesa de registros, y con la adición de algunas columnas pueden ser parte de la tabla de registros:
- job_record_id: Vincular el resultado a la mesa de trabajo
- resultado: El resultado de los datos
... Y eso es todo lo que necesitas para el control del trabajo! (Aunque a un nivel muy básico) En mi caso estoy señaló a otra mesa en la que mis datos para procesar se encuentra, pero esto podría fácilmente un archivo de estado, 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 necesita tratamiento 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:
- Tome ofertas de empleo que no están marcados como completa, pero desde nuestro trabajo y recuperar los (__ME__ sustituir con un identificador más fácil, sería la dirección IP):
UPDATE `trabajos` SET `estado` = 0 WHERE `estado` = 1 `Y` = started_by __ME__;
- Utilizando los criterios de selección de trabajos, seleccione un trabajo y decirle al sistema de control que este trabajador se trata de que:
UPDATE `trabajos` SET `estado` = 1, `started_by` = __ME__, `started_at` = NOW () en caso de «estado» = 0 O
(«Estado» = 1 `Y` started_at> DATE_SUB (NOW (), INTERVAL X HORA)) ORDER BY `id` ASC;
Por el acaparamiento de puestos de trabajo 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 `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 marca el trabajo lo más completo. Recuerde que los trabajos pueden suspender / reanudar en cualquier momento, permitir cierta solidez en su guión. Puede ser que la tarea suspende la mitad del camino a través de la actualización del sistema de control de trabajo, así que comprobar el número de registros en un puesto de trabajo y el número de resultados de volver a guardar en el sistema de control de trabajo sería un acierto.
Además, si bien este trabajo se muestra cómo se pueden seleccionar y administrar desde una consulta de SQL marco que realmente debe abstraer su control sobre el trabajo de modo que si usted decide pasar a utilizar un servicio web, basado en un sistema de archivos, 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, el proceso de replicación, y la fiabilidad. Tomar un par deA escenarios:
- Trabajos tener un día cada uno para ejecutar: Esto significa que sus trabajadores necesitan 15 días para procesar cada puesto de trabajo (recuerde que el 10% de la energía para 2/3rds de la hora). Esto claramente no es una configuración de sabios, 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 tendría al menos un trabajo de jornada completa fácilmente aclarado por el final de cada período de inactividad, de esa manera a mantener los puestos de trabajo ralentí y en peor de los casos un trabajo tomaría dos días para el proceso si el primero van a faltar.
- Trabajos tomar un minuto para correr: Esto significa que sus trabajadores toman unos 15 minutos para ejecutar cada trabajo. Si bien este principio puede parecer ideal, la ganancia de proceso de trabajo adicional durante la hora del almuerzo, coffee break, reuniones, etc este escenario pone tensión en otras áreas de su sistema y presenta sus propios problemas. Por ejemplo, en primer lugar la configuración de su proporción de tiempo de procesamiento 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 empleo a los trabajadores de diversos funcionarios frustrante que dong su trabajo diario. Usted también va a poner más presión en su trabajo como servidor de procesamiento que tiene que repartir montones y montones de pequeñas piezas de trabajo sobre una base regular. Por último, en esta situación si su servidor de trabajo se cae va a crear un registro de gran parte de atrás de que el trabajo no mayor de puestos de trabajo podría continuación de la tramitación felizmente ignorante de que el servidor de trabajo estaba experimentando dificultades.
En realidad no habrá una configuración ideal para la configuración de su red, mucho depende de los recursos disponibles, los tipos de trabajo, los requisitos del trabajo tiempo de respuesta, capacidad de red, y así sucesivamente. Sin embargo, algunas directrices serían:
- Tamaño de puestos de trabajo para que cada trabajador puede obtener a través de al menos 3-4 puestos de trabajo en un período de 15 horas (el más largo período de tiempo de inactividad probable)
- Juega con el tamaño del trabajo para 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 asume que su AWOL ido y comenzar a procesar con otro trabajador. Esto significa que usted puede tener que esperar hasta tres veces la longitud normal de un trabajo para que se complete (posiblemente más si el trabajo no posterior). Es posible que desee reducir este tiempo, pero tenga cuidado de no reducir demasiado ya usted puede comenzar a duplicar las tareas de procesamiento en una base regular.
- Los trabajos deben ser independientes de las necesidades fuera de la medida de lo 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 problemas se pueden experimentar con las conexiones se agote el tiempo un problema que sólo va a empeorar a medida que escala de su red.
- Asegúrese de puestos de trabajo se puede ejecutar en sus trabajadores. Si los trabajos se vuelven demasiado espacio de memoria de trabajo intensivo o intensivo del disco comenzará a abortar y lo único que notará es una gota en el número de trabajos procesados sin verdadera razón.
Entrega de los resultados de un trabajo
Al presentar los resultados de un trabajo es importante comprobar que los resultados no han sido presentadas por otro trabajador, especialmente si el trabajador actual ha estado inactivo por algún tiempo.
Cuando los resultados se envía a asegurar que el número de resultados coincide con el número de registros en el trabajo.
Como se dijo 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 modo de suspensión en el inconveniente de la mayoría de veces y esto tiene que ser atendidos. Además, una vez más abstrayendo su presentación resultados ayudarán a atender a los futuros cambios en su sistema de control de trabajo mucho más fácil de tratar.
Resumen
En esta Seccià hemos visto lo que un servidor de control de trabajos tiene que hacer y cómo conseguir un sistema muy básico establecido. Hablamos de cómo recuperar un trabajo desde el sistema de control y 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 resultados al servidor de control de trabajo se presentó.
- Un servidor de control de tareas administra los trabajos y asegura que todas las unidades de trabajo se completan
- Al abstraer el trabajo de seleccionar / sumisión resultados 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 eficaz sin poner demasiada presión sobre su infraestructura de red, y sin duplicar tareas de procesamiento en una base regular.
- Asegúrese de que construir la tolerancia a fallos y checking error en sus rutinas, los trabajadores pueden suspender y reanudar y el inconveniente de la mayoría de veces. Recuerde, para comprobar si los resultados ya han sido presentadas por otro trabajador.
La próxima vez
En la parte 3 vamos a crear nuestra máquina de proceso virtual y configurar las ventanas de nuestras máquinas para convertirse en trabajadores a tiempo inactivo.