Hyrje
Unë punoj në një kompani ku kemi drejtuar grumbull shumë punë të përpunimit të miliona e të dhënave të dhënave të çdo ditë dhe unë kam qenë kohët e fundit duke menduar për të gjitha makinat që ulen rreth çdo ditë duke bërë asgjë për disa orë. Nuk do të jetë mirë nëse ne mund të përdorim këto makina për të forcuar pushtetin përpunimin e sistemeve tona? Në këtë grup të neneve Unë do të shikojmë në përfitimet e mundshme e punësimit të një zyre të rrjetit duke përdorur mjedise virtualised.
Në Pjesën 1 I dha një pasqyrë të sistemit dhe të teknologjive të unë do të përdorin, si dhe u diskutua si disa nga arsyet e mundshme pse ju do të duan të krijojnë një rrjet zyrë.
Job Control
Nëse ju do të jeni të konkurrojnë punë atëherë ju do të jeni nevojë disa mënyra për të menaxhuar ato. kontrollit të sistemit të juaj punë (në server tuaj të punës), duhet të jetë me të vërtetë menduar mirë para se edhe përpjekur për të drejtuar një rrjet zyrë. Pra, së pari, cilat janë detyrat e një sistemi të kontrollit të punës:
- Dorë nga punët me kërkesë të punonjësve
- Tell punëtorëve çfarë lloji të vendeve të punës për të drejtuar
- Punë Track
- Të siguruar se punët janë drejtuar vetëm një herë
- Sigurimi i të dhënave të punës për punëtorët, apo të paktën tregoni atyre ku mund të merrni atë
Sistemi gjithashtu duhet të jetë e zgjeruar, një zgjidhje që punon për tani në një rast të vetëm mund të zgjatet për të drejtuar disa lloje të punëve si biznesi e sheh me vlerë në një zgjidhje të rrjetit. Për shembull, punët mund të fitojë prioritetet, më shumë se një lloj pune mund të ekzistojnë (bazat e disa dmth kodi), në fund ju mund të drejtohet edhe disa makina të ndryshme punëtor që janë optimizuar për secilin lloj të punës (edhe pse se ka lëvizje larg nga "punonjës i përgjithshëm 'ide). Gjithmonë të përpiqemi për të menduar për të ardhmen, kur sistemet e zhvillimit, një vizion afat të shkurtër mund të çojnë në zhgënjim afat më të gjatë dhe të kohës në rritje të zhvillimit.
Job Server
Ne do të jeni nevojë diku për të kontrolluar punën tonë nga, ky duhet të jetë i vetmi sistem në rrjet tuaj që ka një pozicionimi të caktuar të burimeve, të jetë që një adresë IP, emri i host, URL (duke përdorur DNS të brendshëm), etj Kjo është për shkak se punëtorët duhet të dini se ku mund të shikoni për punë, punëtorët duhet të gjeni sistemit të kontrollit të punës (nuk e kontrollit të punës të sistemit të gjetur punëtorë).
Server punë në vetvete nuk ka të vërtetë kanë një detyrë e komplikuar (në një Gjithsesi bazë sistemi), ajo ka nevojë për të ruajtur një listë të vendeve të punës, dorë nga punë, të marrë rezultatet, dhe më pas dyqan tyre për rikthim më vonë. Se si këto pjesë ('dorë nga punë "të tilla si) janë përcaktuar mund të jetë shumë bazë. Më vonë ne mund të zgjasë të sistemit për të përfshirë një ndërfaqe të administratës për të shtuar, edit, delete, të pezullojë punët, por kjo është përtej këtij ushtrimi.
Nuk ka asnjë lloj arsye pastaj se serverit tuaj të punës nuk mund të jetë një makinë virtuale running brenda serverit kryesore tuaj e përpunimit me kusht që ajo nuk do të thahet burime shumë nga ajo. Server punë megjithatë ka në dispozicion duhet të larta, në qoftë se ajo shkon poshtë në një mbrëmje e premte do të jeni të humbur një fundjavë e tërë e përpunimit, potencialisht ju kushton disa javë me vlerë të kohës të përpunimit (kur krahasohet me serverin tuaj kryesore të përpunimit të vetëm) . Ju mund të dëshirojnë të marrin në konsideratë vendosjen e serverit tuaj të punës në një mjedis të balancuar të ngarkesës për disponueshmërinë e lartë.
Skema themelore
Setup bazë për punën e serverit tonë do të përbëhet nga ajo që unë jam duke e quajtur një nga serverat e butë time (që është Nux Li, ySql m, P HP). Kodin kandidon për punëtorët the do të punojnë në të vërtetë se çfarë punë që mund të drejtuar nga bashkëveprojmë me me kontrollin e të dhënave të sistemit të punës. Më vonë ne mund të krijojë një shërbim të web dhe në të vërtetë dorë nga punët në vend që të punëtorëve të bëjë punën e vështirë vetë, por tani për tani ne do të vazhdojmë duke përdorur parimin KISS (Keep it Simple, Stupid!).
Pra, lejon krijimin e tre mySQL tavolina për t'u marrë me punë. Këto do të jenë `punë`, `jobRecords`, dhe `jobResults`.
Ja unë jam duke përdorur SQL Buddy pak alternativë e madhe për phpMyAdmin vetëm për shkak të tij më të lehtë për të instaluar në CentOS (për të tjerët e shohin: 10 alternativa e Madhe për të phpMyAdmin )
Kjo tabelë përmban 5 fusha të thjeshta,
- id: Unike identifikimin e punës
- Emri: Mund të jetë një referencë e klientit, ose ndonjë numër identifikues të tjera
- Statusi: Ju duhet të dini se ku puna është në, p.sh.
- 0: Nuk ka filluar
- 1: kap
- 2: Kompletuar
- started_by: Kush e ka filluar duke bërë punë? Kjo nuk është e nevojshme tërësisht, por është një e mirë që të ketë. Unë do të sugjeroj ndjekja e punëtorëve me adresën e tyre IP në rrjetin tuaj
- started_at: Kur punonjësi filluar punë? Nga ndjekja e punës që nuk kanë përfunduar brenda sasi X e kohës ne e dimë që duhet të marr këtë punë edhe një herë dhe të fillojnë të përpunimit nga një punëtor. Punëtorëve të mund të ndalojë përpunimin / shkoni në linjë për çdo numër arsyesh, dështimi i pushtetit, crash, rrjeti humbje, etj
Është e lehtë se si kjo tabelë mund të zgjatet me një disa fusha të tjera për të lejuar për ndjekjen e statistikave, një kolonë kohë të përfundojë për të parë se sa kohë e punë e mori, një kundër për të parë se shumë punëtorë të kap punë (pa dyshim ky duhet të priren të 1), prioritet të punës, lista mund të vazhdojë dhe më. Në më shumë skenarë punë komplekse do të ishte e mundur që të përcaktojë se sa memorie të punonjësit do të ketë nevojë akses për të (dhe për këtë arsye të përdorin vetëm punëtorë të përshtatshme), apo edhe se çfarë lloji i punëtorëve do të jetë e nevojshme.
Lejon të shtoni një punë pak shembull:
Tabela e ardhshëm përsëri është fare e thjeshtë për të kuptuar, këto janë të dhënat tona të punës. Ata janë të lidhur me kryesore tryezë punë nga një kolonë `jobs_id`. Të bëjë deri te kjo tabelë shumë varet nga të dhënat që ju duhet të furnizimit të punëtorëve tuaj, të lejon të bëjë një shembull shumë të thjeshtë ku ne kemi katër shtylla:
- id: ID i regjistruar
- Emri:'s name Person
- Adresa: Adresa e Personit
- jobs_id: ID punë që ky rekord është i lidhur me
Tabela e tretë dhe të fundit përbëhet nga një tabelën e rezultateve, ajo ka shumë e njëjtë të bërë deri sa të dhënat tabelën tonë, dhe me shtimin e disa kolonave mund të jetë pjesë e tabelës dhënat:
- job_record_id: Link rezultat në tryezën e punës
- Rezultati: Të dhënat Rezultati
... Dhe kjo është e gjitha që ju nevojitet për kontroll të punës! (Megjithëse në një nivel shumë bazë) Në rastin tim unë jam i vuri në një tjetër tryezë ku të dhënat e mia për një proces të ishte e vendosur, por kjo mund po aq e lehtë është një fotografi, parametrat për të kandiduar kodin simulimi, ju atë emër.
Zgjedhjen e një punë
Siç u tha më parë, punëtorët do të bëjë të menaxhimit të punës për ne tani për tani, kështu që të gjithë ne duhet të vërtetë nuk është të gjejnë një punë që ka nevojë për përpunim dhe për të marrë informacion. Si do ta bëjmë këtë? Edhe marr zgjedhjen tonë të punës dhe kriteret të shikoni për punë, në SQL unë nuk e mëposhtme:
- Të marrë ndonjë punë që nuk janë shënuar si të plotë, por nga punonjësit tonë dhe reset ata (__ME__ zëvendësim me një identifikues, lehtë do të jetë adresa IP):
UPDATE `Punë` SET `status` = 0 KU `status` = 1 DHE `started_by` = __ME__;
- Përdorimi i kritereve të përzgjedhjes tonë të punës, zgjidhni një punë dhe të them të sistemit të kontrollit që ky punëtor është që kanë të bëjnë me:
UPDATE `Punë` SET `status` = 1, `started_by` = __ME__, `` started_at = NOW () KU `status` = 0 APO
(`` Status = 1 DHE `` started_at> DATE_SUB (TANI (), interval X ORE)) ORDER BY id `` ASC;
Nga grabbing punës që nuk janë kthyer rezulton në shumën X kohë kemi siguruar që të gjitha punët janë drejtuar në rast të një punonjësi ose duke shkuar AWOL crashing.
- Next kap detajet punët e ndjekur nga të dhënat e tyre:
SELECT * `Punë NGA KU` `` started_by = __ME__ LIMIT 1;
SELECT * `job_records NGA KU` `` id = __JOBID__;
Pas përfundimit të punës kemi futur të dhënat tona dhe të shënuar rezultat të punës si e plotë. Mos harroni sa punë mund të pezullojë / rinisë në çdo kohë të lejuar për disa Fuqia në shkrimin tuaj. Kjo mund të jetë se detyra pezullon gjysmën e përditësimit të sistemit të kontrollit të punës, kështu që duke kontrolluar numrin e të dhënave në një punë dhe numrin e rezultateve të ruajtur përsëri në sistemin e kontrollit të punës do të jetë një veprim i mençur.
Përveç kësaj, ndërsa kjo tregon se si punë mund të përzgjidhen dhe menaxhohen nga një e-query SQL kornizë ju duhet të vërtetë të abstraguar punën e kontrollit tuaj në mënyrë që, nëse ju vendosni të kaloni në përdorimin e një ueb shërbim, një sistem të bazuar file, XML , apo ndonjë tjetër numër i sistemeve ajo nuk do të ndikojë në kodin e mësipërm atë.
Job Konfigurimi
Aspekti tjetër për t'u marrë parasysh është madhësia e punës dhe të konfigurimit. Duke luajtur me konfigurimin e punë që ne mund të grevës një bilanc të shkëlqyer midis shpejtësisë, përsëritje proces, dhe besueshmërinë. Hidhni një çift of skenare:
- Punë të marrë 1 ditë secilit për të kandiduar: Kjo do të thotë se punëtorët tuaj duhet 15 ditë për një proces të çdo punë (kujtoni 10% të fuqisë për 2/3rds të kohës). 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.
- Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.
Në realitet nuk do të ketë një konfigurimi ideal për konfigurimin e rrjetit, shumë varet nga burimet në dispozicion, llojet e punës, kthesën e kërkesave të punës kohë, aftësitë e rrjetit, dhe kështu me radhë. Megjithatë, disa udhëzime do të jenë:
- Punë Size në mënyrë që çdo punëtor mund ta merrni nëpërmjet të paktën 3-4 vende pune në një periudhë prej 15 orëve (gjatë periudhës të ngjarë boshe kohe)
- Luaj me madhësinë e punës kështu që kohë setup bëhet mjaft i parëndësishëm në krahasim me kohën e përpunimit (duke patur parasysh pikën më sipër).
- Nëse një punë nuk e bën të plotë në dyfishin e kohës (ndoshta me pak) ju presin atë për të përfunduar atë të supozojmë se AWOL e shkuar dhe të fillojnë përpunimin e tij me një tjetër punëtor. Kjo do të thotë që ju mund të duhet të presë deri në tri herë gjatësinë normale e një punë që ajo të plotë (ndoshta më gjatë nëse puna e mëvonshme nuk). Ju mund të dëshironi të reduktuar këtë kohë, por të kujdesshëm për të ulur atë shumë si ju mund të filloni dublikuar detyra të përpunimit në baza të rregullta.
- Punët duhet të jenë të pavarur nga kërkesat e jashtme sa më shumë që të jetë e mundur. Server punës, për shembull, duhet vetëm të kontaktohet në fillim dhe në fund të çdo punë.
- A nuk e ngop e rrjetit tuaj, kjo do të ketë dy efekte negative, stafi juaj ditën do të gjeni duke përdorur rrjetin frustruese dhe problemet mund të jetë me përvojë me lidhjet kohën nga një problem që do të merrni vetëm më keq si ju shkallë rrjetit tuaj.
- Punë Sigurimi mund të kandidojë në punëtorët tuaj. Nëse punët bëhen shumë memorie Punë intensive ose disk hapësirë intensive do të fillojë aborting dhe e vetmja gjë që ju do të vëreni është një rënie në numrin e vendeve të punës të përpunuara me asnjë arsye të vërtetë pse.
Rezultatet Dorëzimi i një punë
Momentin e paraqitjes së rezultateve të një punë është e rëndësishme të kontrolloni që rezultatet nuk kanë qenë të paraqitura nga një tjetër punëtor, veçanërisht në qoftë se punonjësi aktual ka qenë në gjumë për disa kohë.
Kur rezultatet janë paraqitur të siguruar që numri i rezultateve përputhet me numrin e të dhënave në punë.
Siç u tha më parë, dhe nuk mund të mbi theksuar, të ndërtuar tolerancë gabimi në rikthim të punës dhe rezultate të dorëzimit. Punëtorët mund (dhe më shumë gjasa do të) shkojnë në të pezullojë mode në më të papërshtatshëm të herë dhe kjo duhet të jetë për catered. Gjithashtu edhe një herë abstracting larg Rezultatet e paraqitjes tuaj do t'ju ndihmojë të kujdesem për ndryshimet e ardhshme të sistemit të kontrollit tuaj të punës shumë më e lehtë për t'u marrë me të.
Përmbledhje
Në këtë section ne kemi shikuar në atë që një kontroll punë serveri duhet të bëjnë dhe si të merrni një sistem shumë bazë të ngritur. Ne biseduam se si të marrë një punë nga e sistemit të kontrollit dhe sa më të mirë të konfigurosh punë për të marrë më tonë të sistemit të rrjetit zyrën tuaj. Për të përfunduar, një paragraf ose dy për dorëzimin e rezultateve të kthehet në punë serverin e kontrollit është paraqitur.
- Një kontroll punë server menaxhon punët dhe siguron që të gjitha njësitë e punës janë përfunduar
- Duke abstraguar punën tuaj të zgjedhur / dorëzimin Rezultatet e ne mund të ndryshojmë teknologjinë e serverit kontrollin pa probleme shumë më të
- Punë Konfiguro tuaj për të siguruar që ato janë drejtuar shpejt dhe me efikasitet, pa vënë shumë presion mbi infrastrukturën e rrjetit, dhe pa dublikuar detyra të përpunimit në baza të rregullta.
- Të siguruar që ju të ndërtuar tolerancë gabimi dhe checking gabim në rutinat tuaj, punëtorët mund të pezulluar dhe rifilluar dhe më të papërshtatshëm të kohës. Mos harroni të kontrolloni nëse rezultatet tashmë janë parashtruar nga një tjetër punëtor.
Herën tjetër
Në pjesën e 3 ne do të krijojë të përpunimit tonë makinë virtuale dhe ngriti makinat dritaret tona për t'u bërë i papunë me kohë të punëtorëve.