Dinamiškai pridėti puslapių Zend_Navigation konteineris runtime

Iki Steven Lloyd Watkin , ketvirtadienis 7 sausis 2010 22:50

Visų, tęsinys apie mano paskutinį pranešimą apie Zend_Navigation Maršruto prašymus sitemap.xml pagal užsakymą valdytojas arba veiksmų , šis pranešimas yra apie dymnamically pridedant puslapių Zend_Navigation konteineris runtime / skripto vykdymo.

Jos visos gerai ir gerai, nurodydami savo puslapius ini ar XML failą, bet tam tikru momentu jums teks keisti savo svetainės puslapius, kuriuos norite kaip meniu, Sitemap, ar bus įtraukti į jūsų naršymo kelias takas. Todėl tai, ką turime padaryti, tai pridėti į mūsų puslapių Zend_Navigation konteinerių vykdymo metu. Kaip pavyzdį galima būtų didinant naujienos, dienoraščio, ar puslapis komentarus ir tt

Tęsti svarstymą "Dinamiškai pridėti puslapių Zend_Navigation konteineris runtime" »

Maršruto prašymus sitemap.xml pagal užsakymą valdytojas / veiksmo

Iki Steven Lloyd Watkin , trečiadienis sausis 6, 2010 12:13

Siekiant tiesioginio prašymų / sitemap.xml į vartotojo vadovo ir veiksmų savo Zend Framework taikymas paprasčiausiai pridėkite) šios savo application.ini ar alternatyvių konfigūracijos failo (pvz., aš naudoju navigation.ini:

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = indeksas
 resources.router.routes.sitemap.defaults.action = Sitemap

Pavyzdys kodas išvedė gali matyti sukurti veiksmais per atitinkamas duomenų valdytojas (pvz., mano Sitemap slypi indeksas valdytojas, sitemap veiksmai):

 < PHP
 klasė IndexController
     išplečia Zend_Controller_Action
 {
     / **
      * Teikia struktūra grindžiama Zend_Navigation sąrankos
      * /
     viešoji funkcija sitemapAction ()
     {
    	 echo $ this-> view-> navigaciją () -> Svetainės ();
    	 $ This-> view-> maketą () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemap galite greitai ir lengvai būti generuojami naudojant Zend_Navigation , labai greitai pamoka (ir apskritai labai naudinga Zend Framework Tutorials) yra Zend casts - Dinamiškai sukurti meniu struktūra ir džiūvėsėliai .

Zend Framework, Per-modulis pagrįstas nustatymus

Iki Steven Lloyd Watkin , penktadienis 1 Sau 2010 22:40

Aš sukūriau followup į šį postą, kurios reikalauja mažiau konfigūracijos, žr modulis pagrįstą išdėstymą - Zend Framework .

Kai naudojate Zend Framework su moduliais, jos akivaizdu, kad jei jūs naudojate įvairius (sub-) svetaines ne ta pati paraiška jūs nebūtinai nori to paties išdėstymo scenarijus kiekvienai daliai. Aš nusprendė eiti su šiais svetainės struktūrą:

  / Taikymas
     / Valdikliai
         ...
     / Modelių
     / Moduliai
         / Default
             / Valdikliai
             / Išdėstymas
                 / Scripts
             / Nuomonės
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Problema buvo sukurti maketą scenarijus už modulio pagrindu. Atsakymas atėjo naudodamos veiksmų Helper. Įsteigti maketai, kiekvienai modulio pagrindas apima tris žingsnius:

  1. Application.ini (ar panašios konfigūracijos nustatymų):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modulių / admin / maketai / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modulių / default / maketai / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modulių / member / maketai / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modulių / filialo / maketai / scripts" 
  2. Sukurti savo veiksmų Helper:
      <? Php
     / **
      * Nustato išdėstymo kelią už modulio pagrindas
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Nuo 2010/1/1
      * /
     klasė Pro_Controller_Action_Helper_SetLayoutPath
         išplečia Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Nustato išdėstymas kelias pagrįstas modulis
          * /
         viešoji funkcija preDispatch ()
         {
        	 $ Modulis = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ įkrovos = $ this-> getActionController ()
    	                        -> GetInvokeArg ("Kilpa")) {
    
    	         $ Config = $ Kilpa-> getOptions ();
    
    	         if (isset ($ config [$ modulis] [ištekliai '] [' išdėstymą '] [' layoutPath '])) {
    	             $ LayoutPath =
    	                  $ Config [$ modulis] [ištekliai '] [' išdėstymą '] [' layoutPath '];
    	             $ This-> getActionController ()
    	                  -> GetHelper ("maketas")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Ir galiausiai boostrap veiksmų pagalbininkas:
      ...
         / **
          * Nustato išdėstymo scenarijus už modulio pagrindas
          * /
         Saugomų funkcija _initLayoutHelper ()
    	 {
    	     $ This-> Kilpa ("frontController ');
    	     $ Išdėstymo = Zend_Controller_Action_HelperBroker: addHelper (
    	         naujas Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doktrina: DATETIME nutylėjimą NOW ()

Iki Steven Lloyd Watkin , trečiadienis 30 gruodis 2009 18:30

Aš buvo kovoja su duomenų bazės sukūrimas schema nauja Zend Framework projektu. naudojant Bandant naudoti doktrina ORM mano duomenų bazių modelius. Man reikia įsteigti schemą, kad ji leido man nustatyti numatytąją datą ir laiką "datetime` skiltyje, pavyzdžiui, kai pridedate naują žinutę man dabartinis pažyma. Po ilgų ieškant ir eksperimentuoti radau sprendimą, kad aš dalintis.

Jūsų schemos yaml failą tiesiog atlikite šiuos veiksmus:

 Žinutė:
   Actas:
     Timestampable:
       sukūrė:
         Vardas: created_at
         tipas: timestamp
         formatas: Ymd H: i: s
       Atnaujinta:
         Vardas: last_updated
         tipas: timestamp
         formatas: Ymd H: i: s
   skiltys:
     numeris:
       Tipas: integer
       pirminis: tiesa
       autoincrement: tiesa
     pavadinimas: string (255)
     elektroninio pašto adresas: string (300)
     pranešimas: string (2000)

Jei, kita vertus, jūs nenorite "updated_at" skiltyje galite naudoti taip:

 Žinutė:
   Actas:
     Timestampable:
       sukūrė:
         Vardas: created_at
         tipas: timestamp
         formatas: Ymd H: i: s
       Atnaujinta:
         neįgaliesiems: tiesa
   skiltys:
     numeris:
       Tipas: integer
       pirminis: tiesa
       autoincrement: tiesa
     pavadinimas: string (255)
     elektroninio pašto adresas: string (300)
     pranešimas: string (2000)

PHP Design Patterns - stebėtojų planas

Iki Steven Lloyd Watkin , antradienis 29 gruodis 2009 22:02

Aš svarstymo Head First Design Patterns neseniai ir nusprendė parašyti keletą iš šablonų, PHP pavyzdžių savo naudai. Pirmasis, kad aš nusprendė kodas padidinimas stebimųjų planas . Oficialaus apibrėžimas stebėtojų Planas yra toks:

Stebėtojas modelis (asinchroninis pogrupyje skelbia / užsiprenumeruoti modelis ) yra programinės įrangos projektavimo modelis , kai objektas , vadinamas objektas, teigia stebėtojai, sąrašą savo išlaikytiniams, vadinama, ir praneša apie juos automatiškai bet būsena pasikeičia, dažniausiai telefonu vienas iš jų metodai . Jis daugiausia naudojamas įgyvendinti paskirstyta renginys tvarkymo sistemas.

Kaip sistemos tampa silpnai susijusios įsitikinti, kad kai įvykis atsitinka visų sistemų, kurios reikalauja žinių apie šiuos atnaujinimus yra informuojami. Pavyzdžiui, tinklaraščio įrašą, po taupymo paštu mums gali reikėti atnaujinti paieškos (pvz. Lucene), atnaujinti mūsų Sitemap, žymių, el pasirašytojo vartotojams ir pan stebėtojas modelis leidžia kūrėjams pridėti papildomų klausytojų be redagavimo jų stebimus objektą . Įpurškiant stebėtojai (ty paieškos atnaujinti stebėtojas, Sitemap Generator ir tt) į temą (ty dienoraštyje redagavimo sistema), mes galime leisti jai atlikti visus būtinus atnaujinimus be jokių pakeitimų.

Tęsti svarstymą "PHP Design Patterns - stebėtojų struktūra" »

Biuro Tinklelis Kompiuterija naudojant virtualių aplinkų - 4 dalis

Iki Steven Lloyd Watkin , penktadienis gruodis 4, 2009 11:59

Įvadas

Aš dirbu bendrovėje, kurioje mes paleisti daug partijos darbo vietų perdirbimo milijonus įrašų duomenų kiekvieną dieną ir aš galvoju neseniai apie visas mašinas, kurios sėdi aplink kiekvieną dieną nieko nedaryti dėl kelių valandų. Ar ne ji gera, jei mes galime naudoti šiuos mechanizmus stiprinti apdorojimo galia mūsų sistemos? Šiuo dirbiniai rinkinys I'm going pažvelgti į galimą naudą įdarbinimo biuro tinklo , naudojant virtualised aplinkoje.

Be 3 dalyje mes sukūrėme mūsų virtualios apdorojimo mašinos ir sukonfigūruoti "Windows mašinomis tapti prastovos darbo dieną dirbantys darbuotojai.

Veikia naujausias kodas

Neišvengiamai sukūrusi savo darbuotojams verslo logika keičiasi, klaidų bus rasta, greičiau efektyviau kodas bus pagaminta taip palikdamas savo darbuotojų Šeštadienis apie duomenų tvarkymo naudojant senas smirdantis kodas . Kaip tada mes siekiame, kad mes visada naudoti naujausias ir geriausias variantas mūsų perdirbimo scenarijus?

Yra keletas labai lengva paprastų būdų mes galime tai padaryti, triukas, tačiau yra sumažinti duomenų apdorojimo galia ir tinklo eismo šiam tikslui pasiekti. Pradėkime sprendimų paprasčiausias ir ją gerinti lėtai per iteracijų pora.

Pirmasis metodas būtų tiesiog prisijungti prie mūsų darbo kontrolė serverio (per Samba, FTP ar panašios) ir išgriauti naujausią kodą. Dar labai efektyvus, bet tai bus padaryti darbą. Leidžia pagerinti, kad šiek tiek, kaip apie kūrimo rsync scenarijų ir naudojantis, kad kiekvieną kartą vietoj? Arba ką apie išleidimą mūsų naujausius perdirbimo scenarijų į subversion išsiregistruoju kodas iš pradžių ir paskui tiesiog atnaujiname mūsų kodą į kiekvieną paleisti ( svn update )?

Galų gale mes galime baigti su bash scenarijų (vadinamas cron kas 10 minučių), kuris atrodo taip paprasta, kaip šis:

  #! / Bin / sh
 jei ps ax | grep-v grep | grep php > / dev / null
 tada
     echo "Darbo šiuo metu perdirbimui, išplaukimas"
 kitas
     echo "Darbas nėra paleista, pradėk dabar"
     cd / kelias / iki / darbo / kopija
     svn update
     Php yourJobProcessingScript.php
 Bevielis 

Dabar mes galime būti tikri, kad su kiekviena paleisti mes tikrai naudojate naujausią kodą. Mes užtikrinti šio atnaujiname mūsų kodo bazė kiekvieną kartą mes atliekame paleisti ir mažinti tinklo srautą tik perkelti failą skirtumus mūsų tinklą.

Mano demonstravimo įdiegimo, aš tiksliai taip, kaip pirmiau išdėstyta. Subversion buvo įdiegtas mano darbas tvarkymo serverio ir aš tiesiog iškedentas vėliau kodą iš "darbuotojas" filialas naudojant "svn update '. Aš taip pat pridūrė versijos numeris tegus mano apdorojimo scenarijų, kuris buvo grąžintas į duomenų bazę kaip dalis rezultatų puses. Tokiu būdu aš galėsiu pamatyti, kad mano kodas buvo atnaujinamas kiekvieną kartą aš kopijuoti savo kamieno į darbuotojo filialas ty, kad aš tikrai buvo įdiegta naujausia tvarkymo scenarijų.

Naudojant naujausias duomenys

Jei jūsų darbas apdorojimo pasinaudoja duomenų šaltiniais tada tam tikru momentu jie bus atnaujinti per. Nebent paskambinsite jūsų duomenų šaltinių poveikį labai retai pagrindas jūs ketinate potvynių savo tinklą su eismo kaip tik jūsų darbuotojai pradeda veikti pareikšti viskas sustojo. Nes mano sprendimas, aš nusprendžiau, kad aš norėčiau perkelti savo duomenų šaltiniai aplink su mano TPG.

Laikykite esate arklių čia! Ką daryti, jei mano duomenų šaltinių yra didžiulė? Na tai tikrai yra kalbėti atveju, kiek duomenų mes esame? Ji gali būti labiau rentabilios įdiegti papildomų didesnių kietojo disko į kiekvieną mašiną kaip pirkti papildomo apdorojimo serverį. Tai biudžeto klausimą ir iki verslo nuspręsti. Tai gal, kad jūsų duomenų šaltinių yra tiek daug, kad jos tiesiog neįmanoma išlaikyti, kad mašinos duomenų kiekį jūsų darbuotojas. Tokiu atveju, ką jūs darytumėte? Na mes galėtume pažvelgti raginama vietos duomenų serverį, bet tai gali sukelti problemų su tinklu. Šiuo atveju tinklo sistemos, pavyzdžiui, tai gali tapti nerealus įtraukti į savo biuro aplinkoje. Ji taip pat gali būti, kad jūs galite žiūrėti į alternatyvios veiklos strategijas, pavyzdžiui, tik paskambinę darbuotojai 20:00-06:00 kiekvieną naktį ir / arba pristabdyta duomenų šaltinio užklausas.

Permainos tarkim mūsų duomenų šaltinių suma 100GB duomenų. Na taip, kad gana duomenų judėti tinklo atnaujinimas bitų. Kaip galime užtikrinti, kad mes turime naujausius duomenų kopija šiuo atveju? Rsync yra galimybė, bet asmeniškai aš manau, vykdydami savo naujausią duomenų šaltinis apie savo darbą tvarkymo serverio ir nustatyti šios operacijos kaip į replikacijos kapitonas (su gražus ilgas bin log), gali būti išeitis:

Replikacija Nustatant kiekvieną iš jūsų darbuotojams iki kaip vergas darbo kontrolė serverio atnaujinimus į jūsų duomenų šaltiniai nuvarvėti gražiai savo darbuotojus be daug daugiau tinklo veikla (tai yra, nebent jums atlikti didelių duomenų atnaujinimas ir visi jūsų darbuotojai Mirti bent vieną kartą). Tai turi privalumų palyginti rsync, kad turite negaus ilgos pertraukos prieš kiekvieną darbą, taip duomenų bazės atnaujinimo, mysql demoną jūsų darbuotojas nuolat atnaujinti savo duomenis, o perdirbimo ir toliau.

Tai kaip man sukurti savo demonstravimo serveryje. Norėdami sukurti replikacijos aš po (vadovas mySQL svetainę steigimas replikacija ) ir per 20 minučių Aš turėjau mano inital darbuotojas atkartojantis darbo kontrolė serverių duomenų rinkinį. Už kiekvieną papildomą darbuotoją replikacijos parametrus ir procesas dirbo kiekvieną kartą, kai V. buvo nukopijuotas.

Santrauka

Šiame straipsnyje skyriuje mes žiūrime, kaip lengvai ir neskausmingai tai, kad jūsų duomenų apdorojimo kodą atnaujina using rsync ar subverion (SVN) atlikti darbą ir sumažinti eismą tinkle tuo pačiu time. Mes taip pat aptarė, kaip išlaikyti jūsų duomenų šaltinio informacija up-to-data įgalinant ją nuvarvėti į kiekvieną savo darbuotojams. Taigi mes sritis užtikrinti, kad mes nuolat su verslo logika ir informaciją mūsų biure energetinę sistemą. Yra be abejo, bus daugybė alternatyvų atlikti šias užduotis, bet čia buvo du paprasti pavyzdžiai parodo, kaip lengvai tirpalas yra pasiekti.

Kitas laikas

Į paskutinę dalį šios serijos, taikliai pavadinta 5 dalis , mes aptarsime diegti šią sistemą. I'll apibendrinti tai, kas buvo išmoko ir ką sugebėjo sukurti.

Biuro Tinklelis Kompiuterija naudojant virtualių aplinkų - 3 dalis

Iki Steven Lloyd Watkin , penktadienis gruodis 4, 2009 23:37

Įvadas

Aš dirbu bendrovėje, kurioje mes paleisti daug partijos darbo vietų perdirbimo milijonus įrašų duomenų kiekvieną dieną ir aš galvoju neseniai apie visas mašinas, kurios sėdi aplink kiekvieną dieną nieko nedaryti dėl kelių valandų. Ar ne ji gera, jei mes galime naudoti šiuos mechanizmus stiprinti apdorojimo galia mūsų sistemos? Šiuo dirbiniai rinkinys I'm going pažvelgti į galimą naudą įdarbinimo biuro tinklo , naudojant virtualised aplinkoje.

Be 2 dalyje mes pažvelgė į darbo vietų serveris veiks, ir kaip darbo vietų turėtų būti sukonfigūruota, kad būtų pasiekti didžiausią sumą apdorojimo, užtikrinant, kad kiekvienas darbas yra tvarkomi be nepavyks.

Įsteigti savo darbuotojui - ar Limp serveris

Kitas žingsnis yra sukurti jūsų virtualaus darbuotojams. Dėl šios I'm going naudoti CentOS naudojant VirtualBox diegimo. I'm going to įdiegti MySQL ir PHP serveryje, taip pat žinomas kaip "Limp (Li Nux m ySQL P AG) Servera (aš gali turėti nustatyta, kad pavadinimą iki).

  • Įdiekite VirtualBox jūsų Windows mašina (sekite nuoroda)
  • Atsisiųsti ir įdiegti Centos (dabartinė versija 5.3) per sukurtos virtualios mašinos

Nėra jokios prasmės mane ketinate šį ten tikriausiai 1000 's puikus samouczków ten (ok, čia vienas: kūrimas ir Managing CentOS virtualios mašinos pagal virtualbox ). Svarbu pažymėti, manau, yra tai, kad Aš pakvietė Mano virtuali mašina GridMachine.

Kalbant apie mano pasirinkimus Virtualizacija kliento ir operacinės sistemos, ten nėra didelis įtikinamų priežasčių, dėl kiekvieno pasirinkimo. VirtualBox yra tai, ką aš naudoti mano namų mašina ir palaiko tris pagrindinius operacinės sistemos. Aš pasirinkau CentOS kaip savo gerą stabilią OS ir aš naudoju jį savo interneto serveryje. Aš esu didelis šalininkas tinkamus įrankius darbui (nors aš Taikant "naudok greičiausias ir lengviausias jums" mentalitetas čia), tad jei operacinės sistemos X paleidžia kodą greičiau ir efektyviau naudoti, kad vietoj:)

Svarbu įsitikinti, kad jūsų VM naudoja DHCP, kitaip kiekvienos naujos virtualios mašinos turės būti sukonfigūruotas atskirai kuri yra kažkas mes neturime want.By naudojant DHCP mums nereikia konfigūruoti tinklo nustatymus atskirai darbuotojas mašinos, DHCP bus ranka iš IP už jus. Todėl jūs galite kopijuoti savo virtualios mašinos apie biuro nesirūpindami nustatymas kiekvienam viršų (tai pagerina lankstumą ir sumažina darbuotojo administracija).

Procesą reikia siekti, kad būtų gauti naują fizinės mašinos, įdiegti VirtualBox, ir tada gana daug dislokuoti virtualų įvaizdį, be daug daugiau. Jis gali būti protingas sukonfigūruoti visus savo darbuotojus iš kitos antrinis, kad galėtumėte bent pamatyti, kiek mašinos veikia. Jums taip pat reikės sukurti savo mašinų ilgalaikės nuomos arba neribotam nuomos DHCP.

Kaip paleisti Darbas darbuotojo

Tai įdomi sritis ir yra keletas svarbių metodų perdirbti darbo vietų darbuotojams. Čia aš tik aptarti du akivaizdžiausi:

  • Pastoviai veikia scenarijų: scenarijų, ar tai būtų apvalkalo scenarijus, arba PHP scenarijų yra vykdomas vieną kartą, kai darbuotojas ir veikia kaip begalinis ciklas. Aš diskontuotų šį metodą kaip vieną iš avarijos scenarijų ir potencialiai jūsų darbuotojai nustos veikti be kai intervencinė rūšiuoti.
  • Cron pagrįstas skripto vykdymo: kas x minučių cron tarnybos, prasideda paskambinti į jūsų scenarijų gauti dalykų vyksta. Be kai kurių tikrinimą tai gali lemti daug daug kopijas jūsų darbuotojas scenarijų rodyti.

Mano sprendimas buvo eiti su cron kuri prasideda shell skripto kas 10 minutes. Mano apvalkalo scenarijus atlieka šias užduotis:

  1. Paimti procesas sąrašas ir grep šį "php". Jei nerastas tada tęsti.
  2. Paskambinkite savo darbą kodas, mano atveju tai būtų kažkas PHP pagrįstas
  3. Darbuotojų scenarijų baigia paleisti
  4. Parengta einu vėl į kitą reikia paskambinti

Mano bash scenarijų atrodo maždaug taip:

  #! / Bin / sh
 jei ps ax | grep-v grep | grep php> / dev / null
 tada
     echo "Darbo šiuo metu perdirbimui, išplaukimas"
 kitas
     echo "Darbas nėra paleista, pradėk dabar"
     Php yourJobProcessingScript.php
 Bevielis 

Pastaba: ECHO yra beveik visiškai beprasmis, bet gali padėti kitam asmeniui, kuris ateina kartu pabandyti ir juos redaguoti.

Ši išvada įsteigti darbuotojo virtuali mašina, greitai, paprasta ir lengvai nukopijuoti į kiekvieną naują Aparatinė kad yra gautas. "Protingumas" iš tinklo sistemos tikrai nėra matomos OS, jos visos daryti su kodu sukurta proceso darbo vietų, darbo vietų konfigūraciją, ir užtikrinti, kad darbo laikui, kai reikia (ty kai kompiuteris nenaudojamas ).

Įsteigti Windows Initialise darbuotojų

Pirmoji užduotis yra parengti komandą reikia paleisti virtualios mašinos iš langų komandų eilutę. Jei įdiegėte VirtualBox į numatytąją vietą ir jūs pavadino savo darbuotojui GridMachine tuomet komanda reikia įkelti savo darbuotojas:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Tačiau paleisti iš "begalvis" valstybės mes turime naudoti scenarijų:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Tai paleisti virtualios mašinos be GUI ir kad ji galėtų išgelbėti valstybės grakščiai. Antrasis argumentas išsijungia KPP, todėl ji nėra konflikto su langais KPP, ar suteikti jums 3389 pranešimą apie klausymas dėl uosto. Virtualioji mašina vardas raidžių!

Toliau, mums reikės nustatyti Windows iki nusimesti mūsų darbuotojas V. kartą mašina buvo nenaudojamas. Norėdami tai padaryti (Windows XP) jums reikia eiti Start -> All Programs -> Accessories -> System Tools -> suplanuotų užduočių, kaip nurodyta toliau:

planinių užduočių

Kitas spustelėkite "Pridėti numatytas užduotis", po naršyti pridėti pasirinktinių programą. Vykti į jūsų VBoxManage scenarijus ir spustelėkite Gerai. Planuokite savo užduotis bet iš variantų (mes pakeisti šią minutę) ir tęsti. Po praleidimo kitame ekrane langai bus paprašyti jūsų, kurie norite paleisti šią užduotį, Norėčiau pasiūlyti arba "Administratorius" arba sukurti naują vartotojo teisėmis. Prisiminti mes nenorime kištis į standartines darbuotojų sąskaita mašina bet kurioje vietoje. Spustelėkite šalia ir patikrinimo rezultatai rodo, naujos galimybės atlikti šią užduotį.

Norėdami unticked pabaigoje paleisti laukelį įtraukti mūsų "startvm GridMachine" eilutę ir užtikrinti, kad paleisti tik tada, kai prisijungęs liko. Aplankykite tvarkaraštį užduotis šalia ir keisti tvarkaraštį nukristi iki parinktį "kai nenaudojamas", pasirinkite, kiek laiko norite, kad mašina turi būti nenaudojamas prieš pereinant į kitą skirtuką.

Galiausiai untick variantas, kuriame teigiama, sustabdyti užduotį, jei ji jau veikia X laiko, tačiau pažymėkite parinktį sustabdyti užduotį, jei mašina nėra nenaudojamas.

tvarkaraštis

Štai ir viskas tada ant langų priimančiosios nustatymus!

Santrauka

Šioje dalyje mes sukūrėme virtualią mašiną veikti kaip darbuotojas, taip pat būdui, kuriuo mes vadiname ir vykdyti mūsų darbą tvarkymo scenarijus (už save PHP skripto). Iš čia pažvelgsime, kaip įsteigti savo kopijas Windows pradėti Virtuali mašina begalvis režimą, kai kompiuteris tampa nenaudojamas, ir išsaugoti savo valstybę, kai vartotojas vėl naudojimo mašina. Tikimės, kad šiuo metu jūs matote, kaip paprasta yra sukurti tokią sistemą ir yra niežulys gauti kai eksperimentai vyksta patys!

Kitas laikas

Be 4 dalyje mes nagrinėsime, naudojant priemones, siekiant užtikrinti, kad jūs naudojate naujausią programos versiją kodo ir duomenų šaltinių, kad gauti rezultatai yra visada up-to-date su naujausia verslo informacija ir logika.

Biuro Tinklelis Kompiuterija naudojant virtualių aplinkų - 1 dalis

Iki Steven Lloyd Watkin , penktadienis gruodis 4, 2009 11:23

Įvadas

Aš dirbu bendrovėje, kurioje mes paleisti daug partijos darbo vietų perdirbimo milijonus įrašų duomenų kiekvieną dieną ir aš galvoju neseniai apie visas mašinas, kurios sėdi aplink kiekvieną dieną nieko nedaryti dėl kelių valandų. Ar ne ji gera, jei mes galime naudoti šiuos mechanizmus stiprinti apdorojimo galia mūsų sistemos? Šiuo dirbiniai rinkinys I'm going pažvelgti į galimą naudą įdarbinimo biuro tinklo , naudojant virtualised aplinkoje.

Kaip PHP programuotojas I'm going naudoti įrankius, kad aš naudoju kiekvieną dieną būtent, Linux, MySQL , PHP, VirtualBox ir Subversion (SVN). Tačiau tikiuosi, kad šis vadovas padės pritaikyti į kitas kalbas ir technologijas taip pat gerai.

I tirpalas teikti bus labai silpnai pagrįstas tvarkymo we'd reikia pasiekti Tačiau tai negali būti tiesa per visą straipsnį, nes aš ką nors keisti paprastumo, arba gaminti daugiau įdomių naudojimo scenarijus tipas.

Šie virtualised aplinkoje veiks Windows mašinos, nes tai, ką biurų dauguma paleisti. Apdorojimo, biuro technikos padaryti, neturėtų trukdyti darbuotojams, kurie naudoja šias mašinas, turėtų būti reikalaujama jokio techninę priežiūrą ir turi būti lengvai dislokuojamos į naujas mašinas, nes jie tampa prieinami. Be to, naujos virtualios mašinos neturėtų reikalauti jokios papildomos konfigūracijos, nes tai labai sumažina lankstumą ir paprastumą, už kurią tinklo sistemos gali būti pratęstas.

Kodėl diegti "Office Kompiuterija Tinklelis?

Pirmiausia jums gali būti mąstymo, kodėl gi ne tiesiog naudokite Debesis kompiuterija išteklių, pavyzdžiui, "Amazon EC2 platforma ? Na priežasčių gali būti keletas, pavyzdžiui:

  • Jūs negalite patikėti tam tikras duomenų Debesis kompiuterija aplinka
  • Jūs negalite įdėti tam tikrų duomenų į Debesis kompiuterija aplinkai dėl teisinių priežasčių (pvz., duomenų išvažiuojant iš šalies), tikriausiai dėl teisinių priežasčių, pavyzdžiui, NHS, įrašus.
  • Jūs norite, kad jūsų procesoriaus įtaisų uždaryti ir visiškai kontroliuoti aparatūros pernelyg
  • Jūs neturite projekto lėšų paleisti debesis atvejais
  • Jūsų įstaiga neturi prisijungimo prie interneto, ir todėl jos negalima naudoti debesis išteklių
  • Jums nepatinka lietus, debesys rodo lietų, todėl jums nuolat gerai toli

Aš tikiu, kad šis sąrašas galėtų būti tęsiamas, tačiau manau, kad pakankamai dabar.

Privalumai biuras Kompiuterija Tinklelis

Na, leidžia daryti kai matematikos (ir tiesa fizikos stilius leidžia padaryti keletą valymo prielaidos). Įsivaizduokite, turite dideli jautienos perdirbimo serveryje, kuriame veikia 100 vietų per dieną. Iš savo biuro turite 50 mašinų, kurios yra nenaudojamas 16 valandas per parą, kiekvieną iš šių mašinų yra 10%, kaip galingas kaip jūsų raumeningas perdirbimo nutraukti. (Visi rezultatai čia yra suapvalinami iki neįvertina veiklos padidėjimas).

Taigi, 1 vnt * 10% galia * 2 / 3 metu = 0,067 ty 1 darbastalio tvarkymo pravaikštos laiką galėtų apdoroti 6 visiškai užduotis per dieną.

Jei dabar masto tai iki jis trunka 15 tuščiosios eigos Staliniai tvarkyti kuo daugiau darbo vietų per dieną, kaip jūsų pagrindinė perdirbimo serveris.

Taigi mūsų apsimesti įstaiga 50 mašinų galėtume padidinti mūsų duomenų apdorojimo galia nuo 1 serveryje iki 4 visiškai perdirbti serveriai, ar mes galime būti perdirbti 400 darbo vietų per dieną, o ne 100.

Notice, for no investment in new hardware your company has just increased its batch processing capacity 4 times ! Potentially you're going to increase your power usage but from most office environments I've been to machines are generally left on overnight anyway, so you could see this as a green initiative.

Other advantages also mean that investment in new (or updated) processing servers can be delayed if your office machines are sufficient and that as you improve the power of your office machines your office grid becomes more powerful automatically.

Technologies

Kas jums reikia? (or more correctly what did I use):

  • Idle office machines (in my case a spare old windows XP laptop)
  • VirtualBox (or another virtualisation client software)
  • A virtual machine with PHP, mySQL running running a cut down OS, I'm calling these my LiMP servers :)
  • Jobs to run
  • Job server (can be another virtual machine somewhere)

Typical Jobs

The types of jobs that this system is designed to run is as follows:

  • System receives a list of data upon which we need to match and return results
  • Matching involves checking/searching several (fairly static) data sources
  • Results from data sources may require further validation, merging, checking of additional data sources in response to results
  • Data is returned with matching records, fully validated and processed
  • Each record within a job is independent of the rest

So basically we're looking at running jobs which require a mixture of database lookups and some number crunching, a fairly typical scenario in a business environment.

Grid solutions are not only advantageous for processing jobs of this type. Basically, any process which can be split into independent units can be run in parallel. See this wikipedia for examples and more information: Grid Computing , but a couple of famous examples are Seti@Home and BIONC . There are frameworks for running computing grids, and these are well worth looking into.

What will we achieve?

By the end of these articles I hope to show that deploying an office grid need not be hugely expensive or time consuming. I'm going to discuss:

  • Setting up the job control system, job configuration
  • Creating an appropriate processing virtual machine
  • How to setup the system on a windows machine
  • Ensuring you are using the latest code and data
  • Deployment and benchmarking
  • Žvilgsnis į ateitį

I'll be building (ok I built, then wrote this) an example application to test the concepts on a local machine using windows XP and my 'GridMachine' virtual machine. My job control server will be my main machine which runs Fedora 11 .

This is in no way meant to demonstrate a fully working robust system, its meant more of a demonstration and discussing showing that these things can be achieved in a reasonably short space of time and at little cost. Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.

Next time

In part 2 I will start by looking at the job control system, and look into how jobs should be configured in order to achieve greatest amount of processing whilst ensuring that each job is processed without fail.

Biuro Tinklelis Kompiuterija naudojant virtualių aplinkų - 2 dalis

Iki Steven Lloyd Watkin , penktadienis gruodis 4, 2009 11:23

Įvadas

Aš dirbu bendrovėje, kurioje mes paleisti daug partijos darbo vietų perdirbimo milijonus įrašų duomenų kiekvieną dieną ir aš galvoju neseniai apie visas mašinas, kurios sėdi aplink kiekvieną dieną nieko nedaryti dėl kelių valandų. Ar ne ji gera, jei mes galime naudoti šiuos mechanizmus stiprinti apdorojimo galia mūsų sistemos? Šiuo dirbiniai rinkinys I'm going pažvelgti į galimą naudą įdarbinimo biuro tinklo , naudojant virtualised aplinkoje.

Be 1 dalyje daviau tinklelį sistemos ir technologijos I bus naudojamas taip pat aptarė kai kuriuos iš galimų priežasčių, kodėl Jūs norėtumėte sukurti biurą.

Darbo kontrolės

Jei ketinate būti paleistas darbo vietų po to, you're going to reikia tam tikru būdu juos valdyti. Jūsų darbas kontrolės sistema (į savo darbo serveryje) reikia labai gerai apgalvoti dar prieš bandant paleisti biuro tinklo. Taigi pirma, kas yra už darbo kontrolės sistemos uždaviniai:

  • Išdalinkite darbo vietų prašymu darbuotojų
  • Praneškite darbuotojų kokio tipo darbo vietų paleisti
  • Sekti vietų
  • Užtikrinti, kad darbo vietų yra tik paleisti kartą
  • Pateikite darbo duomenų darbuotojams, arba bent pasakykite jiems, kur gauti ji

Sistema taip pat turi būti galima pratęsti, tirpalas, kuris tinka dabar vienu atveju gali būti pratęstas skaičiuoti kelių tipų darbo vietų, kaip verslo mato verta tinklelį tirpalo. Pavyzdžiui, darbo vietų gali gauti prioritetus, daugiau kaip vieną darbą tipas gali būti (ty keli kodas bazes), galų gale jūs net gali paleisti keletą skirtingų darbuotojas mašinos, yra optimizuotas kiekvienai darbo tipas (nors tai nėra tolti nuo "bendro darbuotojas "idėja). Visada stenkitės galvoti apie ateitį, kai sistemų kūrimo, trumpalaikių vizija gali sukelti ilgalaikius nusivylimas ir padidėjo vystymosi metu.

Darbo Serveris

Mes ketiname reikia kažkur kontroliuoti mūsų darbo vietas, tai turėtų būti tik sistemai savo tinklelį kad turi fiksuotą Resource Locator, būti, kad IP adresą, kompiuterio vardą, adresą (naudojant vidinio DNS) ir tt Taip yra todėl, darbuotojai turi žinoti, kur ieškoti darbo, darbuotojams reikia susirasti darbą kontrolės sistemos (ne darbo kontrolės sistema surasti darbuotojų).

Darbas serveris pats tikrai ne sudėtingas uždavinys (pagrindiniame sistema Kažkaip), reikia laikyti darbo vietų sąrašą, ranką darbo vietas, gauti rezultatus, o vėliau juos laikyti, kad vėliau. Kaip šių dalių (pavyzdžiui, "ranką darbo vietų) yra apibrėžtos, gali būti labai paprastas. Vėliau mes galime išplėsti sistemą įtraukiant administravimo sąsaja pridėti, redaguoti, trinti, sustabdyti darbus, bet tai nesusiję su šios užduoties.

Nėra jokio pagrindo tada, kad jūsų darbas serveris negalėjo būti virtualios mašinos veikia per savo pagrindinę tvarkymo serveryje, jeigu ji neišteka per daug išteklių iš jo. Darbo serverio Tačiau tai reikia didelio prieinamumo, jei jis krinta ant penktadienio vakaro jūs ketinate prarasti visą savaitgalį perdirbimo, potencialiai jums kainuos savaičių verta perdirbimo metu pora (lyginant su jūsų pagrindinė perdirbimo serverio tik) . Jei norite, galite apsvarstyti galimybę savo darbo serveryje apkrova subalansuotą aplinką didelio prieinamumo.

Pagrindinis nustatymas

Pagrindinis įdiegimo mūsų darbo serverio sudarys ką I'm calling vienas iš mano Limp serverių (tai yra Li Nux m ySql P AG). Kodas veikia Thea darbuotojams bus faktiškai dirba, kas darbo vietų ji gali veikti sąveikaudama su su darbo kontrolės sistemos duomenų bazes. Vėliau mes galime sukurti interneto paslaugų ir faktiškai ranką darbo vietų, o ne darbuotojų padaryti sunkų darbą sau, bet dabar mes ir toliau naudoti KISS principas (keep it simple, stupid!).

Taigi, leidžia sukurti tris mySQL lentelių spręsti darbo vietų. Tai bus "darbo", "jobRecords", ir "jobResults".

darbo stalo Čia aš naudoju SQL Buddy labai mažai alternatyva phpMyAdmin tik todėl, kad jos lengviau įdiegti Centos (kitiems žiūrėkite: 10 Didžiosios alternatyvų phpMyAdmin )

Ši lentelė sudaryta iš 5 paprasti srityse,

  • numeris: identifikuoti darbo
  • pavadinimas: Ar galima klientas nuoroda, ar identifikatorius skaičių kitų
  • Statusas: Jūs turite žinoti, kur darbas yra, pavyzdžiui,
    • 0: Nepradėta
    • 1: įlaipinami
    • 2: Baigta
  • started_by: Kas pradėjo daryti darbą? Tai nėra visiškai būtini, tačiau yra malonu turėti. Norėčiau pasiūlyti stebėjimo darbuotojų savo IP adresą jūsų tinklo
  • started_at: Kada darbuotojas pradeda dirbti? Stebėdami darbo vietų, kurios dar nėra baigti per X laiką mes žinome, mes turime pasiimti darbą dar kartą ir pradėkite tvarkyti kito darbuotojo. Darbuotojų galėtų sustabdyti tvarkymo / atsijungti bet dėl ​​daugelio priežasčių, nutrūkus energijos tiekimui, avarijos, tinklo nuostolių, ir tt

Tai lengva, kaip ši lentelė gali būti pratęstas su keletu papildomų laukų, kad būtų galima statistikos sekimo, apdaila laiko stulpelį pamatysite, kiek laiko darbo ėmėsi, skaitliukas pamatyti, kiek darbuotojų pakėlė darbas (žinoma, tai turi tendenciją 1), darbo prioritetas, sąrašas gali tęstis ir toliau. Sudėtingesnių darbo scenarijų būtų galima nurodyti, kiek atminties darbuotojas turės prieigą (ir todėl naudokite tik tinkamus darbuotojus), ar net kokio tipo darbuotojas būtų reikalaujama.

Leidžia pridėti keletą pavyzdžiui darbo vietų:

Pavyzdžiui darbo vietų

Tolesnėje lentelėje vėl yra gana paprasta suprasti, tai yra mūsų darbo įrašus. Jie yra susiję su pagrindinių darbo vietų lentelės skiltyje "jobs_id". Sudaro šios lentelės labai daug priklauso nuo duomenų, kad jums reikia pateikti savo darbuotojų, leidžia padaryti labai paprastą pavyzdį, kur mes keturios skiltys:

  • numeris: ID įrašo
  • pavadinimas: asmens vardas
  • adresas: Asmuo adresas
  • jobs_id: darbas ID, kad šis įrašas yra susijęs su

Trečioji ir galutinė lentelė susideda iš rezultatų lentelės, ji panašiai sudaryti iki mūsų įrašus lentelėje ir su kai kurių stulpelių to galėtų būti dalis įrašai lentelėje:

  • job_record_id: Nuoroda rezultatas darbo stalo
  • rezultatas: rezultatas duomenys

... Ir tai viskas, ko jums reikia darbo kontrolė! (Nors labai bazinio lygio) Mano atveju aš atkreipė dėmesį į kitoje lentelėje, kur mano duomenų apdorojimui buvo įsikūrusi, tačiau tai gali taip pat lengvai buvo failą, parametrų paleisti modeliavimas kodas, you name it.

Pasirinkus darbą

Kaip nurodyta anksčiau, darbuotojai atliks savo darbą valdymo mumis dabar, todėl visi turime tikrai yra susirasti darbą, kurį reikia perdirbti ir gauti informaciją. Kaip mes tai darome? Na pasiimti mūsų darbas atrankos kriterijus ir ieškotis darbo, SQL aš taip:

  1. Imtis bet kokių darbų, kurie nėra pažymėti kaip išsamūs, bet iš mūsų darbuotojas ir iš naujo jas (pakaitalas __ME__ su identifikatoriumi, lengviausia būtų IP adresas):
      UPDATE `darbo` SET `status` = 0 ", jei" statusas "= 1 IR" started_by `= __ME__; 
  2. Naudojant mūsų darbas atrankos kriterijus, pasirinkite darbo ir pasakyti kontrolės sistemą, kad šis darbuotojas yra susijusios su IT:
      UPDATE `darbo` SET `status` = 1, "started_by` = __ME__, "started_at` = NOW () WHERE `status` = 0 arba
     (`Status` = 1 IR "started_at"> DATE_SUB (NOW (), intervalas X VALANDĄ)) ORDER BY `id` ASC; 

    Iki greiferiniai darbo vietų, kurios davė rezultatus "X laiko mes užtikriname, kad visos darbo vietos būtų paleisti į darbuotojo kritimo ar ketinate AWOL atveju.

  3. Kitas patraukti vietų detales po įrašo save:
     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:

  1. 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.
  2. 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).
  • If a job doesn't complete in double the amount of time (maybe less) you expect it to complete it assume that its gone AWOL and start processing it with another worker. This means you may have to wait up to three times the normal length of a job for it to complete (possibly longer if the subsequent job fails). You may want to reduce this time, but be careful not to reduce it too much as you may start duplicating processing tasks on a regular basis.
  • Jobs should be independent of outside requirements as much as possible. The job server, for example, should only be contacted at the start and end of every job.
  • Don't saturate your network, this will have two negative effects, your daytime staff will find using the network frustrating and problems may be experienced with connections timing out a problem that will only get worse as you scale your grid.
  • Ensure jobs can run on your workers. If jobs become too memory intensive or disk space intensive jobs will start aborting and the only thing you'll notice is a drop in number of jobs processed with no real reason why.

Submitting Results of a Job

When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.

When results are submitted ensure that the number of results matches the number of records within the job.

As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.

Santrauka

In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.

  • A job control server manages jobs and ensures that all work units are completed
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

Next time

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

Biuro Tinklelis Kompiuterija naudojant virtualių aplinkų - 5 dalis

Iki Steven Lloyd Watkin , penktadienis gruodis 4, 2009 11:03

Įvadas

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. Taigi,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Deployment

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Stop!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













"Panorama" tema, padarytais Themocracy

8 svečiai dabar
3 guests, 5 bots, 0 members
Max visitors today: 12 at 06:16 am UTC
Šį mėnesį: 22 j., 2011/08/06 12:30 UTC
Šiais metais: 130 metu 28-03-2011 22:40 UTC
Visas laikas: 130 metu 28-03-2011 10:40 UTC