Introducció
Jo treballo en una empresa on ens trobem molts llocs de treball de processament per lots de milions de registres de dades cada dia i he estat pensant recentment sobre totes les màquines que se sentin al voltant de 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 aquest conjunt 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 Tasques
Si vostè estarà executant treballs llavors vostè va a necessitar una certa manera de gestionar-los. El seu sistema de control de treballs (en el seu servidor de treball) ha de ser molt ben pensat, fins i tot abans d'intentar executar una xarxa d'oficines. Així, en primer lloc, quines són les tasques d'un sistema de control de treball:
- Repartir llocs de treball a petició dels treballadors
- Digueu als treballadors quin tipus de treballs s'executin
- Seguiment dels treballs
- Assegureu-vos que els treballs només s'executarà un cop
- Proporcionar les dades d'ocupació als treballadors, o almenys els digui on aconseguir-
El sistema també ha de ser extensible, una solució que funciona per ara en un sol cas pot ser ampliat per executar diversos tipus de llocs de treball com el negoci veu la pena en una solució de xarxa. Per exemple, els treballs poden tenir prioritats, més d'un tipus de treball pot existir (és a dir, diverses bases de codi), amb el temps fins i tot es pot executar diverses màquines diferents dels treballadors que estan optimitzats per a cada tipus de treball (tot i que es mou lluny del treballador "genèric idea). Sempre intento pensar en el futur, quan el desenvolupament de sistemes, una visió a curt termini pot conduir a la frustració a llarg termini i el temps de desenvolupament major.
Servidor de tasques de
Anem a necessitar un lloc per controlar els nostres llocs de treball a partir, aquest ha de ser l'únic sistema de la xarxa que té un localitzador de recursos fixos, ja sigui una adreça IP, nom d'amfitrió, l'adreça URL (usant DNS intern), etc Això és perquè els treballadors han de saber on buscar feina, els treballadors necessiten per trobar el sistema de control de treballs (no el sistema de control de treball de 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, repartir llocs de treball, rebre els resultats, i posteriorment emmagatzemar per a la seva posterior recuperació. Com aquestes parts (per exemple, 'mà llocs de treball ") es defineixen poden ser molt bàsiques. Més endavant podem ampliar el sistema per incloure una interfície d'administració per afegir, editar, eliminar, suspendre llocs de treball, però això està més enllà d'aquest exercici.
No hi ha cap raó que sigui llavors quan el seu servidor de treball no pot ser una màquina virtual s'executa al servidor de processament principal, sempre que no drena massa recursos de la mateixa. El servidor de treball però cal una alta disponibilitat, si es cau en un divendres a la nit perdràs un cap de setmana de tractament, el que podria costar-li un parell de setmanes de temps de processament (en comparació amb el servidor de processament principal només) . É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 Bizkit (que és Linux Li, m ySql, P HP). 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 l'ús de sistemes de control. Més endavant es podria crear un servei web i la mà en realitat a llocs de treball en lloc de tenir als treballadors fer la feina dura sí, però per ara seguirem utilitzant el principi KISS (Keep It Simple, Stupid!).
Per tant, anem a crear tres mySQL per fer front a les taules de llocs de treball. Aquests seran llocs de treball ``, `jobRecords`, i `jobResults`.
Aquí estic usant SQL Buddy una gran alternativa a poc a phpMyAdmin només perquè és més fàcil d'instal · lar en CentOS (perquè altres vegin: 10 grans alternatives a phpMyAdmin )
Aquesta taula es compon de 5 camps simples,
- Identificació: identificar en forma única el treball
- Nom: Podria ser una referència client, o qualsevol nombre d'altres identificadors
- Estat: Cal saber on és el treball és menys, per exemple,
- 0: No s'ha iniciat
- 1: Recollit
- 2: Completa
- started_by: Qui ha començat a fer la feina? Això no és del tot necessari, però és un agradable de tenir. Et suggereixo que els treballadors de seguiment 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 necessitem per recollir el treball de nou i començar a processar per un altre treballador. Els treballadors podrien aturar el processament / go en línia per a qualsevol nombre de raons, falta de llum, accident, pèrdua de xarxa, etc
És fàcil com aquesta taula es pot 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 el treball, un comptador per veure quants treballadors va prendre el lloc de treball (òbviament, això té que tendeixen a 1), prioritat del treball, la llista pot seguir i seguir. En els escenaris de treball més complexos seria possible passar la quantitat de memòria que el treballador hauria de tenir accés a (i per tant, només utilitzen els treballadors adequats), o fins i tot quin tipus de treballador es requereix.
Permet afegir unes poques ocupacions exemple:
La taula següent de nou és bastant senzill d'entendre, aquests són els nostres registres de treballs. Estan vinculats a la taula de treball principal per una columna de `jobs_id`. La composició d'aquesta taula depèn molt de les dades que necessita per proveir els seus treballadors, farem un exemple molt simple, on tenim quatre columnes:
- Identificació: Identificació de l'expedient
- Nom: Nom de la persona
- Direcció: Direcció de la Persona
- jobs_id: 'Identificador de treball que aquest disc està lligat a
La taula de la tercera i última consisteix en una taula de resultats, es té molt el mateix constitueixen com la nostra taula de registres, i amb l'addició d'algunes columnes podria ser part de la taula de registres:
- job_record_id: Vincular el resultat a la taula de treball
- Resultat: Les dades dels resultats
... 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 on les meves dades en el procés es troba, però això podria fàcilment un arxiu d'estat, els paràmetres per a executar codi de simulació, el que sigui.
Selecció d'un lloc de treball
Com es va esmentar anteriorment, els treballadors a fer la nostra gestió de treball per a nosaltres, per ara, així que tot el que hem de fer realment és trobar una feina que necessita tractament i obtenir la informació. Com fem això? Bé triar als nostres criteris de selecció d'ocupació i buscar feina, en SQL vaig fer el següent:
- Prengui tots els llocs de treball que no estan marcats com completa, però des del nostre treball i recuperar els (substituïu ME__ __ amb un identificador més fàcil, seria l'adreça IP):
UPDATE `llocs de treball` SET `status` = 0 on `status` = 1 `I` = __ started_by ME__;
- Utilitzant els criteris de selecció de treball, seleccioneu una feina i dir-li al sistema de control que aquest treballador es tracta que:
UPDATE `llocs de treball` SET `status` = 1, `started_by` = __ ME__, `started_at` = NOW () a on `status` = 0 o
(`Status` = 1 `I` started_at> DATE_SUB (NOW (), interval d'una hora X)) ORDER BY `id` ASC;
Per treballs que anomenen la qual no han retornat els resultats en X quantitat de temps que ens assegurem que tots els treballs s'executen en el cas d'un treballador es caigui o absentar-se sense permís.
- A continuació prendre les dades de llocs de treball seguit pels mateixos registres:
SELECT * FROM `llocs de treball` WHERE `started_by` = __ ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __ JOBID__;
Un cop finalitzat el treball que inserir els nostres registres de resultats i marcar el treball el més complet. Recordeu que com a llocs de treball es pot suspendre / reprendre en qualsevol moment i permetre certa solidesa en el seu guió. Pot ser que suspèn la tasca a mig camí a través de l'actualització del sistema de control de treballs per comprovar el nombre de registres en un lloc de treball i el nombre de resultats guardats de tornada al sistema de control de treball seria un encert.
A més, si bé això demostra com els treballs es poden seleccionar i gestionar des d'un marc de consulta SQL que realment s'ha de abstreure del seu control sobre el treball de manera que si vostè decideix passar a utilitzar un servei web, un sistema de fitxers basat en XML , o qualsevol altre nombre de sistemes que no afectarà el codi sobre.
Tasca de configuració
El següent aspecte a considerar és la grandària del treball i la configuració. En jugar amb la configuració del treball que es pot aconseguir un excel · lent equilibri entre la velocitat, el procés de replicació, i la fiabilitat. Prengui un parell d'escenaris OFA:
- Ofertes de feina prendre 1 cada dia per funcionar: Això significa que els seus treballadors necessiten 15 dies per processar cada lloc de treball (recordeu que el 10% de l'energia per 2/3rds de l'època). Això clarament no és una bona configuració, la mida del seu treball és massa gran! Es necessitaria almenys el doble de temps per aconseguir una feina processat si el treballador s'absenten sense permís inicial (temps per recollir que no ha retornat un resultat més el temps de reprocessament). En un ideal que tindria com a mínim una feina de jornada completa facilitat el clar al final de cada període d'inactivitat, d'aquesta manera a mantenir els llocs de treball marcant més i en el pitjor cas, un treball que prendria dos dies per al procés si el primer faltaran.
- Ofertes de feina prendre 1 minut per córrer: Això significa que els seus treballadors dura uns 15 minuts per a executar cada treball. Si bé aquest principi pot semblar ideal, guany de processament de treball addicional durant l'hora de dinar, coffee break, reunions, etc aquest escenari posa la tensió en altres àrees del seu sistema i presenta els seus propis problemes. Per exemple, en primer lloc la configuració de / processament relació de temps anirà a la dreta cap avall, per tant perdre l'eficiència del sistema. La xarxa serà la informació del treball constant de transmissió al personal dels treballadors de diversos frustrants que són dong del seu treball del dia a dia. També vas a posar més esforç en el seu treball com a servidor de processament que ha de repartir un munt de trossos petits de treball sobre una base regular. Finalment, en aquesta situació si el servidor de treball de baixa que vas a crear un registre de nou molta feina sense acabar, mentre que treballs més grans podria, va continuar el processament 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 xarxa, molt depèn dels recursos disponibles, els tipus de treball, els requisits de treball de lliurament a temps, la capacitat de la xarxa, i així successivament. No obstant això, algunes pautes serien els següents:
- Treballs de mida de manera que cada treballador pot obtenir a través de llocs de treball almenys 3-4 en un període de 15 hores (el més llarg període de temps d'inactivitat és probable)
- Juga amb la grandària del treball de manera que el temps de preparació arriba a ser bastant insignificant en comparació amb el temps de processament (tenint en compte el punt anterior).
- Si un treball no es completa en el doble de la quantitat de temps (potser menys) que espera que es completi d'assumir que el seu 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 lloc de treball a que es completi (possiblement més si la feina de fallar). Potser voleu reduir aquest temps, però vés amb compte de no reduir massa com vostè pot començar a duplicar les tasques de processament en una base regular.
- Ofertes de feina ha de ser independent de les necessitats externes, tant com sigui 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ò tindrà dos efectes negatius, al seu personal durant el dia es troba amb la xarxa de frustració i els problemes es poden experimentar amb les connexions el temps d'espera d'un problema que només empitjorarà a mesura que ampliar 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 llocs de treball intensius o intensius en el disc començarà a avortar i l'únic que notarà és una caiguda en el nombre de treballs processats sense cap raó real de per què.
Presentació dels resultats d'un treball
En presentar els resultats d'un treball, és important comprovar que els resultats no han estat facilitades per un altre treballador, especialment si el treballador actual ha estat inactiu durant algun temps.
Quan els resultats es presenten assegurar-se que el nombre de resultats coincideix amb el nombre de registres a la feina.
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) entra en mode de suspensió en el més incòmode de vegades i això ha de ser atesos. També una vegada més, abstraient de la seva presentació resultats ajudaran a atendre els canvis futurs en el sistema de control de treball molt més fàcil de tractar.
Resum
En aquest seccion_a hem vist el que és un servidor de control de treball que ha de fer i com arribar a un sistema molt bàsic establert. Parlem de com recuperar un treball des del sistema de control i de 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ó dels resultats de tornada al servidor de control de treball es va presentar.
- Un servidor de control de treball administra els treballs i assegura que totes les unitats de treball es completen
- En abstreure la feina de seleccionar o resultats de la presentació podem canviar la tecnologia del servidor de control sense problemes molt
- Configuri els seus llocs de treball per assegurar-se que s'executi de forma ràpida i eficient, sense posar massa pressió sobre la infraestructura de xarxa, i sense duplicar tasques de processament en una base regular.
- Assegureu-vos que vostè construeix tolerància a fallades i checking error en les seves rutines, els treballadors poden suspendre i reprendre i el més incòmode dels temps. Recordi que ha de comprovar si els resultats s'han presentat ja per un altre treballador.
La propera vegada
A la part 3 anem a crear la nostra màquina virtual de processament i establir les nostres màquines Windows per convertir-se en treballadors a temps d'inactivitat.