Introducción
Yo trabajo en una empresa donde nos encontramos muchos puestos de trabajo de procesamiento por lotes de millones de registros de datos cada día y he estado pensando recientemente acerca de todas las máquinas que se sientan alrededor de 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 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.
Control de Tareas
Si usted va a estar ejecutando trabajos entonces usted va a necesitar una cierta manera de gestionarlos. Su sistema de control de trabajos (en su servidor de trabajo) tiene que ser muy bien pensado, incluso antes de intentar ejecutar una red de oficinas. Así, en primer lugar, ¿cuáles son las tareas de un sistema de control de trabajo:
- Repartir puestos de trabajo a petición de los trabajadores
- Dígales a los trabajadores qué tipo de trabajos se ejecuten
- Seguimiento de los trabajos
- Asegúrese de que los trabajos sólo se ejecutará una vez
- Proporcionar los datos de empleo a los trabajadores, o por lo menos les diga dónde conseguirlo
El sistema también debe ser extensible, una solución que funciona por ahora en un solo caso puede ser ampliado para ejecutar varios tipos de puestos de trabajo como el negocio ve la pena en una solución de red. Por ejemplo, los trabajos pueden tener prioridades, más de un tipo de trabajo puede existir (es decir, varias bases de código), con el tiempo incluso se puede ejecutar varias máquinas diferentes de los trabajadores que están optimizados para cada tipo de trabajo (a pesar de que se mueve lejos del trabajador "genérico idea). Siempre trato de pensar en el futuro, cuando 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 controlar nuestros puestos de trabajo a partir, este debe ser el único sistema en su red 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 es porque los trabajadores tienen que saber dónde buscar trabajo, los trabajadores necesitan para encontrar el sistema de control de trabajos (no el sistema de control de trabajo de encontrar a los trabajadores).
El servidor de trabajo en sí no tiene realmente una tarea complicada (en un sistema básico de todos modos), es necesario almacenar una lista de puestos de trabajo, repartir puestos de trabajo, recibir los resultados, y posteriormente almacenarlos para su posterior recuperación. ¿Cómo estas partes (por ejemplo, 'mano puestos de trabajo ") se definen pueden ser muy básicas. Más adelante podemos ampliar el sistema para incluir una interfaz de administración para agregar, editar, eliminar, suspender puestos de trabajo, pero esto está más allá de este ejercicio.
No hay ninguna razón que sea entonces cuando su servidor de trabajo no puede ser una máquina virtual 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 vas 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é puestos de trabajo que se puede ejecutar mediante la interacción con bases de datos con el empleo de sistemas de control. Más adelante se podría crear un servicio web y la mano en realidad a puestos de trabajo en lugar de tener a los trabajadores hacer el trabajo duro sí, pero por ahora vamos a seguir utilizando el principio KISS (Keep It Simple, Stupid!).
Por lo tanto, vamos a crear tres mySQL para hacer frente a las tablas de puestos de trabajo. Estos serán puestos de trabajo ``, `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 que otros vean: 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 cliente, o cualquier número de otros identificadores
- Estado: Es necesario saber dónde está el trabajo es menos, por ejemplo,
- 0: No se ha iniciado
- 1: Recogido
- 2: Completa
- started_by: ¿Quién ha empezado 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 necesitamos para recoger el trabajo de nuevo y comenzar a procesar por otro trabajador. Los trabajadores podrían detener el procesamiento / go en línea para cualquier número de razones, falta de luz, accidente, pérdida de red, etc
Es fácil cómo esta tabla se puede ampliar 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 puesto de trabajo (obviamente, esto tiene que tienden a 1), prioridad del trabajo, la lista puede seguir y seguir. En los escenarios de trabajo más complejos sería posible especificar la cantidad de memoria que el trabajador tendría que tener acceso a (y por lo tanto, sólo utilizan los trabajadores adecuados), o incluso qué tipo de trabajador se requiere.
Permite agregar unas pocas empleos ejemplo:
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 de `jobs_id`. La composición de esta tabla depende mucho de los datos que necesita para abastecer a sus trabajadores, vamos a hacer un ejemplo muy simple, donde tenemos cuatro columnas:
- Identificación: Identificación del expediente
- Nombre: Nombre de la persona
- Dirección: Dirección de la Persona
- jobs_id: El ID de trabajo que este disco está ligado a
La tabla de la tercera y última consiste en una tabla de resultados, se tiene mucho el mismo constituyen como nuestra tabla de registros, y con la adición de algunas columnas podría ser parte de la tabla de registros:
- job_record_id: Vincular el resultado a la mesa de trabajo
- Resultado: Los datos de los resultados
... 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 donde mis datos en el proceso se encuentra, pero esto podría fácilmente un archivo de estado, los parámetros para ejecutar código de simulación, lo que sea.
Selección de un puesto de trabajo
Como se mencionó anteriormente, los trabajadores a hacer nuestra gestión de trabajo para nosotros, por ahora, así que todo lo que tenemos que hacer realmente es encontrar un trabajo que necesita tratamiento y obtener la información. ¿Cómo hacemos esto? Bien elegir a nuestros criterios de selección de empleo y buscar trabajo, en SQL hice lo siguiente:
- Tome todos los puestos de trabajo que no están marcados como completa, pero desde nuestro trabajo y recuperar los (sustituya ME__ __ con un identificador más fácil, sería la dirección IP):
UPDATE `puestos de trabajo` SET `status` = 0 donde `status` = 1 `Y` = __ started_by ME__;
- Utilizando los criterios de selección de trabajo, seleccione un trabajo y decirle al sistema de control que este trabajador se trata de que:
UPDATE `puestos de trabajo` SET `status` = 1, `started_by` = __ ME__, `started_at` = NOW () donde `status` = 0 o
(`Status` = 1 `Y` started_at> DATE_SUB (NOW (), intervalo de una hora X)) ORDER BY `id` ASC;
Por trabajos que llaman la que no han devuelto los resultados en X cantidad de tiempo que nos aseguramos de que todos los trabajos se ejecutan en el caso de un trabajador se caiga o ausentarse 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 como puestos de trabajo se puede suspender / reanudar en cualquier momento y permitir cierta solidez en su guión. Puede ser que suspende la tarea a medio 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 guardados de vuelta al sistema de control de trabajo sería un acierto.
Además, si bien esto demuestra cómo los trabajos se pueden seleccionar y gestionar desde un marco de consulta SQL que realmente se debe abstraer de su control sobre el trabajo de modo 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 encima de ella.
Tarea de configuración
El siguiente aspecto a considerar es el tamaño del trabajo y la configuración. Al jugar con la configuración del trabajo que se puede lograr un excelente equilibrio entre la velocidad, el proceso de replicación, y la fiabilidad. Tome un par de escenarios Ofa:
- Ofertas de empleo tomar 1 cada día para funcionar: 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 é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 tendría al menos un trabajo de jornada completa facilitado el claro al final de cada período de inactividad, 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.
- Ofertas de empleo tomar 1 minuto para correr: Esto significa que sus trabajadores dura unos 15 minutos para ejecutar cada trabajo. Si bien este principio puede parecer ideal, 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 de / procesamiento relación de tiempo va a ir a la derecha hacia abajo, por lo tanto perder la eficiencia del sistema. La red va a ser la información del trabajo constante de transmisión al personal de los trabajadores de varios frustrantes que son dong de su trabajo del día a día. También vas a poner más esfuerzo en su trabajo como servidor de procesamiento que tiene que repartir montones y montones de pedazos pequeños de trabajo sobre una base regular. Por último, en esta situación si el servidor de trabajo de baja que vas a crear un registro de nuevo mucho trabajo sin terminar, mientras que trabajos más grandes podría, continuó el 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, los tipos de trabajo, los requisitos de trabajo de entrega a tiempo, la capacidad de la red, y así sucesivamente. Sin embargo, algunas pautas serían los siguientes:
- 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 más largo período de tiempo de inactividad es probable)
- Juega con el tamaño del trabajo de manera que el tiempo de preparación llega a ser bastante insignificante en comparación con el tiempo de procesamiento (teniendo en cuenta el punto anterior).
- Si un trabajo no se completa en el doble de la cantidad de tiempo (tal vez menos) que espera que se complete que asumir 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 puesto de trabajo a que se complete (posiblemente más si el trabajo de fallar). Es posible que desee reducir este tiempo, pero ten cuidado de no reducir demasiado como usted puede comenzar a duplicar las tareas de procesamiento en una base regular.
- Ofertas de empleo 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 tendrá 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 el tiempo de espera de un problema que sólo va a empeorar a medida que ampliar su red.
- Asegúrese de puestos de trabajo se puede ejecutar en sus trabajadores. Si los trabajos se vuelven demasiado espacio de memoria puestos de trabajo intensivos o intensivos en el 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é.
Presentación de los resultados de un trabajo
Al presentar los resultados de un trabajo, es importante comprobar que los resultados no han sido facilitados por otro trabajador, especialmente si el trabajador actual ha estado inactivo durante algún tiempo.
Cuando los resultados se presentan asegurarse de 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) entra en modo de suspensión en el más incómodo de veces y esto tiene que ser atendidos. También una vez más, abstrayendo de su presentación resultados ayudarán a atender a los cambios futuros en el sistema de control de trabajo mucho más fácil de tratar.
Resumen
En este seccion_a hemos visto lo que 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 trabajo desde el 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 de vuelta al servidor de control de trabajo se presentó.
- Un servidor de control de trabajo administra los trabajos y asegura que todas las unidades de trabajo se completan
- Al abstraer el trabajo de seleccionar o resultados de la presentación podemos cambiar la tecnología del servidor de control sin problemas mucho
- Configure sus puestos de trabajo para asegurarse de que se ejecute de forma rápida y eficiente, sin poner demasiada presión sobre la infraestructura de red, y sin duplicar tareas de procesamiento en una base regular.
- Asegúrese de que usted construye tolerancia a fallos y checking error en sus rutinas, los trabajadores pueden suspender y reanudar y el más incómodo de los tiempos. Recuerde que debe comprobar si los resultados se han presentado ya por otro trabajador.
El tiempo siguiente
En la parte 3 vamos a crear nuestra máquina virtual de procesamiento y establecer nuestras máquinas Windows para convertirse en trabajadores a tiempo de inactividad.