Adăuga dinamic pagini de containere Zend_Navigation în timpul rulării

De , joi, 07 ianuarie 2010 22:50

Într-o continuare pe ultimul meu post despre Zend_Navigation, cererile de rută de sitemap.xml la controler personalizat / acţiune , acest post este despre adăugarea dymnamically de pagini într-un recipient Zend_Navigation la runtime / script executie.

Acesteia, toate bune si frumoase specificând paginile dvs. într-o ini sau XML fişier, dar la un moment dat vei fi schimbarea paginilor din site-ul dvs. pe care doriţi ca parte a unui meniu, sitemap, sau să fie incluse în traseu de pesmet. Prin urmare, ceea ce trebuie să faceţi este să adăugaţi pagini în recipientul Zend_Navigation nostru în timpul rulării. Exemple de acest lucru ar fi în adăugarea de ştiri, posturi de blog, comentarii sau pagina, etc

Continuaţi lectură "adăuga dinamic pagini de containere Zend_Navigation la rulare" »

Cereri de traseu pentru sitemap.xml la controlor personalizat / acţiune

De , miercuri 6 ianuarie 2010 12:13 pm

În scopul de a solicitărilor directe pentru / sitemap.xml la un controler de personalizat şi de acţiune în dvs. Zend Framework aplicarea pur şi simplu adăugaţi următoarele în application.ini sau fişier de configurare alternativ (de exemplu, folosesc navigation.ini):

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

Codul de exemplu, pentru a scoate pot fi văzute prin crearea de o acţiune în control adecvat (de exemplu, Harta site-ului meu se află în controlerul index, Sitemap acţiune):

 < php
 clasa IndexController
     extinde Zend_Controller_Action
 {
     / **
      * Renders un Sitemap pe baza de configurare Zend_Navigation
      * /
     sitemapAction funcţia publică ()
     {
    	 echo $ this-> View-> de navigare () -> Harta site-ului ();
    	 $ This-> View-> aspect () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (adevărat);
     }
 }

Sitemaps poate rapid şi uşor fi generate cu ajutorul Zend_Navigation , un tutorial foarte rapid (şi, în general, foarte util pentru tutoriale Zend cadru), mulaje de Zend - crearea dinamică a unui meniu un sitemap si pesmet .

Zend Framework Per-modulul Setări pe bază de

De , vineri, un ianuarie 2010 22:40

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

Când utilizaţi Zend Framework cu module, evidente sale că, dacă rulaţi diverse (sub-), site-urile de pe aceeaşi cerere nu doriţi neapărat aceleaşi scenarii de aspect pentru fiecare parte. Am decis sa merg cu structura site-ului următorul text:

  / Cerere
     / Controlere
         ...
     / Modele
     / Module
         / Default
             / Controlere
             / Aspect
                 / Script-uri
             / Vizualizari
                 / Script-uri
         / AnotherModule
             ...
     / Script-uri

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

  1. Application.ini (sau de configurare configuraţie similară):
     admin.resources.layout.layoutPath APPLICATION_PATH = "/ module / admin / layouts / Scripturi" default.resources.layout.layoutPath APPLICATION_PATH = "/ module / default / layouts / Scripturi" member.resources.layout.layoutPath APPLICATION_PATH = "/ module / membru / layouts / Scripturi "affiliate.resources.layout.layoutPath APPLICATION_PATH =" / module / afiliat / layout / Scripturi " 
  2. Creaţi Helper dumneavoastră de acţiune:
      <? Php
     / **
      * Seteaza calea de aspectul pe o bază per-modul
      *
      * @ Autorul Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Din 2010-01-01
      * /
     clasa Pro_Controller_Action_Helper_SetLayoutPath
         extinde Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Seturi de cale aspect bazat pe modul de
          * /
         preDispatch funcţia publică ()
         {
        	 Modul de $ = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ("bootstrap")) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ modul] ['resurse'] ['aspectul'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  [Modul de $] $ config ['resurse'] ['aspectul'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ("aspectul")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Şi, în cele din urmă boostrap ajutor de acţiune:
      ...
         / **
          * Configurează script-uri de aspect pe o baza per-modul
          * /
         protejate funcţia de _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ("frontController ');
    	     $ Aspect = Zend_Controller_Action_HelperBroker :: addHelper (
    	         nou Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doctrina: default DATETIME NOW ()

De , miercuri, 30 decembrie 2009 18:30

Am fost luptă cu crearea unei baze de date schema pentru un nou Zend Framework proiect. Sunt utilizând încercaţi să utilizaţi Doctrina ORM pentru modelele de baza mea de date. Am nevoie pentru a configura schema astfel încât mi-a permis să stabilească o dată implicit şi de timp pentru o `datetime` coloana, de exemplu, atunci când se adaugă un mesaj nou primesc timestamp curent. După multe cercetări şi experimente am gasit solutia, asa ca am eu o schimb.

În schema de YAML fişierul face pur şi simplu următorul:

 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 un `updated_at` coloana puteţi folosi următoarele:

 Mesaj:
   actAs:
     Timestampable:
       creat:
         Nume: created_at
         Tip: timestamp
         Format: Ymd H: i: s
       actualizat:
         persoane cu handicap: 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 de observare

De , marţi 29 decembrie 2009 22:02

Am citit directe Primele modele de proiectare recent şi au decis să scrie unele dintre modele ca exemple PHP pentru propriul meu interes. Prima pe care am decis să sus este codul modelului Observer . Definiţia formală a modelului de Observer este:

Model de observator (un subset al asincron publică / abona model ) este un software de design model , în care un obiect , numit subiectul, menţine o listă de persoane aflate în întreţinere, numit de observatori, şi le notifică automat de orice modificări de stat, de obicei, prin apel la unul din cele metode . Acesta este folosită în principal pentru punerea în aplicare a sistemelor distribuite de evenimente de manipulare.

Ca sisteme deveni mai fragila asigurându-vă că, atunci când un eveniment se intampla toate sistemele care necesită cunoştinţe din aceste actualizări sunt informaţi. De exemplu, un post de blog, după salvarea unui mesaj am putea avea nevoie pentru a actualiza un motor de căutare (de exemplu Lucene), actualizarea sitemap noastre, tag-uri, utilizatorii de e-mail, etc subscrise model observator permite dezvoltatorilor să adauge ascultatori suplimentare fără obiect editarea lor observabil . Prin injectarea de observatori (de exemplu, un motor de căutare actualizare observator, un generator de sitemap, etc) într-un subiect (de exemplu blog sistem de editare), se poate permite să îşi îndeplinească toate actualizările necesare, fără nici o modificare.

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

Grid Computing birou folosind medii virtuale - Partea 4

De , vineri, 04 decembrie 2009 11:59

Introducere

Eu lucrez intr-o companie unde vom rula multe locuri de muncă lot de prelucrare de milioane de înregistrări de date în fiecare zi şi m-am gândit recent cu privire la toate maşinile care stau în jurul valorii de fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini pentru a consolida 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 reţea utilizând medii virtualizate.

În partea a 3- am creat maşina noastră virtuală şi de prelucrare a configura Windows maşini pentru a deveni inactiv timp lucrătorilor.

Rularea mai recente codul

Inevitabil, după crearea logica lucrătorilor de afaceri se va schimba, bug-uri va fi găsit, cod mai rapid mai eficiente va fi produs, astfel, lăsând muncitorii aşezat în jurul valorii de prelucrare a datelor folosind codul vechi mirositor . Cum atunci ne asigura că suntem folosind întotdeauna ultima versiune şi cea mai mare de script-uri de prelucrare noastre?

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

Prima metodă ar fi pur şi simplu să se conecteze la serverul nostru de control de locuri de muncă (prin Samba, FTP, sau similar) şi trage în jos ultima versiune a codului. Nu este foarte eficient, dar se va face treaba. Permite îmbunătăţirea pe care oarecum, cum despre crearea unui script rsync şi folosind ca de fiecare dată în loc? Alternativ, ceea ce cu privire la punerea noastră de script-ul mai târziu de prelucrare în subversiune verificarea codul iniţial şi apoi actualizarea doar codul nostru la fiecare termen ( SLO update )?

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

  # / Bin! / Sh
 în cazul în care ps topor | grep-v grep | grep php > / dev / null
 apoi
     echo "locurilor de muncă este în prezent de prelucrare, de ieşire"
 altfel
     echo "Iov nu se execută, începe acum"
     cd / cale / la / de lucru / copiere
     svn update
     php yourJobProcessingScript.php
 Fi 

Acum, putem fi siguri că cu fiecare termen suntem execută cu siguranta ultimul cod. Suntem asigura acest lucru prin actualizarea bazei noastre de cod de fiecare data vom efectua o alergare şi de reducere a traficului în reţea prin transferul doar diferenţele de fişiere din reţeaua noastră.

În configurare demonstraţie mea, am facut exact ca mai sus. Subversion a fost instalat pe serverul meu de prelucrare de locuri de muncă şi am tras pur si simplu ultimul cod de la un "lucrător" sucursală folosind 'svn update ". Am adăugat, de asemenea, o etichetă numărul de versiune cu script-ul de prelucrare a mea care a fost întors la baza de date, ca parte a returna rezultate. În acest fel am putut vedea că codul meu a fost actualizată de fiecare dată când am copiat în trunchiul meu şi anume ramura lucrător că am fost difuzate cu siguranta scenariul ultima 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 de asemenea. Dacă nu suna surse de date pe o bază foarte rar ai de gând să inunde reţea cu trafic cât mai curând în calitate de lucrători dvs. încep să ruleze aducand totul la un impas. Pentru soluţia mea am decis că aş vrea să se mute în jurul valorii de sursele mele de date cu SMN mele.

Ţineţi esti cai acolo! Ce se întâmplă dacă sursele mele de date sunt enorme? Ei bine, aceasta este cu adevărat un caz de cât de mult sunt date vorbim? Acesta poate fi mult mai rentabil pentru a instala un hard disk suplimentar mai mare în fiecare maşină decât să cumpere un server de prelucrare suplimentară. Aceasta este o chestiune de buget şi este de până la afaceri de a decide. Se poate ca surse de date sunt atât de mari încât doar sa imposibil de a menţine această sumă de date în maşini lucrătorul. În acest caz, ceea ce ai face? Ei bine, am putea uita la a apela la un server de date locală, dar acest lucru ar putea provoca probleme cu reţeaua. În acest caz, un sistem de reţea, cum ar fi acest lucru poate fi nerealist să includă în mediul de birou. Acesta poate fi, de asemenea, ca poti sa te uiti in strategii alternative de funcţionare, de exemplu, de asteptare doar muncitorii între 20 şi 6 dimineaţa în fiecare noapte şi / sau de restrângere de date cereri de sursa.

Mutarea de pe vă permite să spun sursele noastre de date sumă la 100GB de date. Ei bine, da, care este destul de un pic de date pentru a vă deplasa în jurul valorii de reţea pe o actualizare. Cum ne asigurăm că avem cea mai recentă copie a datelor în acest caz? Rsync este o posibilitate, dar personal cred ca prin rularea mai târziu sursa de date pe serverul de procesare de locuri de muncă şi înfiinţarea asta ca un maestru în replicare (cu un log frumos bin lung) ar putea fi calea de a merge:

replicare Prin stabilirea pentru fiecare dintre lucrătorii dumneavoastră ca un sclav pentru actualizări de server de locuri de muncă de control la surse de date va scurgă în jos frumos pentru muncitorii fără o creştere foarte mare în activitatea de reţea (cu excepţia cazului în care este să efectuaţi o mare de actualizare a datelor şi tuturor angajaţilor, lovi cu piciorul în la o dată). Acest lucru are avantaje de peste rsync în care nu s-ar obţine o pauză lungă înainte de fiecare loc de muncă, ca şi actualizările bazei de date, mysql daemon-ul pe lucrător dvs. se va actualiza continuu în timp ce datele sale de procesare continuă.

Acesta este modul în care am înfiinţat serverul meu demonstraţie. Pentru a configura replicare am urmat ghidul de pe site-ul MySQL ( Configurarea replicare ), şi în termen de 20 de minute am avut asistentul meu inital replicarea de control de locuri de muncă setul de date servere. Pentru fiecare lucrător suplimentar setările de replicare şi de proces a lucrat de fiecare dată când VM a fost copiat.

Rezumat

În această secţiune din articol ne-am uitat la cat de usor si fara durere este de a menţine codul de procesare până la data de rsync using sau subverion (SLO), pentru a face locul de muncă şi de a reduce traficul de reţea de la time. acelaşi Am discutat, de asemenea, modul în care pentru a păstra informaţiile dvs. de date sursă până la data de, permiţându-i să se scurgă în jos pentru fiecare dintre muncitorii. Astfel, am zona de asigurarea faptului că ne ţine pasul cu logica de afaceri şi de informaţii în sistemul nostru de reţea de birou. Nu va fi în mod evident nenumarate alternative la efectuarea acestor 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.

Înainte de timp

În ultima parte a acestei serii, pe bună dreptate numit Partea 5 , vom discuta despre implementarea acestui sistem pentru. Voi rezuma ceea ce a fost învăţat şi ceea ce am reuşit să creeze.

Grid Computing birou folosind medii virtuale - partea 3

De , vineri, 04 decembrie 2009 23:37

Introducere

Eu lucrez intr-o companie unde vom rula multe locuri de muncă lot de prelucrare de milioane de înregistrări de date în fiecare zi şi m-am gândit recent cu privire la toate maşinile care stau în jurul valorii de fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini pentru a consolida 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 reţea utilizând medii virtualizate.

În partea a 2- ne-am uitat la un server de locuri de muncă se va desfăşura, ş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 dvs. - sau server Bizkit

Următorul pas în acest proces este de a crea muncitorii virtuale. Pentru acest lucru am de gând să folosească o instalaţie de CentOS folosind VirtualBox. Am de gând pentru a instala MySQL şi PHP pe server, de asemenea, cunoscut ca un Bizkit (Li vomica, m ySQL, P HP) Servera (poate am făcut ca numele de sus).

  • Instalaţi VirtualBox pe maşina Windows (urmaţi link-ul)
  • Descărcaţi şi instalaţi CentOS (curent versiunea 5.3), într-o maşină virtuală creată

Nu e nici un punct de gând să-mi asta nu e, probabil, e 1000 "de tutoriale mari acolo (OK, aici e una: Crearea şi CentOS Managing maşină virtuală sub VirtualBox ). Punct important de notat Presupun că am numit maşina mea virtuală GridMachine.

În ceea ce priveşte alegerile mele de client de virtualizare şi de sistemul de operare merge nu există nici un motiv de mare convingător pentru fiecare alegere. VirtualBox este ceva Eu folosesc pe masina de casa mea şi este susţinută de cele trei sisteme de operare majore. Am ales ca CentOS de un sistem de operare stabil si bun sa-l folosesc pe serverul meu de web. Sunt un mare credincios în instrumentele potrivite pentru locuri de muncă (deşi am aplicare a "utiliza mai rapid si cel mai usor pentru tine" mentalitatea de aici), aşa că, dacă sistemul de operare ruleaza X codul mai repede si mai eficient utiliza că, în loc :)

Este important de asiguraţi-vă că VM utilizează DHCP, de altfel pentru fiecare maşină virtuală nouă ar trebui să fie configurat separat, care este ceva ce noi nu utilizaţi DHCP want.By nu avem nevoie să configuraţi setările de reţea individual pentru maşinile lucrătorilor, DHCP va înmâna din IP-uri pentru tine. Prin urmare, aveţi posibilitatea să copiaţi maşina virtuală despre biroul fără griji despre configurarea fiecare sus (acest lucru îmbunătăţeşte scalabilitatea şi reduce administrare muncitor).

Procesul ar trebui să urmărească atingerea ar fi de a obţine o maşină nouă fizic, de instalare VirtualBox, şi apoi destul de mult de mobilizare a imaginii virtuale, fără nimic altceva. Acesta ar putea fi înţelept pentru a seta toate lucrătorilor pe o subreţea diferită, astfel încât să puteţi cel puţin vedea cât de multe maşini sunt difuzate. Veţi avea nevoie, de asemenea, pentru a configura maşinile pe un închiriere pe termen lung sau nelimitat DHCP de leasing.

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

Aceasta este o zonă interesantă şi există mai multe metode valabile pentru procesarea de locuri de muncă pe lucrător. Aici voi discuta doar două dintre cele mai evidente:

  • Rularea script perpetuu: Un script, fie un script de shell, sau un script PHP este executat o singură dată pe lucrător şi se execută ca parte a unui buclă infinită. Am actualizate această metodă ca un accident de script-ul şi potenţial muncitorii vor înceta să ruleze fără un fel de intervenţie.
  • Executarea script cron pe bază de: la fiecare X minute cron daemon începe un apel către script-ul pentru a obţine lucrurile sa mearga. Fără un control acest lucru ar putea duce la multe, multe exemplare de rulare dvs. script lucrător.

Decizia mea a fost să meargă cu cron, care începe de pe un script de shell fiecare minutes. 10 script-ul meu shell îndeplineşte următoarele sarcini:

  1. Obţineţi o listă de proces şi grep acest lucru pentru "php". În cazul în care nu a fost găsit continua.
  2. Sunaţi codul de locuri de muncă, în cazul meu, acest lucru ar fi ceva pe baza PHP
  3. Script lucrător completează termen de
  4. Gata pentru a merge din nou la apel corespunzătoare următoarea

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

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

Notă: ecoul sunt aproape complet lipsit de sens, dar poate ajuta la următoarea persoană care vine de-a lungul şi de a încerca să le editaţi.

Concluzionează că înfiinţarea de lucrător maşinii virtuale, rapid, simplu şi uşor de a copia la fiecare nouă piesă de hardware, care este primit. "Inteligenta" a sistemului de reţea într-adevăr, nu este în sistemul de operare vizualizate, sa de-a face cu codul creat la locuri de muncă, proces de configurare de locuri de muncă, şi în a asigura că locul de muncă se execută atunci când este cazul (adică atunci când gazda este în aşteptare ).

Configurarea Windows pentru a iniţializa lucrătorilor

Prima sarcină este de a lucra în comandă necesar pentru a rula maşina virtuală de la linia de comandă Windows. Dacă aţi instalat VirtualBox în locaţia implicită şi aţi numit dvs. de lucrător GridMachine apoi comanda necesară pentru a încărca până lucrător este:

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

Toate acestea, pentru a rula script-ul într-o "fără 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 graţios. Al doilea argument se opreşte PDR, astfel că nu intră în conflict cu Windows RDP, sau să dea un mesaj cu privire la ascultare pe portul 3389. Numele maşinii virtuale este sensibil la majuscule!

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

sarcinilor programate

Apoi apasă click pe "Adauga sarcină programată", urmat de răsfoiţi pentru a adăuga un program personalizat. Navigaţi la script-VBoxManage şi faceţi clic pe OK. Programaţi sarcina dvs. pentru oricare dintre opţiuni (vom schimba acest lucru într-un minut), şi a continua. După sărind peste urmatorul ecran Windows vă va întreba care doriţi să executaţi această sarcină, aş sugera fie "administrator" sau de a crea un utilizator nou privilegiat. Amintiţi-vă că nu vrea să interfereze cu cont personal standard de pe masina de la orice punct. Faceţi clic pe Următorul şi de a verifica Afişare opţiuni avansate pentru această sarcină.

Pentru sfârşitul de text pe termen adăuga nostru "startvm GridMachine" şir şi să se asigure că funcţionează numai atunci când este conectat la stânga unticked. Vizitaţi sarcină programul următor şi de a schimba programul scadea la opţiunea "atunci când inactiv", alegeţi cantitatea de timp pe care doriţi ca aparatul să fie idle, înainte de a trece la următoarea filă.

În cele din urmă debifa opţiunea care prevede opri sarcina în cazul în care acesta 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.

programa

Asta-l apoi pentru configurarea gazdă Windows!

Rezumat

În această parte, am stabilit o maşină virtuală de a acţiona în calitate de lucrător, precum şi modul în care noi o numim şi să execute script-uri de locuri de muncă noastre de prelucrare (pentru mine un script PHP). De aici ne uităm la modul de a configura copii nostri de Windows pentru a porni la maşina virtuală în modul fara cap atunci cand calculatorul devine inactiv, şi de a salva starea sa atunci când utilizatorul se reia de utilizare a maşinii. Sperăm că în acest moment vedeţi cât de simplu este de a crea un astfel de sistem şi sunt mâncărime pentru a obţine unele experimente te merge!

Înainte de timp

În partea 4 , vom fi uitat la utilizarea instrumentelor pentru a vă asigura că rulaţi ultima versiune a surselor de cod şi de date, astfel că rezultatele obţinute sunt întotdeauna la curent cu cele mai recente informaţii de afaceri şi de logică.

Grid Computing birou folosind medii virtuale - Partea 1

De , vineri, 04 decembrie 2009 11:23

Introducere

Eu lucrez intr-o companie unde vom rula multe locuri de muncă lot de prelucrare de milioane de înregistrări de date în fiecare zi şi m-am gândit recent cu privire la toate maşinile care stau în jurul valorii de fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini pentru a consolida 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 reţea utilizând medii virtualizate.

Ca un PHP Developer am de gând să utilizeze instrumentele pe care le folosesc în fiecare zi 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 în funcţie de tipul de prelucrare am nevoie pentru a realiza toate acestea, acest lucru nu poate fi adevărat, prin întregul articol ca voi schimba lucrurile pentru simplitate, sau pentru a produce mai multe scenarii interesante de utilizare.

Aceste medii virtualizate va rula pe maşini Windows, deoarece acest lucru este ceea ce majoritatea birourilor alerga. De prelucrare 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 la maşinile noi, măsură ce acestea devin disponibile. De asemenea, noi maşini virtuale nu ar trebui să necesită nici o configurare suplimentară, deoarece aceasta reduce semnificativ scalabilitatea şi uşurinţa în care reţeaua poate fi extins.

De ce să implementaţi un Grid Computing Office?

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

  • Tu nu va încredinţa anumite date într-un mediu cloud computing
  • Nu se pot pune anumite date într-un mediu cloud computing pentru motive juridice (de exemplu, date ieşirea din ţară), potenţial pentru motive legale, de exemplu, înregistrările NHS.
  • Doriţi să păstraţi de unităţi de procesare a închide şi au control deplin asupra hardware-ul prea
  • Tu nu au fonduri de proiect pentru a executa instanţe nor
  • Biroul tau nu are o conexiune la internet şi, prin urmare, sa nu este posibil de a utiliza o resursă nor
  • Tu nu le place de ploaie, nori de ploaie sugerează, prin urmare, vă ţine departe

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

Avantajele unui Grid Computing Oficiul

Ei bine, vă permite să faceţi unele matematica (şi, în stil fizica adevărat vă permite să facă unele ipoteze radicale). Imaginaţi-vă că aveţi server de mare de procesare de 100 de locuri de muncă musculos care rulează pe zi. În biroul dumneavoastră aveţi 50 de maşini care sunt în aşteptare de 16 ore pe zi, fiecare dintre aceste maşini este de 10%, la fel de puternic ca Sever de procesare musculos. (Toate rezultatele de aici sunt rotunjite pentru a subestima creştere a performanţei).

Deci, 1 masina de putere * 10% * 2/3 ori = 0.067 adică 1 de procesare desktop, în timp inactiv ar putea procesa 6 locuri de muncă complete pe zi.

Dacă scara acum asta este nevoie de 15 desktop-uri inactiv pentru a procesa cât mai multe locuri de muncă pe zi, ca server-ul dvs. principală de procesare nu.

Deci, în biroul nostru pretend a 50 de masini noi ar putea creste puterea noastra de procesare de la 1 server de până la 4 servere de prelucrare complete, sau am putea fi de prelucrare de 400 de locuri de muncă pe zi în loc de 100.

Comunicarea, de nici o investitie in hardware nou compania ta tocmai a crescut de capacitate de prelucrare a lotului de 4 ori! Potenţial ai de gând să crească de utilizare a ta putere, ci de la cele mai multe medii de birou am fost la maşini sunt, în general, lăsate peste noapte oricum, aşa că ai putea vedea acest lucru ca pe o iniţiativă verde.

Alte avantaje, de asemenea, înseamnă 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ă, aşa cum sa-ti imbunatatesti puterea de maşini de birou dvs. grila de la birou devine mai puternic în mod automat.

Tehnologii

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

  • Maşini de birou Idle (in cazul meu o rezervă vechiul Windows XP laptop)
  • VirtualBox (sau un alt client software-ul de virtualizare)
  • O maşină virtuală, cu PHP, mySQL running execută o tăietură în jos sistemul de operare, eu sun aceste servere Limp mele :)
  • Locuri de munca pentru a rula
  • Serverul de locuri de muncă (poate fi o altă maşină virtuală undeva)

Locuri de munca tipice

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

  • Sistemul primeşte o listă de date pe care avem nevoie pentru a se potrivi şi a returna rezultate
  • Potrivirea implică verificarea / cauta mai multe surse (destul de statică) de date
  • Rezultatele de la surse de date poate solicita validarea în continuare, fuziunea, verificarea surselor de date suplimentare, ca răspuns la rezultatele
  • Datele sunt returnate cu înregistrări care se potrivesc, pe deplin validate şi prelucrate
  • Fiecare înregistrare într-un loc de muncă este independent de restul

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

Soluţii de reţea nu sunt numai avantajoase pentru procesarea 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. Vezi acest Wikipedia pentru exemple şi mai multe informaţii: Grid Computing , dar o serie de exemple celebre sunt SETI @ home şi BIONC . Nu sunt cadre de funcţionare grile de calcul, iar acestea sunt bine în valoare de căutaţi în.

Ceea ce vom realiza?

Până la sfârşitul anului aceste 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 unui aparat de procesare virtuală corespunzătoare
  • Cum se setează sistemul de pe un calculator cu Windows
  • Asigura-te ca sunt folosind cele mai noi şi codul de date
  • Desfăşurare şi benchmarking
  • Privind înainte

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

Acest lucru este în nici un fel menirea de a demonstra un sistem complet de lucru robust, sa însemnat mai mult de o demonstraţie şi discutarea arată că aceste lucruri pot fi realizate într-un spaţiu rezonabil de scurt de timp si la costuri mici. Vă rugăm să nu ezitaţi să-mi trimiteti orice comentarii, corecturi sau îmbunătăţiri, şi voi face meu cel mai bun de a menţine acest articol actualizat pentru a se potrivi.

Înainte de timp

În partea 2 , voi începe prin a uita de la sistemul de control de locuri de muncă, şi să caute locuri de muncă în modul în care 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.

Grid Computing birou folosind medii virtuale - Partea 2

De , vineri, 04 decembrie 2009 11:23

Introducere

Eu lucrez intr-o companie unde vom rula multe locuri de muncă lot de prelucrare de milioane de înregistrări de date în fiecare zi şi m-am gândit recent cu privire la toate maşinile care stau în jurul valorii de fiecare zi nu face nimic pentru mai multe ore. Nu ar fi bine dacă am putea folosi aceste maşini pentru a consolida 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 reţea utilizând medii virtualizate.

În partea 1 -am dat o imagine de ansamblu a sistemului şi tehnologii Eu voi fi folosind, precum şi discutat ca unele dintre motivele posibile de ce ar vrea să creeze o reţea 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 un mod de a le gestiona. Sistemul dvs. de control de locuri de muncă (pe server-ul dvs. de locuri de muncă) trebuie să fie foarte bine gândit înainte de a încerca chiar şi pentru a conduce o reţea de birou. Deci, în primul rând, care sunt sarcinile pentru un sistem de control de locuri de muncă:

  • Înmâna de locuri de muncă, la cerere, de la muncitori
  • Spune lucrătorilor ce tip de locuri de muncă pentru a rula
  • Urmărire de locuri de muncă
  • Asiguraţi-vă că de locuri de muncă sunt doar rula o singură dată
  • Furnizarea de date de locuri de muncă pentru lucrători, sau cel puţin să le spună unde să-l

De asemenea, sistemul trebuie să fie extensibil, 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ă ar fi de afaceri vede în valoare de o soluţie de reţea. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

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

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  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:

  • De locuri de muncă de dimensiuni, 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 (probabil cea mai lunga perioada de timp inactiv)
  • 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.

Rezumat

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.

Office Grid Computing using Virtual environments – Part 5

By , Friday 4th December 2009 11:03 pm

Introducere

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

Opreste-te!

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 Theme by Themocracy

7 visitors online now
5 guests, 2 bots, 0 members
Max visitors today: 19 at 05:00 am UTC
Aceasta luna: 26, la 04-04-2012 10:27 UTC
În acest an: 69 la 27-02-2012 09:56 am UTC
Tot timpul: 130, la 28-03-2011 10:40 UTC