Introdución
Eu traballo nunha empresa na que corremos moitos traballos en lote de procesamento de millóns de rexistros de datos cada día, e eu pensei recentemente sobre todas as máquinas que se sentan arredor de cada e cada día sen facer nada por varias horas. Non sería bo se puidésemos utilizar esas máquinas para reforzar o poder de procesamento dos nosos sistemas? Neste conxunto de artigos que eu vou mirar para os potenciais beneficios da contratación dunha oficina da rede usando ambientes virtualizado.
Na parte 1 eu dei unha visión xeral do sistema e tecnoloxías eu estarei usando, así como discutidos algúns dos posibles motivos polos que desexa crear unha rede de oficina.
Job control
Se indo para ser executado emprego, entón vai ter algunha maneira de xestionar a eles. O seu sistema de control do traballo (no seu servidor de emprego) ten que ser moi ben pensada antes de intentar realizar unha rede de oficina. Entón, en primeiro lugar, cales son as tarefas dun sistema de control de traballo:
- Man emprego fóra a petición dos traballadores
- Dicir aos traballadores que tipo de postos de traballo para realizar
- Traballos franxa
- Garantir que as tarefas só son executadas xa
- Proporcionar datos de emprego aos traballadores, ou, polo menos, dicirlles onde obtelo
O sistema tamén debe ser extensible, unha solución que funciona de momento nun único caso pode ser prorrogado para realizar varios tipos de traballos como a empresa ve o valor nunha solución de grid. Por exemplo, os traballos poden gañar prioridades, máis dun tipo de traballo pode existir (ou sexa, bases de código varias), eventualmente pode incluso realizar varias máquinas de traballo diferentes que son optimizados para cada tipo de traballo (aínda que iso afastarse do traballador xenérico 'idea). Sempre tento pensar no futuro no desenvolvemento de sistemas, unha visión a curto prazo pode levar á frustración de longo prazo e tempo de desenvolvemento aumentou.
Servidor de traballo
Nós imos ter un lugar para controlar o noso traballo de, este debe ser o único sistema na súa rede que ten un fixo Resource locator, será que un enderezo IP, nome de host, URL (usando DNS interno), etc Isto é porque os traballadores teñen que saber onde buscar emprego, os traballadores teñen que atopar o sistema de control de traballo (non o sistema de control de traballo atopar os traballadores).
O servidor de traballo en si non ten realmente unha tarefa complicada (nun sistema básico de calquera forma), el que almacenar unha lista de postos de traballo, distribuír emprego, recibir os resultados, e, posteriormente, almacena-los para a súa posterior recuperación. Como esas pezas (como "man de emprego") son definidos pode ser moi básico. Máis tarde, podemos estender o sistema para incluír unha interface de administración para engadir, editar, borrar, suspender os traballos, pero iso está máis aló deste exercicio.
Non hai ningunha razón que sexa, entón, que o teu servidor de traballo non podería ser unha máquina virtual rodando dentro do seu servidor de procesamento principal, sempre que non drena moitos recursos a partir del. O servidor de traballo con todo non precisan de alta dispoñibilidade, se vai para abaixo nunha noite de venres vai perder un fin de semana enteiro de procesamento, potencialmente custando-lle un par de semanas de tempo de procesamento (cando se compara ao seu servidor de procesamento principal só) . Pode querer poñer o seu servidor de traballo nun ambiente de balanceo de carga para alta dispoñibilidade.
Configuración básica
A configuración básica para o noso servidor de traballo estará composto do que eu estou chamando un dos meus servidores limpo (é dicir Li nux, m ySql, P HP). O código en execución no Thea traballadores van realmente descubrir o que emprego pode ser executado a través da interacción con bases de datos co traballo do sistema de control. Máis tarde, poderiamos crear un servizo web e realmente entregar os traballos en vez de ter os traballadores fan o traballo duro en si, pero por agora imos continuar a utilizar o principio KISS (Keep it simple, Stupid!).
Entón, imos crear tres MySQL táboas para xestionar postos de traballo. Estes serán postos de traballo ``, `jobRecords` e `jobResults`.
Aquí está a usar SQL camarada unha boa alternativa pouco para phpMyAdmin só porque é máis fácil de instalar no CentOS (para os outros o ven: 10 excelente alternativas para phpMyAdmin )
Esta táboa está composta de 5 campos simple,
- ID: Identificar o traballo
- Nome: podería ser unha referencia do cliente, ou calquera número de outros identificadores
- Estado: Debe saber onde o traballo está, por exemplo,
- 0: Non iniciado
- 1: Peguei
- 2: Completed
- started_by: Quen comezou a facer o traballo? Isto non é totalmente necesario, pero é bo ter un. Eu suxiro que os traballadores de seguimento polo seu enderezo IP na súa rede
- started_at: Cando é que o traballador iniciar o traballo? Acompañando os traballos que non teñan completado dentro X cantidade de tempo que sabemos que necesitamos para incorporarse o traballo, unha vez máis e comezar a analizar por outro traballador. Os traballadores poderían deter o procesamento / go off-line para calquera número de razóns, falta de enerxía, accidente, perda de rede, etc
É doado como esta táboa podería ser estendido con algúns campos adicionais para permitir o seguimento de estatísticas, unha columna de tempo de finalización para ver canto tempo levou o traballo, un contador para ver cantos traballadores colleu o traballo (obviamente iso necesita tenden a 1), a prioridade dos traballos, a lista pode ir sobre e sobre. En escenarios de traballo máis complexo que sería posible especificar a cantidade de memoria o traballador precisaría de acceso (e, polo tanto, utilizar só os traballadores máis axeitados), ou mesmo o tipo de traballador sería necesario.
Permite engadir un exemplo algúns traballos:
A táboa a seguir de novo é moi sinxelo de entender, estes son os rexistros o noso traballo. Eles están conectados á mesa de traballo principais por unha columna `jobs_id`. A composición desta táboa depende moito dos datos que precisa ofrecer aos seus traballadores, imos facer un exemplo moi sinxelo, onde temos catro columnas:
- id: identificación do rexistro
- name: o nome da persoa
- Dirección: Enderezo da Persoa
- jobs_id: A ID de traballo que este rexistro está ligada á
A táboa a terceira e última consiste nunha táboa de resultados, ten o mesmo compoñen a nosa táboa de rexistros, e coa adición de algunhas columnas podería ser parte da táboa de rexistros:
- job_record_id: Link resultado para a mesa de traballo
- Resultado: Os datos do resultado
... E iso é todo o que necesitas para control de traballo! (Aínda que a un nivel moi básico) No meu caso estou apuntou a outra táboa onde os meus datos para procesar foi localizado, pero isto pode só como facilmente foi un ficheiro, os parámetros para executar código de simulación, o seu nome.
Seleccionando un emprego
Como dito anteriormente, os traballadores van facer o noso traballo de xestión para nós agora, para todo o que necesitamos realmente facer é atopar un traballo que precisa de tratamento e obter a información. Como poderiamos facelo? Ben escoller os nosos criterios de selección de emprego e buscar emprego, en SQL eu fixen o seguinte:
- Tome todos os traballos que non están marcados como completa, pero do noso traballador e redefinir elas (substituto __ME__ cun identificador máis doado, sería a dirección IP):
UPDATE `empregos` SET `estado` = 0 WHERE `estado` = 1 AND `` = started_by __ME__;
- Usando o noso criterio de selección de emprego, seleccione un traballo e dicir ao sistema de control que este traballador está a tratar con el:
UPDATE `empregos` SET `estado` = 1, `` = started_by __ME__, `started_at` = NOW () WHERE `estado` = 0 OR
(`Estado` = 1 AND `started_at`> DATE_SUB (NOW (), intervalo Hour X)) ORDER BY `id` ASC;
Pegando traballos que non presentaron resultados en X cantidade de tempo que asegurar que todos os traballos son executados en caso de un traballador deixar de funcionar ou se ausentar sen licenza.
- A continuación cara os detalles emprego seguido polos rexistros propios:
SELECT * FROM `WHERE` emprego started_by `= __ME__ LIMITE 1;
SELECT * FROM `job_records WHERE` id `= __JOBID__;
Tras a conclusión do traballo que inserir rexistros noso resultado e marcar o traballo como completo. Lembre que os traballos poden suspender / resumir en calquera momento permiten algunha robustez no seu guión. Pode ser que a tarefa a medio suspende a actualización do sistema de control de traballo, así comprobar o número de rexistros en un emprego e o número de resultados salvo ao seu sistema de control de traballo sería unha medida acertada.
Ademais, aínda que iso demostra como os traballos poden ser seleccionados e xestor a partir dun cadro SQL-query ten que ser realmente abstraerse o seu control de traballo, co que se decide pasar a utilizar un servizo web, un sistema baseado en arquivo, XML , ou calquera outro número de sistemas que non afectará o código enriba del.
Configuración do traballo
O seguinte aspecto a considerar é o tamaño do traballo e configuración. Ao xogar coa configuración de traballo que poden atinxir un excelente equilibrio entre a velocidade, a replicación de procesos e fiabilidade. Bótalle un escenarios Deum parella:
- Emprego asumen un día cada un para realizar: Isto significa que os seus traballadores necesitan 15 días para procesar cada traballo (lembre-se 10% da enerxía para 2/3rds do tempo). Este non é claramente un sabio configuración, o tamaño do traballo é moi grande! Levaría polo menos o dobre do tempo para conseguir un emprego procesados que o traballador ir AWOL inicial (tempo de incorporarse que non teña retorno un resultado máis o tempo de reprocesando). En un ideal que ten polo menos un traballo completo facilmente apurada ata o final de cada período de tempo ocioso, de que xeito se mantén os postos de traballo máis típico e, o peor caso, un traballo levaría dous días para o primeiro proceso debería van faltar.
- Emprego asumen un minuto para executar: Isto significa que os seus traballadores levar uns 15 minutos para realizar cada traballo. Aínda que isto poida inicialmente parecer ideal, gañou de procesamento de traballo adicional durante a hora do xantar, coffee breaks, reunións, etc este escenario pon presión sobre outras áreas do seu sistema e presenta os seus propios problemas. Por exemplo, en primeiro lugar a súa razón de tempo de configuración / procesamento vai ir cara á dereita para abaixo, perdendo así a eficiencia do sistema. A súa rede vai ser constantemente streaming de información do traballo para o equipo de traballadores que son varios frustrante dong seu traballo do día a día. Tamén vai poñer máis presión sobre o seu servidor de procesamento de traballo, pois ten de prato para fóra lotes e lotes de pequenas pezas de traballo nunha base regular. Por fin, nesta situación, se o seu servidor de emprego descende vai crear un rexistro de volta enorme de traballo incompleto mentres traballos maiores podería, continuou alegría inconscientes de procesamento que o servidor estaba pasando por dificultades de traballo.
En realidade non haberá unha configuración ideal para a súa configuración de rede, moi depende dos recursos dispoñibles, tipo de traballo, emprego requisitos prazos de entrega, a capacidade de rede, e así por diante. Con todo algunhas orientacións sería:
- Traballos en tamaño de xeito que cada traballador pode pasar por polo menos 3-4 emprego nun período de 15 horas (o máis longo período de tempo probábel idle)
- Xogar co tamaño do traballo para que o tempo de configuración torna-se bastante insignificante comparado co tempo de procesamento (tendo en conta o punto anterior).
- Se un traballo non é concluído en o dobre do tempo (quizais menos) espera que el completa ela asume que a súa AWOL ir e comezar a proceso-lo con outro traballador. Isto significa que pode ter que esperar ata tres veces a lonxitude normal dun traballo para a conclusión (posiblemente máis, o traballo posterior fallar). Pode querer reducir este tempo, pero teña coidado de non reduci-lo moito como podes comezar a duplicar tarefas de procesamento nunha base regular.
- Traballos deben ser independentes das necesidades de fóra, na medida do posible. O servidor de emprego, por exemplo, só debe ser contactado no inicio e final de cada traballo.
- Non saturados súa rede, que vai ter dous efectos negativos, o seu equipo vai atopar durante o día utilizando a rede frustrante e problemas poden ser probados con conexións tempo de espera un problema que só vai empeorar a medida que escala súa reixa.
- Garantir os empregos poden ser executados nos seus traballadores. Se os traballos se fan moito espazo de memoria traballos intensivos ou intensivos de disco comezará a abortar eo único que notará é unha pinga no número de traballos procesados sen motivo real.
Resultados da presentación dunha Job
Ao presentar os resultados dun traballo é importante comprobar que os resultados non fosen presentados por outro traballador, especialmente se o traballador actual estivo durminte por algún tempo.
Cando os resultados son sometidos garantir que o número de resultados corresponde ao número de rexistros dentro do traballo.
Como dito anteriormente, e non pode ser máis enfatizado, construír tolerancia a fallos en recuperación de traballos e presentación de resultados. Os traballadores poden (e seguramente) entrar no modo de suspensión no máis inconvenientes de veces e iso ten que ser servidos. Ademais, unha vez abstraerse sitios con resultados axudarán atender a futuras modificacións no sistema de control de traballo moito máis fácil de manexar.
Resumo
Neste section vimos o que é un servidor de control de traballo que facer e como obter un sistema bastante básico configurado. Discutir como recuperar un traballo desde o sistema de control ea mellor forma de configurar tarefas para obter o máximo da nosa reixa do seu sistema de escritorio. Para rematar, un parágrafo ou dous sobre como enviar os resultados ao seu servidor de control de traballo era presentado.
- Un servidor de control de traballo xestiona emprego e asegura que todas as unidades de traballo están concluídas
- Abstraerse o seu traballo select / resultados submisión podemos cambiar a tecnoloxía do servidor de control sen problemas moi
- Configura os seus traballos para garantir que se executan con rapidez e eficiencia, sen poñer demasiada presión sobre a infraestructura de rede, e sen duplicar o procesamento de tarefas nunha base regular.
- Asegúrese de construír tolerancia a fallos e checking erro nas súas rutinas, os traballadores poden suspender e retomar e máis inconvenientes de veces. Lembre-se de comprobar que os resultados xa foron presentados por outro traballador.
Próxima vez
Na parte 3 , imos crear a nosa máquina de procesamento virtual e establecer as nosas máquinas de fiestras para facer ocioso traballadores a tempo.