Úvod
Pracujem vo firme, kde sme sa spustiť mnoho dávkových úloh spracovanie milióny záznamov dát každý deň a ja som nedávno premýšľal o všetkých tých strojov, ktoré sa nachádzajú okolo každého a každý deň nič nerobiť niekoľko hodín. Nebolo by dobré, keby sme mohli používať tieto stroje k posilneniu výpočtového výkonu našich systémov? V tomto súbore článkov budem sa pozerať na potenciálnych výhodách zamestnávanie kancelársku sieť pomocou virtualizované prostredia.
V časti 1 Dal som prehľad o systéme a technológií budem používať, rovnako ako prediskutovala niektoré z možných dôvodov, prečo by ste chceli vytvoriť kancelárskej siete.
Job Control
Pokiaľ bude bežiaci úlohy potom budete potrebovať nejaký spôsob, ako ich riešiť. Vašou úlohou riadiaci systém (na vašom pracovnom serveru) musí byť naozaj dobre premyslený ešte predtým, než pokusom o spustenie programu balíka Office mriežku. Tak za prvé, aké sú úlohy pre systém riadenia práce:
- Rozdávať prácu na žiadosť zamestnanca
- Povedzte pracovníkov, aký typ úlohy na spustenie
- Sledovanie práce
- Uistite sa, že úlohy sú spustiť iba raz
- Poskytnúť pracovné dát pre pracovníkov, alebo aspoň povedať, kde ho získať
Systém musí byť tiež rozšíriteľná riešenie, ktoré funguje zatiaľ v jednom prípade môže byť predĺžená spustiť niekoľko typov pracovných miest, ako je podnikanie vidí hodnotu v mriežke riešenia. Napríklad, práca získať priority, viac ako jeden druh povolania môžu existovať (tj niekoľko kód základne), prípadne môžete dokonca spustiť niekoľko rôznych pracovníka stroje, ktoré sú optimalizované pre každý typ zamestnania (aj keď to sa vzdiali od generický liek pracovníka "nápad). Vždy sa snažím premýšľať o budúcnosti pri vývoji systémov, môže krátkodobo viesť k videniu dlhodobejšie frustráciu a navýšenie rozvojovej čas.
Pracovný server
Budeme potrebovať niekde kontrolovať našu prácu od, malo by to byť jediný systém vo vašej sieti, ktorá má pevnú Resource Locator, byť to, že IP adresa, meno počítača, URL (pomocou internej DNS), atď Je to preto, pracovníci potrebujú vedieť, kde hľadať prácu, pracovníci musia nájsť zamestnanie kontrolný systém (nie je úlohou riadiaci systém nájsť pracovníkov).
Práce server sám o sebe nie je naozaj zložitá úloha (v základnom systéme tak ako tak), je potrebné uložiť zoznam miest, ruku pracovných miest, obdrží výsledky a následne ich uložiť na neskoršie použitie. Ako sú definované tieto časti (napr. "ruku zamestnanosti"), môže byť veľmi jednoduchý. Neskôr môžeme rozšíriť systém zahŕňa administračné rozhranie pridávať, upravovať, mazať, pozastaviť pracovných miest, ale to je nad rámec tohto cvičenia.
Neexistuje žiadny dôvod potom, že vaša práca serveru nemôže byť virtuálny stroj beží v rámci hlavného spracovania servera, ak nie je kanalizácia príliš veľa zdrojov, z nej. Práca serveru však nie je potreba vysokej dostupnosti, pokiaľ to ide dole v piatok večer vy budete stratiť celý víkend spracovania, prípadne vás to stálo pár týždňov v hodnote spracovanie času (v porovnaní s hlavným spracovanie samotného servera) . Možno budete chcieť, aby zvážila svoje pracovné server na zaťaženie vyvážené prostredie pre vysokú dostupnosť.
Základné nastavenie
Základné nastavenie pre nášho servera práce bude skladať z toho, čo Volám jeden z mojich Limp serverov (to je Li Nux, m ySql, P HP). Kód bežiaci na pracovníkov Thea bude skutočne fungovať, čo práce to môže bežať interakcií s databázou s úradmi práce riadiaceho systému. Neskôr by sme mohli vytvoriť webovú službu a skutočne vyplácajú pracovných miest skôr než mať pracovníci Ťažkú prácu sami, ale teraz budeme pokračovať v používaní princípe KISS (Keep It Simple, Stupid!).
Takže, poďme vytvoriť tri MySQL tabuľky sa vysporiadať s pracovnými miestami. Tie budú práce ``, `jobRecords` a `jobResults`.
Tu som pomocou SQL Buddy veľký trochu alternatívu k phpMyAdmin len preto, že jeho ľahšiu inštaláciu na CentOS (pre ostatné viď: 10 Veľké alternatívy k phpMyAdmin )
Táto tabuľka sa skladá z 5 jednoduchých polí,
- id: Jedinečná identifikácia prácu
- Meno: Môže to byť klient odkaz, alebo ľubovoľný počet iných identifikátorov
- Stav: Musíte vedieť, kde práca je, napr
- 0: Nezačatie
- 1: vyzdvihli sme
- 2: Dokončené
- started_by: Kto začal robiť svoju prácu? To nie je úplne nutné, ale je pekné mať. Ja by som navrhnúť, sledovanie pracovníkov podľa ich IP adresy v sieti
- started_at: Kedy sa pracovník začať prácu? Sledovaním práce, ktoré neboli dokončené vo výške X dobu vieme, že je potrebné vyzdvihnúť prácu znovu a začať spracovanie iným pracovníkom. Pracovníci mohol zastaviť spracovanie / offline pre ľubovoľný počet dôvodov, výpadok prúdu, havárie, strata siete atď
Je to jednoduché, ako by táto tabuľka byť predĺžená až na niekoľko ďalších oblastí, čo umožňuje sledovanie štatistík, čo je cieľový čas stĺpca, ako dlho trvalo práce, počítadlo, koľko pracovníkov zdvihol práci (zrejme to potrebuje skôr 1), práca prioritou, možno zoznam pokračovať ďalej a ďalej. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.
Lets add a few example jobs:
The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:
- id: ID of the record
- name: Person's name
- address: Person's address
- jobs_id: The job ID that this record is linked to
The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:
- job_record_id: Link the result to the job table
- result: The result data
…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.
Selecting a job
As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:
- Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__;
- Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
(`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC;
By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.
- Next grab the jobs details followed by the records themselves:
SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.
In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.
Job Configuration
The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:
- Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
- Práca sa 1 minútu bežať: To znamená, že vaši zamestnanci trvať asi 15 minút bežať každú prácu. Aj keď to spočiatku môže zdať ideálne, získate ďalšie pracovné spracovanie v čase obeda, coffee breaky, schôdzky, atď Tento scenár kladie tlak na ďalšie oblasti vášho systému a zavádza svoje vlastné problémy. Napríklad, najprv sa vaše nastavenia / doba spracovania pomer sa chystá ísť priamo dole, teda strácajú účinnosť systému. Vaša sieť bude neustále streamovanie pracovných informácií medzi rôznymi pracovníkmi frustrujúce personálu, ktorí sú dong ich každodennú prácu. Tie tiež bude klásť väčšie nároky na serveri zamestnanie spracovanie, pretože musí naservírovať veľa a veľa malých kúskov práce na pravidelnom základe. Napokon, v tejto situácii, ak vaša práca server zlyhá budete vytvoriť obrovský zadný protokol nedokončenú prácu vzhľadom k tomu, väčších pracovných miest by v pokračovaní konania blažene nevedomí, že úloha server bol do problémov.
V skutočnosti tam bude nikto ideálne konfigurácie pre nastavenie siete, veľa záleží na dostupných zdrojoch, druh zamestnania, pracovná doba odozvy požiadavky a možnosť práce v sieti, a tak ďalej. Avšak niektoré pokyny by mali mať:
- Veľkosť pracovných miest tak, aby každý pracovník môže prejsť najmenej 3-4 pracovných miest v období 15 hodín (najdlhšia doba nečinnosti pravdepodobné)
- Hrajte s pracovným veľkosti tak, aby nastavenie času stáva celkom zanedbateľné v porovnaní s dobou spracovania (pri zohľadnení vyššie uvedených bodov).
- Ak úloha nie je dokončená v dvojnásobné množstvo času (možno menej) môžete očakávať, že na dokončenie predpokladať, že jeho preč dezertoval a začať spracovávať iným pracovníkom. To znamená, že budete musieť počkať až na trojnásobok normálnej dobu práce na jej dokončenie (možno aj dlhšie, ak následné práce zlyhá). Možno budete chcieť znížiť túto dobu, ale dávajte pozor, aby ho znížiť príliš veľa, ako môžete začať duplikácie spracovanie úlohy na pravidelnom základe.
- Práce by mali byť nezávislé na externé požiadavky čo možno najviac. Práce server, napríklad by mal byť kontaktovaný na začiatku a na konci každej práci.
- Nie saturovať svoju sieť, bude to mať dva negatívne dopady, bude vaše denné pracovníci nájsť pomocou siete frustrujúce a problémy môžu nastať s pripojenie časového limitu problém, ktorý sa bude len zhoršovať, ako si škálovanie siete.
- Zaisťujú pracovné miesta môže bežať na vašich pracovníkov. Ak je práca príliš náročné na pamäť a miesto na disku intenzívnej práce začne končím, a jediná vec, ktorú si všimnete, je pokles počtu pracovných miest nejakú žiadny skutočný dôvod.
Pošlite nám Výsledky prácu
Pri predkladaní výsledkov práci je dôležité skontrolovať, že výsledky neboli predložené iným pracovníkom, a to najmä v prípade, že súčasný pracovník spiace na nejakú dobu.
Ak sú výsledky nám zabezpečí, že počet výsledkov zodpovedá počet záznamov v práci.
Ako už bolo uvedené, a nemôže byť viac ako zdôrazniť, budovať odolnosť proti chybám v pracovných výsledkov vyhľadávania a podriadenosti. Pracovníci môžu (a pravdepodobne bude) prejsť do režimu spánku v najnevhodnejšej časov, a to musí byť postarané. Tiež opäť abstrahovanie preč vaše výsledky podanie pomôže uspokojiť budúce zmeny v systéme práce kontrolného oveľa jednoduchšie riešiť.
Zhrnutie
V tomto section sme sa zamerali na to, čo práca Control Server musí urobiť a ako sa dostať veľmi základné nastavenie systému. Diskutovali sme o tom, ako získať prácu z riadiaceho systému a ako čo najlepšie nastaviť pracovné miesta, aby čo najviac našich vášho systému kancelárskej siete. Na záver bol predstavený nový odsek alebo dva na predkladanie výsledkov späť na server pre ovládanie úloh.
- Riadenie úlohy server spravuje pracovných miest a zaisťuje, že všetky pracovné jednotky sú dokončené
- Abstrahovaním svoju prácu select / Výsledky podanie môžeme zmeniť technológiu konanie bez väčších problémov serveru
- Konfigurácia svoju prácu, aby zabezpečili, že sa bežať rýchlo a efektívne, bez príliš veľký tlak na sieťovej infraštruktúry, a bez zdvojovanie spracovanie úloh na pravidelnom základe.
- Uistite sa, že budete stavať odolnosť proti chybám a chyby checking do svojich postupov, môžu pracovníci pozastaviť a obnoviť a najnevhodnejšej časov. Nezabudnite skontrolovať, či výsledky už boli predložené iným pracovníkom.
Nabudúce
V časti 3 sa budeme vytvárať náš virtuálny stroj pre spracovanie a nastaviť naše Windows stroja, aby sa stal nečinnosti úväzok.