Adauga dinamic de pagini la container Zend_Navigation la runtime

Prin Watkin Lloyd Steven , joi 07 ianuarie 2010 22:50

Într-o continuare pe ultimul meu post despre Zend_Navigation, cereri Route pentru sitemap.xml la controlor personalizate / acţiune , acest post este despre adăugarea dymnamically pagini într-un container Zend_Navigation la script-ul de executie / runtime.

Acesteia, toate bine şi bună specificând paginile dvs. într-o ini sau XML dosar, dar la un moment dat ai de gând să aibă pagini de schimbare în site-ul dvs. pe care doriţi ca parte a unui meniu, sitemap, sau pentru a fi incluse în breadcrumb traseu dumneavoastră. Prin urmare, ceea ce trebuie să facem este să adăugaţi pagini la container Zend_Navigation nostru la runtime. Exemple pentru acest lucru ar fi în adăugarea de ştiri, blog, sau pagina de comentarii, etc

Continuaţi lectură "adăuga dinamic pagini la container Zend_Navigation la runtime" »

Route cereri pentru sitemap.xml la controlor personalizate / acţiune

Prin Watkin Lloyd Steven , miercuri, 06 ianuarie 2010 12:13

În scopul de a cereri directe de / sitemap.xml la un controler de personalizat şi de acţiune în dumneavoastră Zend Framework aplicarea pur şi simplu adăugaţi următoarele în application.ini dumneavoastră sau alternative fişier de configurare (de exemplu, am folosi navigation.ini):

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

Exemplu codul pentru scoate pot fi văzute prin crearea unei acţiuni în controller adecvat (de exemplu, Sitemap-ul meu se află în controller index, sitemap acţiune):

 < php
 clasa IndexController
     extinde Zend_Controller_Action
 {
     / **
      * Renders un Sitemap pe baza Zend_Navigation configurare
      * /
     sitemapAction funcţia publică ()
     {
    	 echo $ acest navigare-> view-> () -> sitemap ();
    	 $ Acest aspect-> view-> () -> disableLayout ();
    	 $ Acest setNoRender-> _helper-> viewRenderer-> (true);
     }
 }

Sitemap-urile pot fi rapid şi uşor generate folosind Zend_Navigation , un mare tutorial rapid (şi, în general, foarte util pentru Zend tutoriale-cadru) este Zend Distributie - crearea dinamic un meniu un Sitemap şi pesmetul .

Zend Framework Per-Modulul setările de bază

Prin Watkin Lloyd Steven , vineri o ianuarie 2010 22:40

Am creat o urmărire la acest post care necesită o configuraţie mai puţin, vă rugăm să consultaţi Modulul Bazat Aspect - Zend Framework .

Când utilizaţi Zend Framework cu module, este evident că, dacă rulaţi diferite (sub-) site-uri de pe aceeaşi cerere nu doriţi neapărat aceeaşi script aspect pentru fiecare parte. Am decis să merg cu structura site-ului următoarele:

  / Aplicarea
     / Controlere
         ...
     / Modele
     / Module
         / Default
             / Controlere
             / Layout
                 / Script-uri
             / Opinii
                 / Script-uri
         / AnotherModule
             ...
     / Script-uri

Problema a fost de înfiinţare a script-uri aspect pe o bază per-modul. Răspunsul a venit prin utilizarea unui Helper de acţiune. Configurarea machete pe o bază per-modul implică trei etape:

  1. Application.ini (sau setup configuraţie similară):
      admin.resources.layout.layoutPath APPLICATION_PATH = "/ module / admin / machete / script-uri"
     = APPLICATION_PATH default.resources.layout.layoutPath "/ module / default / machete / script-uri"
     = APPLICATION_PATH member.resources.layout.layoutPath "/ module / membru / machete / script-uri"
     = APPLICATION_PATH affiliate.resources.layout.layoutPath "/ module / afiliat / machete / script-uri" 
  2. Creaţi-vă de acţiune Helper:
      <? Php
     / **
      * Seteaza calea aspect pe o bază per-modul
      *
      * @ Autor Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Deoarece 2010-01-01
      * /
     clasa Pro_Controller_Action_Helper_SetLayoutPath
         extinde Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Seturi de cale layout bazat pe modul
          * /
         preDispatch funcţiei publice ()
         {
        	 Module = $ getRequest $ this-> () -> getModuleName ();
    
    	     if ($ bootstrap = getActionController $ this-> ()
    	                        -> GetInvokeArg ("bootstrap")) {
    
    	         $ Config = $ getOptions bootstrap-> ();
    
    	         if (isset ($ config ['aspectul'] [$ modul] ['resursele'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ modulul] ['layout'] ['resursele'] ['layoutPath'];
    	             getActionController $ this-> ()
    	                  -> GetHelper ("layout")
    	                  - SetLayoutPath> ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Boostrap şi în cele din urmă helper de acţiune:
      ...
         / **
          * Seturi de script-uri layout-te pe o bază per-modul
          * /
         _initLayoutHelper funcţia protejate ()
    	 {
    	     $ This-> bootstrap ("frontController ');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         noi Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doctrina: DATETIME default NOW ()

Prin Watkin Lloyd Steven , miercuri 30 decembrie 2009 18:30

Am fost lupta cu înfiinţarea o schemă bază de date pentru un nou Zend Framework proiect. Sunt utilizând încercaţi să utilizaţi Doctrina ORM pentru modelele baza mea de date. Am nevoie pentru a configura schema, astfel încât acesta mi-a permis să stabilească o dată implicit şi timp pentru o `datetime` coloana, de exemplu, atunci când se adaugă un mesaj nou I a lua timestamp curent. După multe cercetări şi experimente am gasit solutia aşa că eu sunt o partajare.

În schema dumneavoastră YAML fişier nu pur şi simplu următoarele:

 Mesaj:
   actAs:
     Timestampable:
       creat:
         Nume: created_at
         Tip: timestamp
         Format: Ymd H: i: s
       actualizat:
         Nume: last_updated
         Tip: timestamp
         Format: Ymd H: i: s
   coloane:
     id:
       Tip: integer
       primar: adevărat
       autoincrement: adevărat
     nume: string (255)
     e-mail: string (300)
     mesaj: string (2000)

Dacă, pe de altă parte, nu doriţi o "updated_at` coloana puteţi folosi următoarele:

 Mesaj:
   actAs:
     Timestampable:
       creat:
         Nume: created_at
         Tip: timestamp
         Format: Ymd H: i: s
       actualizat:
         dezactivat: adevărat
   coloane:
     id:
       Tip: integer
       primar: adevărat
       autoincrement: adevărat
     nume: string (255)
     e-mail: string (300)
     mesaj: string (2000)

PHP Design Patterns - model Observer

De Lloyd Watkin Steven , marţi 29 decembrie 2009 22:02

Am fost de lectură Şeful Prima Design Modele recent, şi au decis să scrie unele dintre modele ca exemple PHP pentru propriul meu interes. Primul care l-am decis să cod up este model Observer . Definiţia formală a Pattern Observer este:

Modelul observator (un subset al asincron publica / abonaţi model ) este un software de design model în care un obiect , numit subiectul, păstrează o listă cu persoanele aflate în întreţinerea acestuia, numite observatori, şi le anunţă în mod automat de orice modificări de stat, de obicei, prin apel la una dintre lor metode . Este folosită în principal pentru punerea în aplicare a sistemelor distribuite eveniment de manipulare.

Pe măsură ce sistemele devin mai slab cuplate asigurându-vă că atunci când un eveniment se intampla tuturor sistemelor care necesită cunoştinţe de aceste actualizări sunt informate. De exemplu, un post de blog, după salvarea unui post am putea avea nevoie pentru a actualiza un motor de căutare (de exemplu Lucene), actualizare sitemap noastre, tag-uri, utilizatorii de e-mail subscris, etc model observator permite dezvoltatorilor să adauge ascultători suplimentare fără obiect editarea lor observabile . Prin injectarea de observatori (de exemplu, o actualizare a unui motor de căutare observator, un generator de sitemap, etc) într-un subiect (de exemplu, sistem de blog-ul de editare post) ne putem permite să îşi îndeplinească toate actualizările necesare, fără nici o schimbare.

Continuaţi lectură "PHP Design Patterns - Observer Pattern" »

Office Grid Computing folosind medii virtuale - Partea 4

Prin Watkin Lloyd Steven , vineri 04 decembrie 2009 11:59

Introducere

Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.

În partea a 3- am creat Virtual Machine de prelucrare a noastră şi a înfiinţat maşini de ferestre pentru a deveni, timp lucrătorii inactiv.

Rularea mai recente codul

Inevitabil, după crearea muncitorii de afaceri logica ta se va schimba, bug-uri va fi găsit, mai eficiente codul de mai rapid va fi produs lăsând muncitorii aşezat în jurul prelucrarea datelor folosind mirositor codul vechi . Cum apoi să ne asigurăm că suntem folosind întotdeauna ultima versiune şi cea mai mare de scripturi noastre de prelucrare?

Exista cateva metode simple foarte uşor am putea face acest lucru, truc, cu toate acestea, este de a reduce puterea de procesare şi traficul din reţea în realizarea acestui lucru. Sa incepem cu cele mai simple de soluţii şi îmbunătăţi-l lent, pe o pereche de iteraţii.

Prima metodă ar fi pur şi simplu pentru a conecta la serverul nostru de control de locuri de muncă (prin samba, FTP, sau similar) şi trage în jos cea mai recentă versiune a codului. Nu sunt foarte eficiente, dar va face treaba. Permite îmbunătăţirea pe care oarecum, cum despre crearea unui script rsync şi folosind faptul că de fiecare dată în schimb? Alternativ, ceea ce despre punerea ultimele noastre scriptul care procesează în subversiune verificarea codul iniţial şi apoi actualizarea doar codul nostru pe fiecare rula ( svn update )?

În final am putea termina cu un script bash (numit de către cron la fiecare 10 minute), care arată la fel de simplu ca acest lucru:

  #! / Bin / sh
 dacă topor ps | grep-v grep | grep php > / dev / null
 apoi
     echo "de locuri de muncă este în prezent de procesare, ieşire"
 altfel
     echo "Iov nu se execută, începe acum"
     cd / cale / către / de lucru / copiere
     svn update
     php yourJobProcessingScript.php
 Fi 

Acum putem fi siguri că cu fiecare rula suntem rulează cu siguranta cel mai nou cod. Suntem asigura acest lucru prin actualizarea bazei noastre de cod fiecare şi de fiecare dată vom efectua un a alerga şi reducerea traficului în reţea prin transferarea doar diferenţele fişier în reţeaua noastră.

În setup demonstraţie mea, am făcut exact ca mai sus. Subversion a fost instalat pe serverul meu de prelucrare de locuri de muncă şi am tras pur şi simplu cel mai nou cod de la sucursala "lucrător" folosind 'svn update ". Am adăugat, de asemenea, o etichetă număr de versiune a script-ul meu de procesare, care a fost returnat în baza de date ca parte a returna rezultate. În acest fel am putut vedea că codul meu a fost în curs de actualizare de fiecare dată am copiat în trunchiul meu şi anume ramura lucrător că am fost cu siguranta rulează script-ul mai recente de prelucrare.

Folosind cele mai recente date

Dacă procesarea dvs. de locuri de muncă face ca utilizarea de surse de date, apoi la un moment dat acestea vor fi actualizate prea. Excepţia cazului în care suni sursele de date pe o bază foarte rare ai de gând să inundaţii reţea cu trafic de îndată ce muncitorii dumneavoastră începe să fie difuzate aducand totul într-un impas. Pentru soluţie mea am decis că aş dori să se mute sursele mele de date cu VMS în jurul meu.

Ţineţi esti cai acolo! Ce se întâmplă dacă datele sursele mele sunt enorme? Ei bine, aceasta este într-adevăr un caz de cât de mult sunt date vorbim? Acesta poate fi mai rentabilă de a instala un hard disk mai mare suplimentare în fiecare maşină decât să achiziţioneze un server de prelucrare suplimentară. Aceasta este o chestiune de buget şi este de până la afaceri pentru a decide. Se poate că sursele de date dvs. sunt atât de mari încât doar sa imposibil să se păstreze această sumă de date în maşinile lucrător dumneavoastră. În acest caz, ce aţi face? Ei bine, am putea uita la a apela la un server de date locale, dar acest lucru ar putea cauza probleme cu reţeaua. În acest caz, un sistem de reţea, cum ar fi acest lucru poate deveni nerealist să includă în mediul de birou. Acesta poate fi, de asemenea, ca poti sa te uiti în care rulează strategii alternative, de exemplu de asteptare numai muncitorii între 20 şi 6 dimineaţa în fiecare noapte şi / sau date throttling sursă de cereri.

Mutarea de pe vă permite să spun suma noastre de sursele de date la 100GB de date. Ei bine, da asta e destul de un pic de date pentru a vă deplasa în jurul reţea pe o actualizare. Cum ne-am asigura că avem cea mai recentă copie a datelor în acest caz? Rsync este o posibilitate, dar personal cred că prin rularea ta sursa de cele mai recente date pe serverul dvs. de prelucrare de locuri de muncă şi înfiinţarea asta ca un maestru în replicare (cu un jurnal frumos bin lung) ar putea fi mod de a merge:

replicare Prin setarea fiecare dintre muncitorii sus ca un sclav la actualizări server de locuri de muncă de control la surse de date dvs. va prelinge în jos frumos pentru lucrători, fără o creştere uriaşă în activitatea de reţea (cu excepţia cazului în care este să efectuaţi o actualizare de date uriaşă şi toate lucrătorii lovi cu piciorul în la o dată). Acest lucru are avantaje faţă de rsync în care nu ar lua o pauză lungă înainte de fiecare loc de muncă; ca actualizările bazei de date, mysql daemon pe lucrător dvs. se va actualiza continuu datele sale, în timp ce de prelucrare continuă.

Acest lucru este cum am înfiinţat serverul meu demonstrative. Pentru a configura replicare am urmat ghidul de pe site-ul mySQL ( Înfiinţarea replicare ) şi în 20 de minute am avut inital asistentul meu replicarea control setul de date de locuri de muncă servere. Pentru fiecare lucrător suplimentar setările şi procesul de replicare a lucrat de fiecare dată când VM a fost copiat.

Rezumatul

În această secţiune din articol ne-am uitat la cât de uşor şi fără durere este de a menţine codul de prelucrare până la data de rsync using sau subverion (SVN) pentru a face munca şi pentru a reduce traficul de reţea la aceeaşi time. Am discutat, de asemenea, modul în care pentru a păstra informaţiile dvs. sursă de date de până-la-la data de permiţându-i să curgă în jos pentru fiecare dintre muncitorii. Astfel, am zona asigurându-se că ne ţine pasul cu logica de afaceri şi de informaţii în sistemul nostru de reţea de birou. Nu va fi, evident, nenumărate alternative de a efectua aceste sarcini, dar aici au fost două exemple simple pentru a arăta cât de uşor o soluţie este de a veni cu.

Următorul timp

În partea finală a acestei serii, aptly numit Partea 5 , vom discuta despre implementarea acestui sistem. Voi rezuma ceea ce a fost învăţat şi ceea ce am reuşit să creeze.

Office Grid Computing folosind medii virtuale - Partea 3

Prin Watkin Lloyd Steven , vineri 04 decembrie 2009 23:37

Introducere

Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.

În partea a 2- am uitat la un server de locuri de muncă va rula, şi cum de locuri de muncă ar trebui să fie configurat pentru a realiza cea mai mare cantitate de prelucrare în acelaşi timp asigurându-se că fiecare loc de muncă este procesat fără a eşua.

Configurarea lucrător dumneavoastră - sau server Limp

Următorul pas în procesul este de a configura muncitorii virtual. Pentru acest lucru am de gând să utilizeze o instalare a CentOS folosind VirtualBox. Am de gând să instaleze MySQL şi PHP pe server, de asemenea, cunoscut ca un Limp (Li vomica, m ySQL, P HP) Server (poate am făcut ca numele sus).

  • Instala VirtualBox pe maşinii dvs. cu Windows (urmaţi link)
  • Descărcaţi şi instalaţi CentOS (versiunea curenta 5.3) într-o maşină virtuală creată

Nu există nici un punct de gând să-mi acest acolo, probabil e 1.000 de tutoriale mare acolo (ok, aici e unul: Crearea şi Managing maşină virtuală CentOS sub virtualbox ). Punct important de notat este faptul că Cred că i-am sunat virtual GridMachine masina mea.

În ceea ce priveşte opţiunile mele de client virtualizare şi sistemul de operare merge nu există nici un motiv de mare convingător pentru fiecare alegere. VirtualBox este ceva Eu folosesc pe maşina de casa mea şi este susţinută de cele trei sisteme de operare majore. Am ales ca CentOS sale un sistem de operare stabil si bun sa-l folosesc pe serverul de web. Eu sunt un mare credincios în instrumentele potrivite pentru locul de muncă (deşi eu sunt aplicabile "utilizarea mai rapid şi mai uşor pentru tine" mentalitatea aici), aşa că, dacă sistemul de operare X ruleaza cod mai repede şi mai eficient utilizarea că, în loc:)

Important, asiguraţi-vă că VM dvs. utilizează DHCP, altfel pentru fiecare noua maşină virtuală ar trebui să fie configurat separat, care este ceva ce noi nu face folosind want.By DHCP nu avem nevoie pentru a configura setările de reţea individual pentru maşini de lucrător, DHCP va înmâna la IP-uri pentru tine. Prin urmare, puteţi copia maşina virtuală despre biroul fără a se preocupa de stabilire fiecare up (acest îmbunătăţeşte scalabilitatea şi reduce administrare lucrător).

Procesul ar trebui să vizeze obţinerea ar fi pentru a obţine o nouă maşină fizică, instala VirtualBox, şi apoi destul de mult de mobilizare a imagine virtuală, fără nimic altceva. Ar putea fi înţelept să setup toate lucrătorii pe o altă subreţea, astfel încât să puteţi cel puţin vedea cât de multe masini sunt difuzate. Veţi avea nevoie, de asemenea, pentru a configura masini pe un închiriere pe termen lung sau DHCP leasing nelimitat.

Cum de a rula locuri de muncă pe lucrător

Acesta este un domeniu interesant şi există mai multe metode de locuri de muncă valabile pentru prelucrare pe muncitor. Aici voi discuta doar doua dintre cele mai evidente:

  • rularea script mereu: Un scenariu, fie el un script de shell, sau un script PHP este executat o singură dată pe muncitor si ruleaza ca parte dintr-o buclă infinită. Am actualizat această metodă ca fiind unul accident de script-ul şi potenţial muncitorii dvs. va înceta să ruleze fără un fel de intervenţie.
  • executarea Cron script bazat: la fiecare X minute daemon cron începe un apel la script-ul dvs. pentru a obţine lucrurile sa mearga. Fără unele verificarea acest lucru ar putea duce la mai multe copii multe dintre script-lucrător pe care rulează.

Decizia mea a fost să meargă cu cron, care incepe un script de shell la fiecare 10 minutes. shell script-ul meu îndeplineşte următoarele atribuţii:

  1. Obţine o listă şi grep acest proces pentru "php". În cazul în care nu a fost găsit apoi se continuă.
  2. Apel codul de locuri de muncă, în cazul meu, acest lucru ar fi ceva PHP bazate pe
  3. script de munca completeaza rula sale
  4. Gata să meargă din nou la apel corespunzătoare următoarea

bash script-ul meu arata ceva de genul următor:

  #! / Bin / sh
 dacă topor ps | grep-v grep |> grep php / dev / null
 apoi
     echo "de locuri de muncă este în prezent de procesare, ieşire"
 altfel
     echo "Iov nu se execută, începe acum"
     php yourJobProcessingScript.php
 Fi 

Nota: ecou sunt aproape complet inutil, dar poate ajuta la următoarea persoană care vine de-a lungul pentru a încerca şi să le editaţi.

Concluzionează că înfiinţarea de maşină virtuală lucrătorului, rapid, simplu şi uşor de a copia la fiecare nouă piesă de hardware, care este primit. "Inteligenţa" a sistemului de reţea într-adevăr nu este vizualizat în sistemul de operare, de-a face cu codul creat pentru a procesului de locuri de muncă, de configurare de locuri de muncă, şi în asigurându-se că locul de muncă se execută atunci când este cazul (adică atunci când gazda este inactiv ).

Configurarea Windows pentru a iniţializa Lucrătorii

Prima sarcină este de a lucra la comanda, necesare pentru funcţionarea maşinii virtuale din linia de comandă Windows. Dacă aţi instalat VirtualBox în locaţia implicită şi aţi numit lucrător GridMachine dvs., atunci comanda trebuie să încărcaţi până lucrător dumneavoastră este:

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

Cu toate acestea pentru a rula script-ul într-un "cap" de stat avem nevoie pentru a utiliza:

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

Aceasta va porni maşina virtuală, fără GUI şi lăsaţi-o pentru a salva de stat cu graţie. Al doilea argument se opreşte RDP aşa că nu intră în conflict cu ferestre RDP, sau vă dau un mesaj despre ascultare pe portul 3389. Numele maşinii virtuale este sensibil caz!

Apoi, va trebui să setaţi Windows până la a lovi cu piciorul off VM nostru lucrător de îndată ce aparatul a fost inactiv. Pentru a face acest lucru (pe Windows XP), veţi avea nevoie pentru a merge Start -> All Programs -> Accesorii -> System Tools -> Scheduled Tasks ca de mai jos:

sarcinilor planificate

faceţi clic pe Următorul pe "Add Scheduled Task", urmată de a căuta pentru a adăuga un program personalizat. Navigaţi la script-ul dvs. VBoxManage şi faceţi clic pe OK. Programul de activitate pentru oricare dintre opţiunile (vom schimba această intr-un minut) şi a continua. După sărind peste ferestrele urmatorul ecran vă va întreba cine doriţi să executaţi această sarcină, aş sugera fie "administrator" sau de a crea un nou utilizator privilegiat. Amintiţi-vă noi nu vrem să se amestece cu personalul cont standard pe masina de la orice punct. Faceţi clic pe opţiunile următoare şi verificaţi arată avansate pentru această sarcină.

La sfârşitul casuta alerga adăuga şir "GridMachine startvm" noastre şi să se asigure că rula numai atunci când este conectat în stânga unticked. Vizitaţi sarcina programul următor şi de a schimba programul drop jos la opţiunea "atunci când idle", alege suma de timp doriţi ca aparatul să fie inactiv înainte de a trece la următoarea filă.

Pînă la urmă opţiunea care prevede opri activitatea dacă a fost difuzate suma X de timp, dar nu bifaţi opţiunea de a opri sarcina în cazul în care maşina nu mai este inactiv.

program

Asta e, atunci pentru configurare gazdă ferestrele!

Rezumatul

În această parte ne-am înfiinţat-o maşină virtuală să acţioneze ca un lucrător, precum şi modul în care noi o numim si executa script-urile noastre de locuri de muncă de prelucrare (pentru mine un script PHP). De aici ne uităm la cum să înfiinţeze copii noastre de Windows pentru a porni maşina virtuală în modul de cap atunci când calculatorul devine inactiv, şi de a salva starea sa atunci când utilizatorul reia de utilizare a maşinii. Sperăm că în acest moment vedeţi cât de simplu este de a înfiinţa un astfel de sistem şi sunt mâncărime pentru a obţine unele experimente tine merge!

Următorul timp

În partea 4 , vom fi uitat la utilizarea instrumentelor pentru a se asigura că rulaţi cea mai recentă versiune a datelor şi sursele de cod, astfel încât rezultatele obţinute sunt intotdeauna la curent cu cele mai recente informaţii de afaceri şi de logică.

Office Grid Computing folosind medii virtuale - Partea 1

Prin Watkin Lloyd Steven , vineri 04 decembrie 2009 11:23

Introducere

Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.

Ca un PHP developer am de gând să utilizeze instrumentele pe care am folosi în fiecare zi şi anume, Linux, mySQL , PHP, VirtualBox şi Subversion (SVN). Cu toate acestea Sper ca acest ghid va adapta la alte limbi şi tehnologii la fel de bine.

Soluţia pe care o oferă va fi foarte vag pe baza tipului de prelucrare am fi avut nevoie pentru a realiza toate acestea, acest lucru nu poate fi adevarat, prin tot articolul ca voi schimba lucrurile spre simplitate, sau pentru a produce scenarii mult mai interesante de utilizare.

Aceste medii virtualizate va rula pe maşini Windows, deoarece aceasta este ceea ce majoritatea birourilor alerga. Prelucrarea ca maşini de birou nu ar trebui să interfereze cu personalul care utilizează aceste maşini, ar trebui să nu necesită întreţinere la maşină, şi să fie uşor dislocabile pentru maşini noi ca acestea vor deveni disponibile. De asemenea, noi maşini virtuale nu ar trebui să necesită nici o configurare suplimentare, deoarece aceasta reduce foarte mult scalabilitatea şi uşurinţa la care reţeaua poate fi extins.

De ce Implementaţi un Grid Computing Office?

În primul rând poate te gandesti, de ce nu se utiliza doar o resursă cloud computing, cum ar fi Amazon EC2 platforma lui ? Ei bine, motive ar putea fi mai multe, de exemplu:

  • Tu nu va încredinţa anumite date la un mediu de cloud computing
  • Nu poţi pune anumite date într-un mediu de cloud computing pentru motive juridice (de exemplu, date ieşirea din ţară), potenţial pentru motive legale, de exemplu, înregistrări NHS.
  • Doriţi să păstraţi unităţile de procesare şi aproape au control deplin asupra hardware prea
  • Nu aveţi fonduri proiectul de a executa instanţe nor
  • biroului tău nu are o conexiune la internet şi, prin urmare, ei nu este posibil de a utiliza o resursă nor
  • Tu nu-mi place ploaia, norii sugerează ploaia, prin urmare, vă păstraţi bine departe

Sunt sigur că lista ar putea continua, dar cred că e suficient pentru acum.

Avantajele unui Grid Computing Office

Ei bine, vă permite să faceţi unele matematică (şi în stil fizica adevărat vă permite să facă unele presupuneri zdrobitoare). Imaginaţi-vă ce aţi server mare de prelucrare musculos rulează sute de locuri de muncă pe zi. În biroul dumneavoastră aveţi 50 de maşini care sunt idle 16 ore pe zi, fiecare dintre aceste masini este de 10%, la fel de puternic ca procesare musculos Sever. (Toate rezultatele aici sunt rotunjite pentru a creşte performanţele subestima).

Deci, o masina * 10% * putere 2 / 3 timp = 0.067 adică 1 prelucrare desktop în timp inactiv ar putea plin proces de 6 locuri de muncă pe zi.

Dacă scară acum asta este nevoie de 15 desktop-uri inactiv la proces ca multe locuri de muncă pe zi, ca principal server prelucrare dvs. nu.

Deci, în pretinde biroul nostru de 50 de masini noi ar putea creşte puterea de procesare nostru de la 1 server până la 4 servere de prelucrare complet, sau am putea fi de prelucrare a 400 locuri de muncă pe zi in loc de 100.

Anunţ, pentru nici o investitie in hardware nou compania ta tocmai a crescut capacitatea de procesare lot de 4 ori! Potenţial ai de gând să crească de utilizare dvs. de putere, dar de cele mai multe medii de birou am fost la maşini sunt, în general, pe stânga peste noapte, oricum, asa ca ai putea vedea acest lucru ca pe o iniţiativă verde.

Alte avantaje înseamnă, de asemenea, că investiţiile în noi (sau actualizate), serverele de procesare poate fi amânată în cazul în care maşinile de birou sunt suficiente şi că, după cum sa va imbunatatiti puterea de maşini de birou grila de la birou devine mai puternic în mod automat.

Tehnologii

Ce ai nevoie? (Sau, mai corect ceea ce am folosit):

  • Idle echipamente de birou (in cazul meu un laptop Windows XP vechi de rezervă)
  • VirtualBox (sau un alt client software de virtualizare)
  • O maşină virtuală cu PHP, mySQL running execută o tăietură în jos sistem de operare, eu sunt de asteptare aceste Limp serverele mele:)
  • Locuri de muncă pentru a rula
  • server de locuri de muncă (poate fi o altă maşină virtuală undeva)

Locuri de munca tipice

Tipurile de locuri de muncă că acest sistem este proiectat pentru a rula este după cum urmează:

  • Sistem primeşte o listă de date pe care avem nevoie pentru a se potrivi şi a reveni rezultate
  • Potrivire constă în verificarea / cauta mai multe (destul de statică) surse de date
  • Rezultate din sursele de date poate necesita mai mult de validare, care fuzionează, verificarea de surse de date suplimentare ca răspuns la rezultatele
  • De date este returnat cu înregistrări de potrivire, complet validate şi prelucrate
  • Fiecare înregistrare în termen de un loc de muncă este independent de restul

Deci, practic suntem în căutarea la rularea de locuri de muncă care necesită un amestec de căutări de baze de date şi unele ronţăit număr, un scenariu destul de tipic într-un mediu de afaceri.

Grila de soluţii nu sunt numai avantajoase pentru prelucrarea de locuri de muncă de acest tip. Practic, orice proces care poate fi împărţită în unităţi independente pot fi rulate în paralel. Consultaţi acest wikipedia pentru exemple şi mai multe informaţii: Grid Computing , dar o serie de exemple celebre sunt Seti @ Home şi BIONC . Există cadre pentru rularea grile de calcul, iar acestea sunt bine în valoare de căutaţi în.

Ceea ce vom realiza?

Până la sfârşitul acestor articole sper să demonstreze că implementarea unei grile de birou nu trebuie să fie extrem de scumpe sau consumatoare de timp. Am de gând, pentru a discuta:

  • Configurarea sistemului de control de locuri de muncă, de configurare de locuri de muncă
  • Crearea o maşină corespunzătoare de procesare virtuală
  • Cum sa configuram sistemul de pe o maşină Windows
  • Asigurarea pe care îl utilizaţi cel mai nou cod şi de date
  • Desfăşurare şi benchmarking
  • Privind în perspectivă

Voi fi de constructii (ok am construit, scris atunci acest lucru) o cerere de exemplu pentru a testa conceptele pe o maşină locală utilizând Windows XP şi maşină "GridMachine" meu virtual. Serverul de locuri de muncă de control mea va fi principalul masina mea care ruleaza Fedora 11 .

Acest lucru este în nici un fel menite să demonstreze existenţa unui sistem complet de lucru robust, sa însemnat mai mult de o demonstraţie şi discutarea care arată că aceste lucruri pot fi realizate într-un spaţiu destul de scurtă de timp şi la costuri mici. Vă rugăm să nu ezitaţi să trimiteţi-mi orice comentarii, corecturi sau îmbunătăţiri şi voi face tot ce pot pentru a menţine acest articol actualizate pentru a se potrivi.

Următorul timp

În partea a 2- I va începe căutarea de la sistemul de control de locuri de muncă, şi uită-te în modul de locuri de muncă ar trebui să fie configurat pentru a realiza cea mai mare cantitate de prelucrare în acelaşi timp asigurându-se că fiecare loc de muncă este procesat, fără a eşua.

Office Grid Computing folosind medii virtuale - Partea 2

Prin Watkin Lloyd Steven , vineri 04 decembrie 2009 11:23

Introducere

Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.

În partea 1 I-am dat o imagine de ansamblu a sistemului şi tehnologii Eu voi fi folosind, precum şi discutat ca unele dintre motivele potenţialului de ce v-ar doriţi să creaţi o grilă de birou.

De locuri de muncă de control

Dacă aveţi de gând să fie difuzate de locuri de muncă, atunci ai de gând să nevoie de o modalitate de a le gestiona. Sistemul dvs. de control de locuri de muncă (pe serverul dvs. de locuri de muncă) trebuie să fie foarte bine gandit, chiar înainte de a încerca pentru a rula o grilă de birou. Deci, în primul rând, care sunt sarcinile pentru un sistem de control de locuri de muncă:

  • O parte din locuri de muncă la cererea lucrătorilor
  • Spune-lucrătorilor ce tip de locuri de muncă pentru a rula
  • Track locuri de muncă
  • Asiguraţi-vă că locurile de muncă sunt doar rula o singură dată
  • Furnizeze date de locuri de muncă pentru lucrători, sau cel puţin să le spună unde să-l

De asemenea, sistemul trebuie să fie extensibila, o soluţie care funcţionează de acum într-un singur caz poate fi extinsă pentru a rula mai multe tipuri de locuri de muncă, afaceri vede în valoare într-o soluţie de reţea. De exemplu, locuri de muncă poate câştiga priorităţile, mai mult de un tip de loc de muncă ar putea exista (de exemplu, mai multe baze de cod), în cele din urmă s-ar putea rula chiar mai multe maşini diferite lucrător care sunt optimizate pentru fiecare tip de loc de muncă (cu toate că se mişcă departe de "lucrător generic "idee). Încercaţi întotdeauna să ne gândim la viitor, atunci când sistemele de dezvoltare, o viziune pe termen scurt poate duce la frustrare pe termen lung şi timpul de dezvoltare a crescut.

Server de locuri de muncă

Vom avea nevoie de undeva de locuri de muncă pentru a controla noastre din, acest lucru ar trebui să fie singurul sistem în grila de dvs., care are o adresă pentru localizarea resurselor fix, să fie ca o adresa IP, numele gazdei, URL-ul (folosind DNS intern), etc Acest lucru se datorează faptului că lucrătorii trebuie să ştie unde să caute locuri de muncă, muncitorii au nevoie pentru a găsi sistemul de control de locuri de muncă (nu sistemul de control al găsi locuri de muncă a lucrătorilor).

Serverul de locuri de muncă în sine nu are într-adevăr o sarcină complicată (într-un sistem de bază oricum), are nevoie pentru a stoca o listă de locuri de muncă, o parte din locuri de muncă, de a primi rezultatele, şi, ulterior, le stoca pentru regasirea ulterioara. Modul în care aceste părţi ("mână în locuri de muncă", cum ar fi) sunt definite poate fi foarte de bază. Mai tarziu ne putem extinde sistemul pentru a include o interfata de administrare pentru a adăuga, edita, şterge, suspenda locuri de munca dar acest lucru este dincolo de acest exerciţiu.

Nu există nici un motiv apoi că serverul dvs. de locuri de muncă nu ar putea fi o maşină virtuală care rulează în cadrul server-ul dvs. principală de procesare cu condiţia ca aceasta să nu scurgere prea multe resurse de la ea. Serverul de locuri de muncă are nevoie de toate acestea, disponibilitate ridicată, dacă se duce în jos pe o vineri seara ai de gând să-şi piardă un weekend întreg de procesare, potenţial vă costă câteva săptămâni în valoare de timp de prelucrare (în comparaţie cu server-ul dvs. principală de procesare numai) . Poate doriţi să ia în considerare punerea server-ul dvs. loc de muncă la un mediu echilibrat de încărcare pentru disponibilitate ridicată.

Basic Setup

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 1: Picked up
    • 2: Completed
  • started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
  • started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

După cum sa menţionat anterior, muncitorii vor face noastre de management de locuri de muncă pentru noi, pentru acum, deci tot ce trebuie să facem este într-adevăr găsi un loc de muncă, care are nevoie de prelucrare şi pentru a obţine informaţii. Cum ne-am face asta? Ei bine alege criteriile noastre de locuri de muncă de selecţie şi caute locuri de muncă, în SQL am făcut următoarele:

  1. Luaţi orice locuri de muncă care nu sunt marcate ca fiind complet, dar de la muncitor noastre şi le reseta (__ME__ substitui cu un identificator cel mai simplu, ar fi adresa IP):
      UPDATE `de locuri de muncă` SET `statutul` = 0, unde "starea = 1` si `started_by" = __ME__; 
  2. Folosind criteriile noastre de locuri de muncă de selecţie, selectaţi un loc de muncă şi sistemul de control spune că acest lucrător se ocupă cu ea:
      UPDATE `de locuri de muncă` SET `statutul` = 1, "started_by = __ME__`, `started_at` = NOW (), unde "starea" = 0 sau
     (`Statutul` = 1 si `started_at`> DATE_SUB (NOW (), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    Hapsân de locuri de muncă care nu s-au întors rezultate în suma X de timp, ne asigurăm că toate locurile de muncă sunt difuzate în eventualitatea unui lucrător crashing sau merge AWOL.

  3. Next apuca detaliile de locuri de muncă, urmată de înregistrări înşişi:
      SELECT * FROM `de locuri de muncă` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

La finalizarea de locuri de muncă ne introduce înregistrările noastre rezultat şi marca de locuri de muncă ca fiind completă. Amintiţi-vă de locuri de muncă se poate suspenda / relua în orice moment, pentru a permite unele robusteţe în script-ul dvs.. S-ar putea ca sarcina suspendă jumătate prin actualizarea sistemului de control de locuri de muncă, astfel încât verificarea numărului de înregistrări într-un loc de muncă şi numărul de rezultate salvate înapoi la sistemul de control de locuri de muncă ar fi o mişcare înţeleaptă.

În plus, în timp ce acest lucru demonstrează cât de locuri de muncă pot fi selectate şi gestionate dintr-o-cadru interogare SQL ar trebui să fie într-adevăr abstractizare de locuri de muncă de control al dvs., astfel că, dacă vă hotărâţi să treceţi la utilizarea unui serviciu web, un bazate pe sistemul de fişiere, XML , sau orice alt numărul de sisteme de aceasta nu va afecta codul de mai sus ea.

De locuri de muncă de configurare

Aspectul următoare să ia în considerare este dimensiunea de locuri de muncă şi de configurare. De joc cu o configuraţie de locuri de muncă, putem asigura un echilibru excelent între viteză, procesul de replicare, şi fiabilitate. Ia un cuplu denota scenarii:

  1. Ocuparea forţei de muncă o zi fiecare pentru a rula: Acest lucru înseamnă că muncitorii nevoie de 15 zile pentru a procesa fiecare loc de muncă (amintesc 10% din puterea de 2/3rds de timp). Acest lucru nu este în mod clar o configuraţie înţelept, dimensiunea de locuri de muncă este mult prea mare! Ar fi nevoie de cel puţin dublu faţă de timp pentru a obţine un loc de muncă ar trebui să prelucrate lucrătorul iniţială merge AWOL (timp pentru a ridica că nu a returnat un rezultat plus timp reprelucrare). Într-un ideal ai avea cel puţin un loc de muncă plin cu uşurinţă eliminat de la sfârşitul fiecărei perioade de ralanti de lungă, în acest fel vă păstraţi de locuri de muncă peste bifând şi în cel mai rău caz, un loc de muncă ar dura două zile pentru a procesului ar trebui să meargă primul lipsesc.
  2. Ocuparea forţei de muncă 1 minut pentru a rula: Acest lucru înseamnă că muncitorii dura aproximativ 15 minute pentru a rula fiecare loc de muncă. Deşi acest lucru poate părea iniţial ideal, puteţi câştiga de prelucrare de muncă suplimentare în timpul prânz, pauze de cafea, întâlniri, etc acest scenariu pune presiune pe alte zone ale sistemului dvs. şi introduce propriile sale probleme. De exemplu, în primul rând de instalare / raportul timpului de procesare este de gând să merg dreapta jos, a pierde, prin urmare, eficienţa sistemului. Reteaua ta va fi de streaming constant informaţii de locuri de muncă pentru lucrătorii în diferitele personalului frustrante care sunt dong lor de zi cu munca de zi. Eşti de asemenea, va pune presiune mai mult pe serverul dvs. de prelucrare de locuri de muncă, deoarece trebuie să antena afară o mulţime şi o mulţime de piese mici de lucru în mod regulat. În sfârşit, în această situaţie dacă serverul dvs. de locuri de muncă se duce în jos ai de gând să creaţi un jurnal imens din spate de sarcini neîndeplinite în timp ce mai mare de locuri de muncă ar putea de prelucrare a continuat blissfully cunoştinţă faptul că serverul de locuri de muncă a fost confruntă cu dificultăţi.

În realitate, nu va fi nici o configurare ideal pentru configurarea reţelei dumneavoastră, mult depinde de resursele disponibile, tipuri de locuri de muncă, cerinţele de timp de răspuns de locuri de muncă, capacitatea de reţea, şi aşa mai departe. Toate acestea, unele linii directoare ar fi:

  • Dimensiune de locuri de muncă, astfel încât fiecare lucrător poate obţine prin intermediul a cel puţin 3-4 locuri de muncă într-o perioadă de 15 ore (cea mai lunga perioada de timp probabil mers în gol)
  • Joaca-te cu dimensiunea de locuri de muncă, astfel încât timpul de setare devine destul de nesemnificative în comparaţie cu timpul de prelucrare (ţinând cont de punctul de mai sus).
  • În cazul în care un loc de muncă nu este complet în dubla cantitatea de timp (poate mai puţin), vă aşteptaţi să completeze aceasta presupune că sa AWOL plecat şi de prelucrare a începe cu un alt muncitor. Aceasta înseamnă că va trebui să aşteptaţi până la de trei ori lungimea normala a unui loc de muncă pentru ca acesta să completeze (eventual mai mult în cazul în care nu reuşeşte de locuri de muncă ulterioare). Este posibil să doriţi pentru a reduce acest timp, dar aveţi grijă să nu-l reduce prea mult, ca s-ar putea începe duplicarea sarcinilor de prelucrare în mod regulat.
  • De locuri de muncă ar trebui să fie independentă de cerinţe în afara cât mai mult posibil. Serverul de locuri de muncă, de exemplu, ar trebui să fie contactat doar la începutul şi sfârşitul fiecărui loc de muncă.
  • Nu satura reţeaua dvs., aceasta va avea două efecte negative, personalul zi va găsi utilizând reţeaua frustrant şi probleme pot fi cu experienţă, cu conexiuni calendarul o problema care va primi doar mai rau ca tine scara grila dumneavoastră.
  • Asiguraţi-vă de locuri de muncă poate rula pe muncitorii. În cazul în care locurile de muncă devin prea memorie de locuri de muncă intensivă sau spaţiul de pe disc intensiv va începe întreruperea şi singurul lucru veţi observa este o scădere a numărului de locuri de muncă prelucrate cu nici un motiv real de ce.

Rezultatele Trimiterea unui loc de muncă

Atunci când prezintă rezultatele unui loc de muncă, este important să verificaţi că rezultatele nu au fost prezentate de către un alt lucrător, mai ales în cazul în care lucrătorul curent a fost adormit de ceva timp.

Atunci când rezultatele sunt transmise asigura că numărul de rezultatele meciurilor numărul de înregistrări în locuri de muncă.

După cum sa menţionat anterior, şi nu poate fi peste accentuat, construi toleranta la defecte în extragerea de locuri de muncă şi prezentarea rezultatelor. Lucrătorii pot (şi cel mai probabil vor) intra în modul de suspendare la incomod de cele mai multe ori şi acest lucru trebuie să fie satisfăcute. De asemenea, încă o dată abstractizare departe depunerea dvs. rezultatele vor ajuta pentru a satisface modificări viitoare a sistemului de control de locuri de muncă mult mai uşor pentru a face faţă.

Rezumatul

În acest section am uitat la ceea ce un server de control loc de muncă trebuie să facă şi cum să obţineţi un sistem foarte de bază stabilit. Am discutat despre modul în care pentru a prelua un loc de muncă din sistemul de control şi de modul în care cel mai bine pentru a configura de locuri de muncă pentru a obţine cele mai multe nostru de sistemul dvs. reţea de birou. Pentru a termina, un paragraf sau două pe prezenta rezultatele inapoi la server de control de locuri de muncă a fost prezentat.

  • Un server de control de locuri de muncă gestionează locurile de muncă şi se asigură că toate unităţile de muncă sunt completate
  • Prin abstractizare locul de muncă selectaţi / prezentarea rezultatelor putem schimba tehnologia de server de control fără probleme de mult
  • Configuraţi-vă de locuri de muncă pentru a se asigura că acestea sunt conduse rapid şi eficient, fără a pune presiune prea mare pe infrastructura de reţea, şi fără duplicarea sarcinilor de prelucrare în mod regulat.
  • Asiguraţi-vă că construi toleranţa la erori şi checking eroare în rutine, lucrătorii pot suspenda şi relua şi incomod de cele mai multe ori. Amintiţi-vă pentru a verifica dacă rezultatele au fost deja prezentate de către un alt muncitor.

Următorul timp

În partea 3 vom crea noastre de procesare maşină virtuală şi să configuraţi Windows maşinile noastre de a deveni în timp lucrătorii inactiv.

Office Grid Computing folosind medii virtuale - Partea 5

Prin Watkin Lloyd Steven , vineri 04 decembrie 2009 11:03

Introducere

Lucrez într-o companie unde vom rula lot multe locuri de muncă prelucrarea milioane de înregistrări de date în fiecare zi şi m-am gândit recent la toate maşinile care stau in fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini să consolideze puterea de procesare a sistemelor noastre? În acest set de articole am de gând să se uite la beneficiile potenţiale ale angajarea unui birou grilă utilizând medii virtualizate.

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. Deci,

  • 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 Tematica de Themocracy

6 vizitatori online acum
3 vizitatori, 3 impotriva, 0 membrii
Max vizitatori azi: 12 la 06:16 UTC
În această lună: 22 la 08-06-2011 12:30 UTC
În acest an: 130 la 28-03-2011 22:40 UTC
Tot timpul: 130 la 28-03-2011 10:40 UTC