Introducció
Jo treballo en una empresa on correm molts llocs de treball de processament per lots milions de registres de dades cada dia i he estat pensant sobre tots els equips que se sentin al voltant de cada un i cada dia sense fer res durant diverses hores. No seria bo si poguéssim utilitzar aquestes màquines per reforçar la capacitat de processament dels nostres sistemes? En aquesta sèrie d'articles que vaig a veure els beneficis potencials de l'ocupació d'una oficina de la xarxa utilitzant entorns virtualitzats.
A la part 1 em va donar una visió general del sistema i les tecnologies que utilitzarà, així com es discuteix algunes de les possibles raons per les quals es vol crear una xarxa d'oficines.
Control de treballs
Si vostè va a estar executant treballs llavors vostè va a necessitar una certa manera de gestionar-los. El seu sistema de control de treballs (en el servidor de treball) ha de ser molt ben pensat abans fins i tot d'intentar executar una xarxa d'oficina. Així que en primer lloc, quines són les tasques d'un sistema de control de treballs:
- Lliuri els treballs a petició dels treballadors
- Informe als treballadors quin tipus de llocs de treball per executar
- Seguiment dels treballs
- Assegureu-vos que els treballs només s'executen una vegada
- Proporcionar les dades del treball als treballadors, o si més no dir-los on aconseguir-
El sistema també ha de ser extensible, una solució que funciona per ara en un sol cas pot ampliar-se per executar diversos tipus de llocs de treball com l'empresa considera que el valor en una solució de xarxa. Per exemple, l'ocupació pot tenir prioritats, més d'un tipus de treball poden existir (és a dir, diverses bases de codi), amb el temps fins i tot es pot executar diverses màquines diferents treballadors que estan optimitzades per a cada tipus de treball (tot i que s'allunyi del "treballador genèric 'idea). Sempre intento pensar en el futur quan els sistemes en desenvolupament, una visió a curt termini pot conduir a la frustració a llarg termini i el temps de desenvolupament més gran.
Servidor de tasques de
Anem a necessitar un lloc per al control dels nostres llocs de treball de, aquest ha de ser l'únic sistema en la casella que té un localitzador de recursos fixos, ja sigui una adreça IP, nom de host, l'adreça URL (usant DNS intern), etc Això és degut a els treballadors necessiten saber on buscar feina, els treballadors necessiten per trobar el sistema de control de treballs (no el sistema de control de treball trobar als treballadors).
El servidor de treball en si no té realment una tasca complicada (en un sistema bàsic de tota manera), cal emmagatzemar una llista de llocs de treball, lliurar treballs, rebre els resultats, i posteriorment emmagatzemar per a la posterior recuperació. Com aquestes parts (per exemple, "lliurar l'ocupació") es defineixen poden ser molt bàsiques. Més tard es pot estendre el sistema per incloure una interfície d'administració per afegir, editar, eliminar, suspendre els treballs, però això està més enllà d'aquest exercici.
No hi ha motiu llavors que el servidor de treball no podia ser una màquina virtual que s'executa al servidor de procés principal, sempre que no drena massa recursos d'ella. El servidor de treball però es necessita d'alta disponibilitat, si es cau en un divendres a la nit vostè va a perdre un cap de setmana de tractament, el que podria costar-li un parell de setmanes de temps de processament (en comparació amb el servidor principal de processament sol) . És possible que vulgueu considerar la possibilitat del seu servidor de treball en un entorn d'equilibri de càrrega d'alta disponibilitat.
Configuració bàsica
La configuració bàsica del nostre servidor de treball consistirà en el que estic trucant a un dels meus servidors NETES (és a dir Li Linux, ySql m, HP P). El codi que s'executa en els treballadors Thea realment esbrinar quins llocs de treball que es pot executar mitjançant la interacció amb bases de dades amb el treball del sistema de control. Més endavant es podria crear un servei web, i de fet reparteixen llocs de treball en lloc que els treballadors fan la feina dura sí, però per ara seguirem utilitzant el principi KISS (Keep it simple, estúpid!).
Per tant, anem a crear tres MySQL les taules per fer front a llocs de treball. Aquests seran «llocs de treball», «jobRecords` i `jobResults».
Aquí estic usant SQL Buddy una alternativa poc grans per phpMyAdmin només perquè és més fàcil d'instal lar en CentOS (per a altres veuen: 10 grans alternatives a phpMyAdmin )
Aquesta taula es compon de 5 camps simples,
- Identificació: identificar en forma única la feina
- Nom: Podria ser una referència del client, o qualsevol nombre d'altres identificadors
- Situació: Vostè necessita saber que el treball és, per exemple,
- 0: No ha començat
- 1: Recollit
- 2: Completat
- started_by: Qui va començar a fer la feina? Això no és del tot necessari, però és bo tenir. Et suggereixo que el seguiment dels treballadors per la seva adreça IP a la xarxa
- started_at: Quan el treballador iniciar el treball? Mitjançant el seguiment dels treballs que no hagin completat dins de X quantitat de temps que sabem que hem de recollir el treball de nou i començar a processar per un altre treballador. Els treballadors podrien deixar de processar / go en línia per a qualsevol nombre de raons, manca d'energia elèctrica, accidents, pèrdua de xarxa, etc
És fàcil com aquest quadre podria ampliar amb alguns camps addicionals per permetre el seguiment de les estadístiques, una columna de temps d'arribada per veure quant temps va prendre la feina, un comptador per veure quants treballadors va prendre el treball (òbviament això ha de tendeixen a 1), la prioritat del treball, la llista pot seguir i seguir. En escenaris més treball complex que seria possible especificar la quantitat de memòria que el treballador tindria accés a (i per tant, només l'ús adequat de treballadors), o fins i tot quin tipus de treballador es requereix.
Anem a afegir un exemple alguns treballs:
A la taula següent de nou és molt senzill d'entendre, aquestes són les nostres fitxes de treball. Estan vinculats a la taula de treball principal per una columna `jobs_id». La composició d'aquest quadre depèn molt de les dades que ha de proporcionar als seus treballadors, anem a fer un exemple molt simple, on tenim quatre columnes:
- Identificació: Identificació del registre
- Nom: el nom de la persona
- adreça: La direcció de la persona
- jobs_id: 'Identificador de treball que aquest registre està vinculat a
La taula de la tercera i última consisteix en una taula de resultats, té molt de la mateixa marca fins que la taula de registres, i amb l'addició d'algunes columnes poden ser part de la taula de registres:
- job_record_id: Vincular el resultat a la taula de treball
- resultat: El resultat de les dades
... I això és tot el que necessites per al control del treball! (Encara que a un nivell molt bàsic) En el meu cas estic assenyalar a una altra taula en què les meves dades per a processar es troba, però això podria fàcilment un arxiu d'estat, els paràmetres per executar el codi de simulació, el que sigui.
Selecció d'un treball
Com es va esmentar anteriorment, els treballadors a fer la nostra gestió de treball per nosaltres, per ara, així que tot el que necessitem realment és trobar una feina que necessita tractament i obtenir la informació. Com fem això? Així recollir els criteris de selecció d'ocupació i buscar feina, en SQL vaig fer el següent:
- Prengui ofertes d'ocupació que no estan marcats com completa, però des del nostre treball i recuperar els (__ME__ substituir amb un identificador més fàcil, seria l'adreça IP):
UPDATE `treballs` SET `estat` = 0 WHERE `estat` = 1 `I` = started_by __ME__;
- Utilitzant els criteris de selecció de treballs, seleccioneu una feina i dir-li al sistema de control que aquest treballador es tracta que:
UPDATE `treballs` SET `estat` = 1, `started_by` = __ME__, `started_at` = NOW () en cas d '«estat» = 0 O
(«Estat» = 1 `I` started_at> DATE_SUB (NOW (), INTERVAL X HORA)) ORDER BY `id` ASC;
Per l'acaparament de llocs de treball que no han donat resultats en X quantitat de temps que ens assegurem que tots els treballs s'executen en el cas d'un treballador de xocar o anar sense permís.
- A continuació prendre les dades de llocs de treball seguit pels mateixos registres:
SELECT * FROM `treball` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Un cop finalitzat el treball d'inserir els nostres registres de resultats i marca el treball el més complet. Recordeu que els treballs poden suspendre / reprendre en qualsevol moment, permetre certa solidesa en el seu guió. Pot ser que la tasca suspèn la meitat del camí a través de l'actualització del sistema de control de treball, així que comprovar el nombre de registres en un lloc de treball i el nombre de resultats de tornar a guardar al sistema de control de treball seria un encert.
A més, si bé aquest treball es mostra com es poden seleccionar i administrar des d'una consulta de SQL marc que realment ha abstreure el seu control sobre el treball de manera que si vostè decideix passar a utilitzar un servei web, basat en un sistema d'arxius, XML , o qualsevol altre nombre de sistemes que no afectarà el codi per sobre d'ella.
Treball de configuració
El següent aspecte a considerar és la grandària del treball i la configuració. En jugar amb la configuració de treball que pot aconseguir un alt equilibri entre la velocitat, el procés de replicació, i la fiabilitat. Prendre un parell idea escenaris:
- Treballs tenir un dia cada un per executar: Això significa que els seus treballadors necessiten 15 dies per a processar cada lloc de treball (recordeu que el 10% de l'energia per 2/3rds de l'hora). Això clarament no és una configuració de savis, la mida del seu treball és massa gran! Es necessitaria com a mínim el doble de temps per aconseguir un treball processat si el treballador s'absenten sense permís inicial (temps per recollir que no ha tornat un resultat més el temps de reprocessament). En un ideal que tindria com a mínim un treball de jornada completa fàcilment aclarit pel final de cada període d'inactivitat, d'aquesta manera a mantenir els llocs de treball ralentí i en pitjor dels casos un treball prendria dos dies per al procés si el primer van a faltar.
- Treballs prendre un minut per córrer: Això significa que els seus treballadors prenen uns 15 minuts per a executar cada treball. Tot i que aquest principi pot semblar ideal, el guany de procés de treball addicional durant l'hora de dinar, coffee break, reunions, etc aquest escenari posa tensió en altres àrees del vostre sistema, presenta els seus propis problemes. Per exemple, en primer lloc la configuració de la seva proporció de temps de processament anirà a la dreta cap avall, per tant perdre l'eficiència del sistema. La xarxa serà constant flux d'informació d'ocupació als treballadors de diversos funcionaris frustrant que dong seu treball diari. Vostè també posarà més pressió en el seu treball com a servidor de processament que ha de repartir munts i munts de petites peces de treball sobre una base regular. Finalment, en aquesta situació si el seu servidor de treball cau crearà un registre de gran part de darrere que el treball no major de llocs de treball podria continuació de la tramitació feliçment ignorant que el servidor de treball estava experimentant dificultats.
En realitat no hi haurà una configuració ideal per a la configuració de la seva xarxa, molt depèn dels recursos disponibles, els tipus de treball, els requisits del treball temps de resposta, capacitat de xarxa, i així successivament. No obstant això, algunes directrius serien:
- Mida de llocs de treball perquè cada treballador pot obtenir a través d'almenys 3-4 llocs de treball en un període de 15 hores (el més llarg període de temps d'inactivitat probable)
- Juga amb la grandària del treball perquè el temps d'instal lació es converteix en bastant insignificant en comparació amb el temps de processament (tenint en compte el punt anterior).
- Si un treball no acaba en el doble de la quantitat de temps (potser menys) que espera que es completi assumeix que la seva AWOL anat i començar a processar amb un altre treballador. Això significa que vostè pot haver d'esperar fins a tres vegades la longitud normal d'un treball perquè es completi (possiblement més si el treball no posterior). És possible que vulgueu reduir aquest temps, però aneu en compte de no reduir massa ia vostè pot començar a duplicar les tasques de processament en una base regular.
- Els treballs han de ser independents de les necessitats fora de la mesura del possible. El servidor de treball, per exemple, només s'ha de contactar a l'inici i al final de cada treball.
- No saturi la seva xarxa, això té dos efectes negatius, el seu personal durant el dia es troba amb la xarxa de frustració i problemes es poden experimentar amb les connexions s'esgoti el temps un problema que només va a empitjorar a mesura que escala de la seva xarxa.
- Assegureu-vos de llocs de treball es pot executar en els seus treballadors. Si els treballs es tornen massa espai de memòria de treball intensiu o intensiu del disc començarà a avortar i l'únic que notarà és una gota en el nombre de treballs processats sense veritable raó.
Lliurament dels resultats d'un treball
En presentar els resultats d'un treball és important comprovar que els resultats no han estat presentades per un altre treballador, especialment si el treballador actual ha estat inactiu per algun temps.
Quan els resultats s'envia a assegurar que el nombre de resultats coincideix amb el nombre de registres en el treball.
Com es va dir anteriorment, i no està de més insistir, construir la tolerància a fallades en la recuperació de llocs de treball i presentació de resultats. Els treballadors poden (i el més probable és que) entrar en mode de suspensió en l'inconvenient de la majoria de vegades i això ha de ser atesos. A més, una vegada més abstraient la seva presentació resultats ajudaran a atendre als futurs canvis en el seu sistema de control de treball molt més fàcil de tractar.
Resum
En aquesta Secció hem vist el que un servidor de control de treballs ha de fer i com aconseguir un sistema molt bàsic establert. Parlem de com recuperar un treball des del sistema de control i la millor manera de configurar llocs de treball per aprofitar al màxim el nostre sistema de xarxa de la seva oficina. Per finalitzar, un paràgraf o dos sobre la presentació de resultats al servidor de control de treball es va presentar.
- Un servidor de control de tasques administra els treballs i assegura que totes les unitats de treball es completen
- En abstreure el treball de seleccionar / submissió resultats podem canviar la tecnologia del servidor de control sense problemes molt
- Configuri el seu treball per assegurar-se que s'executi de forma ràpida i eficaç sense posar massa pressió sobre la seva infraestructura de xarxa, i sense duplicar tasques de processament en una base regular.
- Assegureu-vos de construir la tolerància a fallades i checking error en les seves rutines, els treballadors poden suspendre i reprendre i l'inconvenient de la majoria de vegades. Recordeu, per comprovar si els resultats ja han estat presentades per un altre treballador.
La propera vegada
A la part 3 anem a crear la nostra màquina de procés virtual i configurar les finestres de les nostres màquines per convertir-se en treballadors a temps inactiu.