Introducere
Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.
În partea 1 I-am dat o imagine de ansamblu a sistemului şi tehnologii Eu voi fi folosind, precum şi discutat ca unele dintre motivele potenţialului de ce v-ar doriţi să creaţi o grilă de birou.
De locuri de muncă de control
Dacă aveţi de gând să fie difuzate de locuri de muncă, atunci ai de gând să nevoie de o modalitate de a le gestiona. Sistemul dvs. de control de locuri de muncă (pe serverul dvs. de locuri de muncă) trebuie să fie foarte bine gandit, chiar înainte de a încerca pentru a rula o grilă de birou. Deci, în primul rând, care sunt sarcinile pentru un sistem de control de locuri de muncă:
- O parte din locuri de muncă la cererea lucrătorilor
- Spune-lucrătorilor ce tip de locuri de muncă pentru a rula
- Track locuri de muncă
- Asiguraţi-vă că locurile de muncă sunt doar rula o singură dată
- Furnizeze date de locuri de muncă pentru lucrători, sau cel puţin să le spună unde să-l
De asemenea, sistemul trebuie să fie extensibila, o soluţie care funcţionează de acum într-un singur caz poate fi extinsă pentru a rula mai multe tipuri de locuri de muncă, de afaceri vede în valoare într-o soluţie de reţea. De exemplu, locuri de muncă poate câştiga priorităţile, mai mult de un tip de loc de muncă ar putea exista (de exemplu, mai multe baze de cod), în cele din urmă s-ar putea rula chiar mai multe maşini diferite lucrător care sunt optimizate pentru fiecare tip de loc de muncă (cu toate că se mişcă departe de "lucrător generic "idee). Încercaţi întotdeauna să ne gândim la viitor, atunci când sistemele de dezvoltare, o viziune pe termen scurt poate duce la frustrare pe termen lung şi timpul de dezvoltare a crescut.
Server de locuri de muncă
Vom avea nevoie de undeva de locuri de muncă pentru a controla noastre din, acest lucru ar trebui să fie singurul sistem în grila de dvs., care are o adresă pentru localizarea resurselor fix, să fie ca o adresa IP, numele gazdei, URL-ul (folosind DNS intern), etc Acest lucru se datorează faptului că lucrătorii trebuie să ştie unde să caute locuri de muncă, muncitorii au nevoie pentru a găsi sistemul de control de locuri de muncă (nu sistemul de control al găsi locuri de muncă a lucrătorilor).
Serverul de locuri de muncă în sine nu are într-adevăr o sarcină complicată (într-un sistem de bază oricum), are nevoie pentru a stoca o listă de locuri de muncă, o parte din locuri de muncă, de a primi rezultatele, şi, ulterior, le stoca pentru regasirea ulterioara. Modul în care aceste părţi ("mână în locuri de muncă", cum ar fi) sunt definite poate fi foarte de bază. Mai tarziu ne putem extinde sistemul pentru a include o interfata de administrare pentru a adăuga, edita, şterge, suspenda locuri de munca dar acest lucru este dincolo de acest exerciţiu.
Nu există nici un motiv apoi că serverul dvs. de locuri de muncă nu ar putea fi o maşină virtuală care rulează în cadrul server-ul dvs. principală de procesare cu condiţia ca aceasta să nu scurgere prea multe resurse de la ea. Serverul de locuri de muncă are nevoie de toate acestea, disponibilitate ridicată, dacă se duce în jos pe o vineri seara ai de gând să-şi piardă un weekend întreg de procesare, potenţial vă costă câteva săptămâni în valoare de timp de prelucrare (în comparaţie cu server-ul dvs. principală de procesare numai) . Poate doriţi să ia în considerare punerea server-ul dvs. loc de muncă la un mediu echilibrat de încărcare pentru disponibilitate ridicată.
Basic Setup
Configurare de bază pentru serverul de locuri de muncă noastră va consta din ceea ce am apeland unul de la Limp serverele mele (care este vomica Li, ySql m, P HP). Codul se execută pe lucrători Thea va funcţiona efectiv de locuri de muncă ce se poate rula prin interactiunea cu bazele de date de locuri de muncă, cu sistem de control. Mai târziu am putea crea un serviciu web şi de fapt mână în locuri de muncă, mai degrabă decât cu muncitorii face munca grea ei înşişi, dar de acum vom continua folosind principiul KISS (Păstraţi-l simplu, prost!).
Deci, vă permite să creaţi trei mySQL tabele să se ocupe de locuri de muncă. Acestea vor fi locuri de muncă "`, `jobRecords`, `şi` jobResults.
Aici Sunt folosind SQL Buddy un pic mai mare alternativă la phpMyAdmin doar pentru că sa mai uşor de instalat pe CentOS (pentru alţii a se vedea: 10 alternative Mare la phpMyAdmin )
Acest tabel este format din 5 domenii simple,
- id: identifica în mod unic de locuri de muncă
- Numele: Ar putea fi o referinţă client, sau orice număr de alţi identificatori
- Status: Ai nevoie să ştie unde se află la locul de muncă, de exemplu,
- 0: Nu a început
- 1: a crescut
- 2: Finalizat
- started_by: Cine a inceput sa faca treaba? This nu este în totalitate necesar, dar este un frumos de a avea. Aş sugera de urmărire lucrătorilor prin adresa IP din reţea
- started_at: Când a început lucrătorul de locuri de muncă? De urmărire de locuri de muncă care nu au finalizat în termen de suma X de timp, ştim că avem nevoie pentru a ridica de locuri de muncă, din nou, şi începe de prelucrare de către un alt muncitor. Lucrătorii ar putea opri de prelucrare / go offline pentru orice număr de motive, pene de curent, accident, pierdere de reţea, etc
Este usor de modul în care acest tabel poate fi extins cu câteva câmpuri suplimentare pentru a permite urmărirea statisticilor, o coloană de timp finisaj pentru a vedea cât de mult a luat loc de muncă, un contor pentru a vedea cât de mulţi lucrători ridicat de locuri de muncă (evident, acest lucru trebuie să tind să 1), prioritate de locuri de muncă, lista poate merge pe şi de pe. În mai multe scenarii complexe de locuri de muncă ar fi posibil să se precizeze cât de mult memorie lucrătorul ar fi nevoie de acces la (şi, prin urmare, utilizarea numai de către lucrători potrivit), sau chiar ce tip de lucrător ar fi necesare.
Să adăugăm câteva locuri de muncă de exemplu:
Tabelul următor din nou, este destul de simplu de înţeles, aceste înregistrări sunt noastre de locuri de muncă. Ele sunt legate de tabel principalele locuri de muncă de către o coloană `jobs_id`. Alcătuiesc din acest tabel depinde foarte mult de datele de care aveţi nevoie să furnizeze lucrătorilor dumneavoastră, vă permite să fac un exemplu foarte simplu în cazul în care avem patru coloane:
- id: ID-ul de înregistrare
- Numele: Numele Persoana
- Adresa: adresa Persoana
- jobs_id: ID-ul de locuri de muncă că acest record este legat de
Tabelul de a treia şi ultima constă într-un tabel de rezultate, aceasta are cam la fel alcătuiesc ca masa noastră înregistrări, şi cu adăugarea unor coloane ar putea face parte din tabelul de înregistrări:
- job_record_id: Link rezultatul la masa de locuri de muncă
- Rezultatul: date de rezultat
... Şi asta e tot ce ai nevoie pentru control de locuri de muncă! (Deşi la un nivel de bază) În cazul meu am arătat într-un alt tabel în cazul în care datele mele pentru a procesa a fost localizat, dar acest lucru ar putea la fel de usor a fost un fişier, parametri pentru a rula cod de simulare, îl nume.
Selectarea unui loc de muncă
După cum sa menţionat anterior, muncitorii vor face noastre de management de locuri de muncă pentru noi, pentru acum, deci tot ce trebuie să facem este într-adevăr găsi un loc de muncă, care are nevoie de prelucrare şi pentru a obţine informaţii. Cum ne-am face asta? Ei bine alege criteriile noastre de locuri de muncă de selecţie şi caute locuri de muncă, în SQL am făcut următoarele:
- Luaţi orice locuri de muncă care nu sunt marcate ca fiind complet, dar de la muncitor noastre şi le reseta (__ME__ substitui cu un identificator cel mai simplu, ar fi adresa IP):
UPDATE `de locuri de muncă` SET `statutul` = 0, unde "starea = 1` si `started_by" = __ME__;
- Folosind criteriile noastre de locuri de muncă de selecţie, selectaţi un loc de muncă şi sistemul de control spune că acest lucrător se ocupă cu ea:
UPDATE `de locuri de muncă` SET `statutul` = 1, "started_by = __ME__`, `started_at` = NOW (), unde "starea" = 0 sau
(`Statutul` = 1 si `started_at`> DATE_SUB (NOW (), INTERVAL X HOUR)) ORDER BY `id` ASC;
Hapsân de locuri de muncă care nu s-au întors rezultate în suma X de timp, ne asigurăm că toate locurile de muncă sunt difuzate în eventualitatea unui lucrător crashing sau merge AWOL.
- Next apuca detaliile de locuri de muncă, urmată de înregistrări înşişi:
SELECT * FROM `de locuri de muncă` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
La finalizarea de locuri de muncă ne introduce înregistrările noastre rezultat şi marca de locuri de muncă ca fiind completă. Amintiţi-vă de locuri de muncă se poate suspenda / relua în orice moment, pentru a permite unele robusteţe în script-ul dvs.. S-ar putea ca sarcina suspendă jumătate prin actualizarea sistemului de control de locuri de muncă, astfel încât verificarea numărului de înregistrări într-un loc de muncă şi numărul de rezultate salvate înapoi la sistemul de control de locuri de muncă ar fi o mişcare înţeleaptă.
În plus, în timp ce acest lucru demonstrează cât de locuri de muncă pot fi selectate şi gestionate dintr-o-cadru interogare SQL ar trebui să fie într-adevăr abstractizare de locuri de muncă de control al dvs., astfel că, dacă vă hotărâţi să treceţi la utilizarea unui serviciu web, un bazate pe sistemul de fişiere, XML , sau orice alt numărul de sisteme de aceasta nu va afecta codul de mai sus ea.
De locuri de muncă de configurare
Aspectul următoare să ia în considerare este dimensiunea de locuri de muncă şi de configurare. De joc cu o configuraţie de locuri de muncă, putem asigura un echilibru excelent între viteză, procesul de replicare, şi fiabilitate. Ia un cuplu denota scenarii:
- Ocuparea forţei de muncă o zi fiecare pentru a rula: Acest lucru înseamnă că muncitorii nevoie de 15 zile pentru a procesa fiecare loc de muncă (amintesc 10% din puterea de 2/3rds din timp). Acest lucru nu este în mod clar o configuraţie înţelept, dimensiunea de locuri de muncă este mult prea mare! Ar fi nevoie de cel puţin dublu faţă de timp pentru a obţine un loc de muncă prelucrate în cazul în care lucrătorul iniţială merge AWOL (timp pentru a ridica că nu a returnat un rezultat plus timp reprelucrare). Într-un ideal ai avea cel puţin un loc de muncă plin cu uşurinţă eliminat de la sfârşitul fiecărei perioade de ralanti de lungă, în acest fel vă păstraţi de locuri de muncă peste bifând şi în cel mai rău caz, un loc de muncă ar dura două zile pentru a procesului ar trebui să meargă primul lipsesc.
- Ocuparea forţei de muncă 1 minut pentru a rula: Acest lucru înseamnă că muncitorii dura aproximativ 15 minute pentru a rula fiecare loc de muncă. Deşi acest lucru poate părea iniţial ideal, puteţi câştiga de prelucrare de muncă suplimentare în timpul prânz, pauzele de cafea, întâlniri, etc acest scenariu pune presiune pe alte zone ale sistemului dvs. şi introduce propriile sale probleme. De exemplu, în primul rând de instalare / raportul timpului de procesare este de gând să merg dreapta jos, a pierde, prin urmare, eficienţa sistemului. Reteaua ta va fi de streaming constant informaţii de locuri de muncă pentru lucrătorii în diferitele personalului frustrante care sunt dong lor de zi cu munca de zi. Eşti de asemenea, va pune presiune mai mult pe serverul dvs. de prelucrare de locuri de muncă, deoarece trebuie să antena afară o mulţime şi o mulţime de piese mici de lucru în mod regulat. În sfârşit, în această situaţie dacă serverul dvs. de locuri de muncă se duce în jos ai de gând să creaţi un jurnal imens din spate de sarcini neîndeplinite în timp ce mai mare de locuri de muncă ar putea de prelucrare a continuat blissfully cunoştinţă faptul că serverul de locuri de muncă a fost confruntă cu dificultăţi.
În realitate, nu va fi nici o configurare ideal pentru configurarea reţelei dumneavoastră, mult depinde de resursele disponibile, tipuri de locuri de muncă, cerinţele de timp de răspuns de locuri de muncă, capacitatea de reţea, şi aşa mai departe. Toate acestea, unele linii directoare ar fi:
- Dimensiune de locuri de muncă, astfel încât fiecare lucrător poate obţine prin intermediul a cel puţin 3-4 locuri de muncă într-o perioadă de 15 ore (cea mai lunga perioada de timp probabil mers în gol)
- Joaca-te cu dimensiunea de locuri de muncă, astfel încât timpul de setare devine destul de nesemnificative în comparaţie cu timpul de prelucrare (ţinând cont de punctul de mai sus).
- În cazul în care un loc de muncă nu este complet în dubla cantitatea de timp (poate mai puţin), vă aşteptaţi să completeze aceasta presupune că sa AWOL plecat şi de prelucrare a începe cu un alt muncitor. Aceasta înseamnă că va trebui să aşteptaţi până la de trei ori lungimea normala a unui loc de muncă pentru ca acesta să completeze (eventual mai mult în cazul în care nu reuşeşte de locuri de muncă ulterioare). Este posibil să doriţi pentru a reduce acest timp, dar aveţi grijă să nu-l reduce prea mult, ca s-ar putea începe duplicarea sarcinilor de prelucrare în mod regulat.
- De locuri de muncă ar trebui să fie independentă de cerinţe în afara cât mai mult posibil. Serverul de locuri de muncă, de exemplu, ar trebui să fie contactat doar la începutul şi sfârşitul fiecărui loc de muncă.
- Nu satura reţeaua dvs., aceasta va avea două efecte negative, personalul zi va găsi utilizând reţeaua frustrant şi probleme pot fi cu experienţă, cu conexiuni calendarul o problema care va primi doar mai rau ca tine scara grila dumneavoastră.
- Asiguraţi-vă de locuri de muncă poate rula pe muncitorii. În cazul în care locurile de muncă devin prea memorie de locuri de muncă intensivă sau spaţiul de pe disc intensiv va începe întreruperea şi singurul lucru veţi observa este o scădere a numărului de locuri de muncă prelucrate cu nici un motiv real de ce.
Rezultatele Trimiterea unui loc de muncă
Atunci când prezintă rezultatele unui loc de muncă, este important să verificaţi că rezultatele nu au fost prezentate de către un alt lucrător, mai ales în cazul în care lucrătorul curent a fost adormit de ceva timp.
Atunci când rezultatele sunt transmise asigura că numărul de rezultatele meciurilor numărul de înregistrări în locuri de muncă.
După cum sa menţionat anterior, şi nu poate fi peste accentuat, construi toleranta la defecte în extragerea de locuri de muncă şi prezentarea rezultatelor. Lucrătorii pot (şi cel mai probabil vor) intra în modul de suspendare la incomod de cele mai multe ori şi acest lucru trebuie să fie satisfăcute. De asemenea, încă o dată abstractizare departe depunerea dvs. rezultatele vor ajuta pentru a satisface modificări viitoare a sistemului de control de locuri de muncă mult mai uşor pentru a face faţă.
Rezumatul
În acest section am uitat la ceea ce un server de control loc de muncă trebuie să facă şi cum să obţineţi un sistem foarte de bază stabilit. Am discutat despre modul în care pentru a prelua un loc de muncă din sistemul de control şi de modul în care cel mai bine pentru a configura de locuri de muncă pentru a obţine cele mai multe nostru de sistemul dvs. reţea de birou. Pentru a termina, un paragraf sau două pe prezenta rezultatele inapoi la server de control de locuri de muncă a fost prezentat.
- Un server de control de locuri de muncă gestionează locurile de muncă şi se asigură că toate unităţile de muncă sunt completate
- Prin abstractizare locul de muncă selectaţi / prezentarea rezultatelor putem schimba tehnologia de server de control fără probleme de mult
- Configuraţi-vă de locuri de muncă pentru a se asigura că acestea sunt conduse rapid şi eficient, fără a pune presiune prea mare pe infrastructura de reţea, şi fără duplicarea sarcinilor de prelucrare în mod regulat.
- Asiguraţi-vă că construi toleranţa la erori şi checking eroare în rutine, lucrătorii pot suspenda şi relua şi incomod de cele mai multe ori. Amintiţi-vă pentru a verifica dacă rezultatele au fost deja prezentate de către un alt muncitor.
Următorul timp
În partea 3 vom crea noastre de procesare maşină virtuală şi să configuraţi Windows maşinile noastre de a deveni în timp lucrătorii inactiv.