Panimula
Trabaho ko sa isang kumpanya na kung saan tumakbo kami ng maraming trabaho batch processing sa mga milyon-milyong mga mga talaan ng data sa bawat araw at ako ay-iisip kamakailan lamang tungkol sa lahat ng mga machine na umupo sa paligid ng bawat at araw bawat paggawa ng wala para sa ilang oras. Hindi ito magandang kung maaari naming gamitin ang mga machine sa magbolster ang pagproseso ng kapangyarihan ng aming mga system ? Sa hanay ng mga artikulo na ako pagpunta sa tumingin sa mga potensyal na mga benepisyo ng employing ng isang tanggapan grid na gamit ang virtualised kapaligiran.
Sa Part 1 ako nagbigay ng isang pangkalahatang-ideya ng ang sistema at teknolohiya ay gumagamit ako ng pati na rin tinalakay ang ilan ng mga potensyal na kadahilanan kung bakit gusto mo upang lumikha ng isang opisina grid.
Job Control
Kung ikaw ay pagpunta upang patakbuhin ang mga trabaho at pagkatapos kayo ay pagpunta sa kailangan ang ilang mga paraan upang pamahalaan ang mga ito. Ang iyong trabaho control system (sa iyong trabaho server) pangangailangan ay talagang naisip bago kahit na sinusubukan upang magpatakbo ng isang grid ng opisina. So una, ano ang mga gawain para sa isang sistema ng trabaho control:
- Trabaho sa labas ng kamay sa kahilingan mula sa mga manggagawa
- Sabihin sa manggagawa sa kung anong uri ng trabaho upang patakbuhin
- Subaybayan ang trabaho
- Siguraduhin na ang mga trabaho ay tatakbo lamang isang beses
- Magbigay ng mga data trabaho sa mga manggagawa, o hindi bababa sa sabihin sa kanila kung saan upang makakuha ng ito
Sistema din ng pangangailangan sa extensible, isang solusyon na gumagana para sa ngayon sa isang solong na kaso ay maaaring pinalawak na upang patakbuhin ang ilang mga uri ng mga trabaho bilang ang negosyo na nakikita ang halaga sa isang solusyon ng grid. Halimbawa, ang mga trabaho ay maaaring makakuha ng prayoridad, ang higit pa sa isang uri ng trabaho ay maaaring umiiral (ie mga ilang bases ng code), kalaunan maaari kang kahit na magpatakbo ng mga iba't ibang machine manggagawa na na-optimize para sa bawat uri ng trabaho (bagaman na ilipat ang layo mula sa 'generic manggagawa 'ideya). Laging subukang mag-isip tungkol sa hinaharap kapag pagbuo ng sistema, ang isang maikling kataga ng paningin ay maaaring humantong sa na term na pagkabigo at nadagdagan na oras ng development.
Job Server
Kami ay pagpunta sa lugar na kailangan upang makontrol ang aming mga trabaho mula sa, ito ay dapat na lamang ang system sa iyong grid na may isang nakapirming tagahanap mapagkukunan, na sa isang IP address, pangalan ng host, ang URL (gamit ang mga DNS panloob), atbp Ito ay dahil ang mga manggagawa na kailangan malaman kung saan upang tumingin para sa mga trabaho, ang mga manggagawa ay kailangan upang mahanap ang kontrol ng sistema ng trabaho (hindi ang kontrol ng sistema ng trabaho na makahanap ng mga trabahador).
Ang server ng trabaho mismo ay hindi talagang magkaroon ng isang kumplikadong gawain (sa isang pangunahing sistema sa paano't paano man), na kinakailangan nito upang i-imbak ang isang listahan ng mga trabaho, kamay out trabaho, makatanggap ng mga resulta, at pagkatapos store ang mga ito para sa mamaya pagsasauli. Paano ang mga bahagi (tulad ng 'kamay out trabaho') ay tinukoy ay maaaring maging pangunahing. Mamaya sa maaari naming palawakin ang sistema upang isama ang isang pangangasiwa interface upang idagdag, i-edit, tanggalin, isuspinde trabaho ngunit ito ay lampas sa pagsasanay na ito.
May ay walang dahilan ano man pagkatapos na ang iyong trabaho server ay hindi maaaring maging isang virtual machine na tumatakbo sa loob ng iyong pangunahing processing server na ibinigay ay hindi maubos ang masyadong maraming mga mapagkukunan mula dito. Ang server ng trabaho ay gayunpaman ay kailangan ng mataas na availability, kung ito napupunta down sa isang Biyernes gabi na ikaw ay pagpunta sa mawalan ng isang buong linggo ng processing, potensyal na costing sa iyo ng ilang linggo na halaga ng oras ng pagpoproseso (kapag inihambing sa iyong pangunahing pagproseso ng server ay nag-iisa) . Baka gusto mong isaalang-alang ng paglagay ng iyong trabaho server sa load ng isang balanseng kapaligiran para sa mataas na availability.
Basic Setup
Ang pangunahing setup para sa aming trabaho server ay binubuo ng kung ano ang ako pagtawag isa ng aking mga malata server (na Li nux, m ySql, P HP). Ang code na tumatakbo sa Thea manggagawa ay talagang gumagana out kung ano ang mga trabaho na maaari itong tumakbo sa pamamagitan ng pakikipag-ugnay sa trabaho database ng control sistema. Mamaya sa namin mai-lumikha ng isang serbisyo ng web at talagang kamay out sa mga trabaho sa halip na nagkakaproblema ang mga manggagawa na gawin ang mahirap na trabaho na kanilang sarili, ngunit sa ngayon kami ay patuloy na gamit ang Halik prinsipyo (Panatilihin ang mga ito Simple, hangal!).
Kaya, ay nagbibigay- daan sa lumikha ng tatlong MySQL talahanayan sa pakikitungo sa mga trabaho. Ang mga ito ay `trabaho`, `jobRecords`, at `jobResults`.
Narito ako gumagamit ng SQL Buddy isang magandang maliit na alternatibo sa phpMyAdmin lamang dahil ang mas madaling i-install sa centOS (para sa iba na makita: 10 Mahusay na mga alternatibo sa phpMyAdmin)
Ang table na ito ay binubuo ng 5 simpleng mga patlang,
- id: makilala sa trabaho
- pangalan: ma-isang client sanggunian, o anumang bilang ng iba pang mga mga identifier
- Katayuan: Kailangan mong malaman kung saan ang trabaho ay sa, halimbawa
- 0: Hindi makapagsimula
- 1: Napili up
- 2: Nakumpleto
- started_by: Sino ang nagsimula ng paggawa ng trabaho? Ito ay hindi ganap na kinakailangan ngunit ay gandang magkaroon. Gusto ko iminumungkahi ang pagsubaybay ng mga manggagawa ng kanilang mga IP address sa iyong network
- started_at: Kapag ang manggagawa ang simulan ang trabaho? Sa pamamagitan ng pagsubaybay sa mga trabaho na hindi nakumpleto sa loob ng X halaga ng oras na alam namin na kailangan namin upang kunin ang trabaho muli at simulan ang pagproseso ng isa pang manggagawa. Manggagawa ay maaaring ihinto ang pagproseso / pumunta offline para sa anumang bilang ng mga kadahilanan, kapangyarihan pagkabigo, crash, pagkawala ng network, atbp.
Ito ay madali kung paano ang talahanayan na ito ay maaaring pinalawak na sa isang ilang karagdagang mga patlang upang pahintulutan para sa mga istatistika ng pagsubaybay, isang haligi ng matapos oras upang makita kung gaano katagal kinuha ang trabaho, isang kontra upang makita kung gaano karaming mga manggagawa ang pinili up ng trabaho (malinaw naman ang mga pangangailangan na may posibilidad na 1), priority ng trabaho, ang listahan ng maaaring pumunta sa at sa. Sa mga mas kumplikadong sitwasyon trabaho ay posibleng upang tukuyin kung gaano karaming memory ang manggagawa ay kailangan ng access sa (at samakatuwid lamang gumamit ng mga angkop na manggagawa), o kahit na anong uri ng mga manggagawa ay kinakailangan.
Hinahayaan magdagdag ng ilang mga trabaho sa halimbawa:
Ang susunod na talahanayan ay muli ay masyadong simple upang maunawaan, ang mga ito ay ang aming trabaho talaan. Sila ay naka-link sa pangunahing mga talahanayan ng trabaho sa pamamagitan ng isang haligi na `jobs_id`. Ang bumubuo ng talahanayan na ito napaka depende sa data na kailangan mong supply sa iyong mga manggagawa, ay nagbibigay-daan sa isang napaka-simpleng halimbawa na kung saan kami ay may apat na mga haligi:
- id: ID ng record
- pangalan: pangalan Tao
- address: address Tao
- jobs_id: Ang ID ng trabaho na ang tala na ito ay naka -link sa
Ang third at huling talahanayan ay binubuo ng isang talahanayan ng mga resulta, ito ay magkano ang parehong bilang aming mga talaan sa table, at sa pagdagdag ng ilang mga haligi ay maaaring maging bahagi ng mga talaan ng table:
- job_record_id: Link ng resulta sa table trabaho
- resulta: Ang mga resulta ng data
... At na ang lahat na kailangan mo para sa trabaho control! (Kahit na sa isang pangunahing antas) Sa aking kaso ako matulis sa isa pang table kung saan ang aking data sa proseso ay matatagpuan, ngunit ito ay maaaring tulad ng madaling-file ng isang, ang mga parameter upang magpatakbo ng simulation code, pangalan mo ito.
Pagpili ng isang trabaho
Tulad ng nakasaad dati, ang mga manggagawa ay gawin ang aming trabaho pamamahala para sa amin para sa ngayon, kaya lahat ng kailangan naming talagang gawin ay makahanap ng trabaho na pangangailangan processing at makuha ang impormasyon. Paano namin gawin ito? Well pumili sa aming mga pamantayan sa pagpili ng trabaho at hitsura para sa mga trabaho, sa SQL ko ang mga sumusunod:
- Gumawa ng anumang mga trabaho na ay hindi mamarkahan bilang makumpleto ngunit mula sa aming mga manggagawa at reset sa kanila (kapalit __ME__ sa isang identifier, pinakamadaling ay IP address):
UPDATE `trabaho` set `status` = 0 SAAN `status` = 1 AT `started_by` = __ME__;
- Paggamit ng aming mga pamantayan sa pagpili ng trabaho, pumili ng isang trabaho at sabihin ang control system na ang manggagawa na ito ay pagharap dito:
UPDATE `trabaho` set `status` = 1, `started_by` = __ME__, `started_at` = NGAYON () SAAN `status` = 0 O
(`Status` = 1 AT `started_at`> DATE_SUB (NGAYON (), agwat X HOUR)) UPANG NG `id` ASC;
Sa pamamagitan ng daklot ng mga trabaho na hindi nagbalik ng mga resulta sa X halaga ng oras namin matiyak na ang lahat ng mga trabaho ay tatakbo sa kaganapan ng isang manggagawa sa pag-crash o pagpunta ng AWOL.
- Susunod grab ang mga detalye ng mga trabaho na sinundan ng ang mga talaang kanilang sarili:
Piliin * MULA sa `trabaho` SAAN `started_by` = __ME__ LIMIT 1;
Piliin ang * MULA sa `job_records` SAAN `id` = __JOBID__;
Sa pagkumpleto ng trabaho namin ipasok ang aming mga talaan sa resulta at markahan ang mga trabaho bilang kumpletong. Tandaan ng trabaho ay maaaring suspindihin / ipagpatuloy sa anumang oras payagan para sa ilang mga katabaan sa iyong script. Maaaring ito ay na ang gawain ng suspends kalahati paraan sa pamamagitan ng pag-update ng ang kontrol ng sistema ng trabaho, kaya check ang bilang ng mga talaan sa isang trabaho at ang bilang ng mga resulta ng na save sa sistema ng trabaho control ay maging isang matalino ilipat.
Bilang karagdagan, habang ito ay nagpapakita kung paano trabaho ay maaaring piliin at pinamamahalaan mula sa isang SQL-query frame dapat mo ba talagang abstracting ng kontrol ng iyong trabaho upang kung nagpasya kang lumipat sa paggamit ng isang web serbisyo, ng isang file ng batay sistema , XML, o anumang iba pang bilang ng mga sistema ay hindi ito makakaapekto ang code sa itaas nito.
Job Configuration
Ang susunod na aspeto upang isaalang-alang ang sukat at configuration ng trabaho. Sa pamamagitan ng play sa configuration ng trabaho namin hampasin ng isang mahusay na balanse sa pagitan ng bilis, pagtitiklop ng proseso, at kahusayan. Kumuha ng ilang of sitwasyon:
- Trabaho tumagal ng 1 araw sa bawat tumakbo: Ito ay nangangahulugan na ang iyong mga manggagawa ay kailangan ng 15 araw upang i-proseso ang bawat trabaho (tandaan ang 10% ng kapangyarihan para sa mga 2/3rds ng oras). Ito ay malinaw na hindi isang matalino configuration, ang sukat ng iyong trabaho ay paraan masyadong malaki! Tumagal ng hindi bababa sa double ng oras upang makakuha ng isang trabaho na naproseso dapat ang unang manggagawa pumunta AWOL (oras sa pick up na ito ay hindi nagbalik ng isang resulta plus reprocessing oras). Sa isang ideal na gusto mo magkaroon ng hindi bababa sa isang buong trabaho ay madaling clear sa pamamagitan ng dulo ng bawat mahabang idle panahon, na ang paraan panatilihin mo ang trabaho gris higit sa at sa pinakamasama kaso ng trabaho ay tumagal ng dalawang araw sa proseso dapat ang unang pumunta nawawala.
- Trabaho ay tumagal ng 1 minuto para tumakbo: Ito ay nangangahulugan na ang iyong mga manggagawa ay tumagal ng halos 15 minuto upang patakbuhin ang bawat trabaho. Habang ito ay maaaring simula mukhang ideal, makakuha ng karagdagang pagproseso ng trabaho sa panahon ng tanghalian oras, ang mga coffee breaks, pagpupulong, atbp. Sitwasyong ito naglalagay pilay sa iba pang mga lugar ng iyong system at introduces ang kanyang sariling problema. Halimbawa, una iyong setup / oras ng pagpoproseso ratio ay pagpunta sa pumunta karapatan down, samakatuwid pagkawala ng sistema ng kahusayan. Ang iyong network ay pagpunta upang patuloy streaming ng trabaho impormasyon sa iba't ibang mga manggagawa ng mga kawani ng nakakadismaya na dong ang kanilang araw-araw na gawain. Ka rin pagpunta upang ilagay ng mas maraming mga pilay sa iyong server sa pagproseso ng trabaho dahil ito ay upang magbigay ng maraming at maraming ng mga maliliit na mga piraso ng trabaho sa isang regular na batayan. Panghuli, sa sitwasyong ito kung ang iyong server sa trabaho napupunta down kayo ay pagpunta upang lumikha ng isang malaking mag-log sa likod ng uncompleted gawain samantalang mas malaking trabaho ay maaaring ng patuloy na pagproseso blissfully nakalimot na ang mga trabaho ng server ay nakakaranas ng mga paghihirap.
Sa katotohanan ay walang ideal na configuration para sa iyong grid setup, magkano ay depende sa ang mga magagamit na mapagkukunan, ang mga uri ng trabaho, trabaho kinakailangan turnaround time, kakayahan ng network, at iba pa. Subalit ang ilang mga alituntunin ay:
- Trabaho Sukat kaya na ang bawat manggagawa ay maaaring makakuha ng sa pamamagitan ng hindi bababa sa 3-4 na trabaho sa isang panahon ng 15 oras (ang pinakamahabang malamang idle tagal ng panahon)
- Play sa laki ng trabaho kaya nagiging medyo hamak kumpara sa oras ng pagpoproseso (nadadala sa isip sa itaas punto) ang setup oras na iyon.
- Kung ang isang trabaho ay hindi kumpleto sa double ang halaga ng oras (siguro mas mababa) na inaasahan mong ito upang makumpleto ipinapalagay ito na ang nawala AWOL at magsisimulang iproseso ang mga ito sa isa pang manggagawa. Ito ay nangangahulugan na maaari kang maghintay nang hanggang sa tatlong beses ang normal na haba ng isang trabaho para dito upang makumpleto (marahil na kung ang kasunod na trabaho nabigo). Baka gusto mong bawasan ang oras na ito, ngunit maging maingat na hindi upang mabawasan ito masyadong maraming bilang maaari mong simulan ang duplicating ng mga gawain sa pagproseso sa isang regular na batayan.
- Trabaho ay dapat na hiwalay sa labas kinakailangan hangga't maaari. Ang server ng trabaho, halimbawa, ay dapat lamang makipag-ugnayan sa simula at dulo ng bawat trabaho.
- Huwag mababad ng iyong network, ito ay may dalawang mga negatibong epekto, ang iyong mga araw na kawani ay mahanap gamit ang network ang nakakadismaya at mga problema ay maaaring nakaranas na may koneksyon timing ang isang problema na lamang makakuha ng mas masahol bilang sukatan mo ang iyong grid.
- Tiyakin na trabaho ay maaaring tumakbo sa iyong mga manggagawa. Kung ang mga trabaho ay maging masyadong memory intensive o disk space masinsinang trabaho ay magsisimula aborting at ang tanging bagay na mapapansin mo ay isang drop sa bilang ng mga trabaho na naproseso sa walang tunay na dahilan kung bakit.
Ang pagpadala ng mga Resulta ng isang Job
Kapag pagsusumite ang mga resulta ng isang trabaho ay mahalaga upang suriin na resulta ay hindi naisumite ng ibang manggagawa, lalo na kung ang kasalukuyang manggagawa ay natutulog para sa ilang oras.
Kapag ang mga resulta ay isinumite masiguro na ang bilang ng mga resulta ay tumutugma ang bilang ng mga talaan sa loob ng trabaho.
Tulad ng isinasaad sa dati, at hindi maaaring higit sa emphasized, bumuo ang tolerance ng kasalanan sa pagkuha ng trabaho at pagsusumite ng mga resulta. Ang mga manggagawa ay maaaring (at malamang ay) pumunta sa isuspinde mode sa ang pinaka-maginhawa ng beses at ang mga pangangailangan na ito sa catered para sa. Rin muli abstracting layo ng iyong mga resulta ng pagsusumite ay makakatulong sa magsilbi sa mga hinaharap na pagbabago sa iyong sistema ng trabaho control lubhang mas madaling pakikitungo sa.
Buod
Sa ito section namin tumingin sa kung ano ang isang trabaho sa server control kailangang gawin at kung paano makakuha ng isang pangunahing sistema set up. Tinalakay namin kung paano upang makuha ng trabaho mula sa control sistema at kung paano pinakamahusay na i-configure ang mga trabaho upang makuha ang pinakamahusay na aming ng iyong system ng grid ng opisina. Upang tapusin, isang talata o dalawa sa pagsusumite ng mga resulta pabalik sa server ng control ng trabaho ay iniharap.
- Ang control ng server ng trabaho ay namamahala ng mga trabaho at tinitiyak na ang lahat ng mga unit ng trabaho ay nakumpleto
- Sa pamamagitan ng abstracting iyong trabaho select / resulta ng pagsumite ng maaari naming baguhin ang teknolohiya ng control server nang walang magkano ang mga problema
- Isaayos ang iyong trabaho upang matiyak na sila ay tumakbo nang mabilis at mahusay na walang paglalagay ng masyadong maraming presyon sa iyong network infrastructure, at walang duplicating pagproseso ng mga gawain sa isang regular na batayan.
- Tiyakin na ang binuo mo kasalanan tolerance at error checking sa iyong mga gawain, manggagawa maaaring suspindihin at ipagpatuloy at ang pinaka-maginhawa ng beses. Tandaan upang suriin kung ang mga resulta ay naisumite na sa pamamagitan ng isa pang manggagawa.
Susunod
Sa bahagi 3 kami ay lumikha ng aming mga virtual machine sa pagproseso at set up ng aming mga machine bintana upang maging idle -time na mga manggagawa.