Inngangur
Ég vinn í fyrirtæki þar sem við keyra mörg störf Runuvinnsla milljónir gagna af gögnum á hverjum degi og ég hef verið að hugsa undanfarið um allar vélar sem sitja í kring á hverjum degi að gera ekki neitt í nokkrar klukkustundir. Væri ekki gott ef við gætum notað þær vélar til að efla vinnslu kraft kerfi okkar? Í þessu mengi greina sem ég ætla að líta á hugsanlegum ávinningi af ráðningu skrifstofu rist með virtualised umhverfi.
Í hluta 1 ég gaf yfirlit yfir kerfi og tækni sem ég mun nota eins og heilbrigður eins og rætt sumir af mögulegum ástæðum hvers vegna þú vilt að búa til skrifstofu rist.
Job Control
Ef þú ert að fara að keyra störf þá þú ert að fara að þurfa einhverja leið til að stjórna þeim. Starf eftirlitskerfi þín (á þjóninum starfsumsókn) þarf að vera virkilega vel hugsað út fyrir jafnvel að reyna að keyra skrifstofu rist. Svo í fyrsta lagi, hver eru verkefni fyrir stjórn starf kerfi:
- Skilið út störf að beiðni starfsmanna
- Segðu starfsmenn hvaða tegund af störf til að keyra
- Track störf
- Að tryggja að störf eru aðeins keyra einu sinni
- Veita starf gögn til starfsmanna, eða að minnsta kosti segja þeim hvar á að fá það
Kerfið þarf einnig að vera teygjanlegur, lausn sem virkar fyrir nú í einu tilviki er heimilt að framlengja til að keyra nokkrar tegundir af störfum sem fyrirtæki sér gildi í töflu lausn. Til dæmis, störf má fá forgangsröðun, fleiri en eitt starf tegund getur verið (þ.e. margar undirstöður númer), að lokum getur þú jafnvel hlaupa nokkrum mismunandi véla starfsmaður sem eru bjartsýni fyrir hverja tegund vinnu (þó að það er flutt í burtu frá the 'almenna starfsmann "Hugmyndin). Alltaf að reyna að hugsa um framtíðina þegar að þróa kerfi, til skamms tíma sýn getur leitt til lengri tíma gremju og aukinni þróun tíma.
Atvinna Server
Við erum að fara að þurfa einhvers staðar að stjórna störf okkar frá, ætti þetta að vera eina kerfið á rist þinn sem hefur fasta úrræði Locator, vera að IP tölu, gestgjafi nafn, slóð (með innri DNS) o.fl. Þetta er vegna þess að starfsmenn þurfa að vita hvar á að leita að starfi, þarf starfsmenn til að finna stjórn starf kerfi (ekki stjórna starf kerfi finna starfsmenn).
Starfið framreiðslumaður sig ekki í raun hafa flókið verkefni (í grunn kerfi einhvern veginn), þarf það að geyma lista yfir störf, hönd út störf, fá niðurstöður, og síðan vista þær til síðari sókn. Hvernig þessir hlutir ('hönd út Jobs "eins) eru skilgreindar getur verið mjög einfalt. Seinna getum við lengja kerfið til að fela í sér gjöf tengi til að bæta við, breyta, eyða, fresta störfum en þetta er handan þessa æfingu.
Það er engin ástæða alls þá sem starf framreiðslumaður þín gæti ekki verið raunverulegur vél í gangi innan helstu vinnslu miðlara enda er ekki holræsi of margar auðlindir frá því. Starfið framreiðslumaður þó hefur þurft mikið framboð, ef það fer niður á föstudagskvöldi þú ert að fara að missa allt helgi vinnslu, hugsanlega kosta þig nokkrar vikur virði af tíma vinnslu (í samanburði við helstu vinnslu miðlara eingöngu) . Þú vilt kannski að íhuga að setja starf miðlara á hlaða jafnvægi umhverfi fyrir hár framboð.
Basic Setup
Grunn skipulag fyrir miðlara starf okkar mun samanstanda af því sem ég kalla einn af Limp netþjónum mínum (sem er Li nux, m ySql, P HP). Kóðinn í gangi á Thea starfsmenn vilja raunverulega vinna út hvað störf það er hægt að keyra í gegnum samskipti við með starf stjórna kerfi gagnagrunna. Síðar við gætum búið til vefur þjónustu og í raun hendinni út störf frekar en að þurfa starfsmenn að gera vinnu sig, en nú munum við halda áfram að nota KISS meginreglu (Hafðu það einfalt, Stupid!).
Svo leyfir, að búa til þrjú mySQL töflur til að takast á við störf. Þetta mun vera `störf`, `jobRecords` og `jobResults`.
Hér ég er að nota SQL Buddy a mikill lítill val til phpMyAdmin bara vegna þess að auðveldara þess að setja á CentOS (fyrir aðra sjá: 10 Great val til phpMyAdmin )
Þessi tafla samanstendur af 5 einföldum sviðum,
- id: Einstaklega finna starf
- Nafn: Gæti verið viðskiptavinur tilvísun, eða allir tala af öðrum auðkennum
- Staða: Þú þarft að vita hvar starfið er á, td
- 0: Ekki byrja
- 1: sóttir
- 2: Lokið
- started_by: Hver er byrjað að gera í vinnunni? Þetta er ekki alveg nauðsynlegt en er gott að hafa. Ég vil benda mælingar starfsmenn með IP tölu þeirra á netið
- started_at: Hvenær starfsmaður hefja starf? Með því að fylgjast með störf sem ekki hafa lokið innan X tíma og við vitum að við þurfum að taka upp starf aftur og byrja vinnslu af öðrum starfsmanni. Starfsmenn gætu hætt vinnslu / go ótengdur fyrir af ýmsum ástæðum, máttur bilun, hrun, net tap, o.fl.
Það er auðvelt hvernig þessi tafla gæti verið framlengdur með nokkrum fleiri sviðum til að leyfa fyrir tölfræði virka, tími klára dálki til að sjá hversu lengi starf tók, er gegn til að sjá hversu margir starfsmenn tóku upp starfið (augljóslega þetta þarf að hafa tilhneigingu til að 1), starf forgang, listinn getur farið á og á. Í flóknari vinnu tilfellum væri hægt að tilgreina hversu mikið minni starfsmaður þyrfti aðgang að (og því aðeins að nota viðeigandi starfsmenn), eða jafnvel hvaða tegund af starfsmanni væri nauðsynleg.
Lets bæta nokkrum störf dæmi:
Næsta tafla aftur er alveg einfalt að skilja, eru þetta starf færslur okkar. Þau eru tengd við helstu störf töflu með dálkum `jobs_id`. Að hringja upp á þessari töflu mjög mikið veltur á þeim gögnum sem þú þarft að veita starfsmönnum þínum, gerir þér kleift að gera mjög einfalt dæmi þar sem við höfum fjóra dálka:
- id: Auðkenni færslu
- Nafn: nafn viðkomandi
- Heimilisfang: heimilisfang viðkomandi
- jobs_id: Starfið auðkenni sem þessi færsla er tengd við
Þriðja og síðasta borð samanstendur af niðurstöðunum, það hefur mikið sama að gera upp og færslur borð okkar, og með því að bæta við nokkrum dálkum gæti verið hluti af færslur töflu:
- job_record_id: Link niðurstöðu að starf borð
- Niðurstaðan: niðurstöðu gögn
... Og það er allt sem þú þarft að stjórna vinnu! (Að vísu á mjög undirstöðu stig) Í mínu tilfelli ég benti á annað borð þar sem gögn mín aðferð var staðsett, en þetta gæti alveg eins auðveldlega verið skrá, breytur til að keyra uppgerð kóða, nefndu það.
Val á starfi
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.
- 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.
In reality there will be no one ideal configuration for your grid setup, much depends on the available resources, types of job, job turnaround time requirements, network capability, and so on. However some guidelines would be:
- Size jobs so that each worker can get through at least 3-4 jobs in a period of 15 hours (the longest likely idle time period)
- Play with the job size so that setup time becomes fairly insignificant compared to the processing time (bearing in mind the above point).
- Ef starf er ekki lokið í tvöfalt tíma (kannski minna) þú ætlast það til að ljúka því gera ráð fyrir að gengið AWOL hennar og byrja að vinna það með öðrum starfsmanni. Þetta þýðir að þú gætir þurft að bíða í allt að þrisvar sinnum eðlilega lengd vinnu fyrir það að ljúka (hugsanlega lengur ef síðari starf ekki). Þú vilt kannski að draga úr þessum tíma, en vera varkár ekki til að draga það of mikið og þú getur byrjað að endurtaka vinnslu verkefna með reglulegu millibili.
- Algengar ætti að vera óháð utanaðkomandi kröfum eins mikið og mögulegt er. Starfið miðlara, til dæmis, ætti aðeins að hafa samband í upphafi og lok hvert starf.
- Ekki saturate ekki net, þetta mun hafa tvær neikvæð áhrif, daginn starfsfólk mun finna með því að nota net pirrandi og vandamál geta komið fram við tengingar tímasetja út vandamál sem mun aðeins versna og þú mælikvarði rist þinn.
- Tryggja störf geta keyrt á starfsmenn þínum. Ef störf verða of minni ákafur eða diskur rúm ákafur störf hefst Hætti og það eina sem þú munt taka eftir er dropi í fjölda starfa unnin með enginn raunverulegur ástæðu hvers vegna.
Sendi Niðurstöður atvinnuleit
Þegar að senda inn niðurstöður vinnu er mikilvægt að athuga að árangur hefur ekki verið lögð fram af öðrum starfsmanni, sérstaklega ef núverandi starfsmaður hefur verið sofandi um nokkurt skeið.
Þegar niðurstöður eru lagðar að tryggja að fjöldi niðurstaðna samsvarar fjölda gagna innan starfi.
Eins og áður segir, og má ekki vera yfir áherslu, byggja kenna umburðarlyndi í sókn starf og niðurstöður uppgjöf. Starfsmenn geta (og líklega verður) að fara inn fresta háttur á the óþægilegur sinnum og þetta þarf að vera veitingamaður fyrir. Einnig ný abstracting burtu úrslit senda inn mun hjálpa koma til móts við um breytingar á starfi stjórna vélinni þinni miklu auðveldara að takast á við.
Yfirlit
Í þessu section höfum við litið á það sem stjórnkerfi starf miðlara þarf að gera og hvernig á að fá mjög einfalt kerfi sett upp. Við ræddum hvernig á að sækja vinnu frá eftirlitskerfi og hvernig best sé að stilla störf til að fá sem mest okkar á skrifstofu rist kerfi. Til að ljúka, var málsgrein eða tveir á að senda niðurstöður til baka til að stjórna vinnu miðlara fram.
- A stjórna starf miðlara stýrir störfum og tryggir að öll vinna einingar er lokið
- Með abstracting starf velja / niðurstöður uppgjöf við getum breytt tækni stjórna miðlara án þess að mikið vandamál
- Stilla störf til að tryggja að þeir eru að keyra hratt og vel án þess að setja of mikið álag á innviði net, og án þess að endurtaka vinnslu verkefna með reglulegu millibili.
- Gakktu úr skugga um að þú byggir kenna umburðarlyndi og villa checking í venjur þínar, starfsmenn geta stöðvað og haldið áfram og mest óþægilegur sinnum. Mundu að athuga hvort árangur hefur þegar verið lögð fram af öðrum starfsmanni.
Næst þegar
Í 3. hluta munum við búa til raunverulegur vinnsla vél okkar og setja upp Windows vélar okkar til að verða aðgerðalaus-tími starfsmenn.