Kategori: PHP

Rute anmodninger om sitemap.xml til brugerdefineret controller / handling

Ved , Onsdag 6 jan 2010 12:13

For at direkte anmodninger til / sitemap.xml til en brugerdefineret controller og handling i din Zend Framework ansøgning blot tilføje følgende i din application.ini eller alternative config fil (fx jeg bruger navigation.ini):

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

Eksempel kode for udsende kan ses ved at skabe en handling i det pågældende controller (f.eks mit Sitemap ligger i indekset controlleren, sitemap handling):

 < php
 klasse IndexController
     udvider Zend_Controller_Action
 {
     / **
      * Gør en sitemap baseret på Zend_Navigation setup
      * /
     offentlig funktion sitemapAction ()
     {
    	 echo $ this-> Vis-> navigation () -> Sitemap ();
    	 $ This-> Vis-> layout () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps kan hurtigt og let kan genereres ved hjælp af Zend_Navigation , en stor hurtig tutorial (og generelt meget nyttigt for Zend Framework selvstudier) er Zend Afstøbninger - Dynamisk skabe en menu af et Sitemap og rasp .

Zend Framework Per-modul baseret indstillinger

Ved , Fredag ​​1 Jan 2010 22:40

Jeg har oprettet en opfølgning til dette indlæg, som kræver mindre konfiguration, se Modul baseret layout - Zend Framework .

Ved brug af Zend Framework med moduler, dens indlysende, at hvis du kører forskellige (sub-) steder fra samme program, du ikke nødvendigvis vil have samme layout scripts for hver del. Jeg besluttede at gå med følgende websted struktur:

  / Anvendelse
     / Controllere
         ...
     / Modeller
     / Moduler
         / Default
             / Controllere
             / Layout
                 / Scripts
             / Visninger
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Problemet var at oprette layoutet scripts på en per-modul basis. Svaret kom igennem ved hjælp af en Handling Helper. Opsætning af layout på en per-modul grundlag omfatter tre trin:

  1. Application.ini (eller lignende konfiguration opsætning):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layout / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layout / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / Medlem / layout / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layout / scripts" 
  2. Opret din Handling Helper:
      <? Php
     / **
      * Sætter layoutet sti på en per-modul grundlag
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Siden 2010/01/01
      * /
     klasse Pro_Controller_Action_Helper_SetLayoutPath
         udvider Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Indstiller layout vej baseret på modul
          * /
         offentlig funktion preDispatch ()
         {
        	 $ Modul = $ this-> GetRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('bootstrap')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ modul] ['ressourcer'] ['Layout'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ modul] ['ressourcer'] ['Layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('Layout')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Og endelig boostrap handlingen hjælper:
      ...
         / **
          * Indstiller op layoutet scripts på en per-modul grundlag
          * /
         beskyttet funktion _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         nye Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Lære: DATETIME standard NU ()

Ved , onsdag 30 december, 2009 18:30

Jeg har kæmpet med at oprette en database skema for en ny Zend Framework -projekt. Jeg er hjælp prøver at bruge Lære ORM til min database modeller. Jeg har brug for at oprette det skema, så det tilladt mig at sætte en standard dato og tid til en `datetime` kolonnen, fx når der tilføjes en ny besked jeg får de aktuelle tidsstempel. Efter megen søgen og eksperimenterer jeg fundet løsningen, så jeg deler den.

I dit skema YAML fil blot gøre følgende:

 Besked:
   actAs:
     Timestampable:
       Oprettet:
         navn: created_at
         type: tidsstempel
         Format: Ymd H: i: s
       opdateret:
         navn: last_updated
         type: tidsstempel
         Format: Ymd H: i: s
   kolonner:
     id:
       type: heltal
       primære: sandt
       autoincrement: sandt
     Navn: string (255)
     e-mail: string (300)
     besked: string (2000)

Hvis på den anden hånd, du ikke ønsker et `updated_at` kolonnen, kan du bruge følgende:

 Besked:
   actAs:
     Timestampable:
       Oprettet:
         navn: created_at
         type: tidsstempel
         Format: Ymd H: i: s
       opdateret:
         deaktiveret: sandt
   kolonner:
     id:
       type: heltal
       primære: sandt
       autoincrement: sandt
     Navn: string (255)
     e-mail: string (300)
     besked: string (2000)

PHP Design Patterns - Observer Pattern

Ved , Tirsdag 29 Dec 2009 22:02

Jeg har læst Head First Design Patterns for nylig og har besluttet at skrive nogle af de mønstre, som PHP eksempler, for min egen fordel. Den første, som jeg har besluttet at kode op er Observer Pattern . Den formelle definition af Observer Pattern er:

Observatøren mønster (en delmængde af den asynkrone offentliggøre / abonnere mønster ) er en software- design mønster , hvor et objekt , kaldet emnet, vedligeholder en liste over sine pårørende, kaldet observatører, og meddeler dem automatisk i nogen stat ændringer, som regel ved at kalde en af deres metoder . Det er hovedsageligt bruges til at implementere distribuerede hændelseshåndtering systemer.

Som systemer bliver mere løst koblet og sørg for, at når en begivenhed, der sker alle systemer, der kræver viden om disse opdateringer er informeret. For eksempel, et blog-indlæg, efter at spare en stilling vi måske nødt til at opdatere en søgemaskine (fx Lucene), opdatere vores sitemap, tags, e-mail tegnet brugere osv. Observatøren mønster giver udviklere mulighed for at tilføje flere lyttere uden at redigere deres observerbare objekt . Ved at indsprøjte observatører (dvs. en søgemaskine opdatere observatør, en sitemap generator osv.) ind i et emne (dvs. blogindlæg redigeringssystem) kan vi give den til at udføre alle de nødvendige opdateringer uden ændringer.

Fortsæt læsning 'PHP Design Patterns - Observer Pattern' »

Office Grid Computing ved hjælp af virtuelle miljøer - Del 4

Ved , fredag ​​4 Dec 2009 11:59

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 3 har vi skabt vores virtuelle forarbejdning maskine og oprette Windows-maskiner for at blive ledig-deltidsansatte.

Kører den nyeste koden

Uundgåeligt Når du har oprettet dine medarbejdere forretningslogik vil ændre sig, vil fejl blive fundet, vil hurtigere, mere effektiv kode, der produceres hvilket giver dine medarbejdere sad omkring behandling af data ved hjælp af gamle ildelugtende kode . Hvordan så sikrer vi, at vi altid bruger de nyeste og bedste version af vores behandling af scripts?

Der er et par meget nemme enkle måder vi kunne gøre dette, det trick, er imidlertid at reducere behandlingstiden magt og netværkstrafik i at opnå dette. Lad os starte med det simpleste af løsninger og forbedre det langsomt over et par iterationer.

Den første metode ville være simpelthen at oprette forbindelse til vores job Control Server (via samba, FTP eller lignende) og træk ned den seneste version af koden. Ikke meget effektiv, men det vil gøre arbejdet. Lad os forbedre på, at noget, hvordan om at skabe et rsync script og brug, at hver gang i stedet? Alternativt hvad med at sætte vores nyeste behandling script til undergravende virksomhed tjekker ud koden i første omgang og så bare opdatere vores kode på hver kørsel ( svn update )?

I sidste ende kunne vi ende op med et bash script (kaldes af cron hver 10 minutter), der ser lige så simpelt som dette:

  #! / Bin / sh
 hvis ps ax | grep-v grep | grep php > / dev / null
 Derefter
     echo "Job er i øjeblikket behandling, frakørsel"
 andet
     echo "Job ikke kører, skal du starte nu"
     cd / sti / til / arbejde / kopiere
     svn update
     php yourJobProcessingScript.php
 fi 

Nu kan vi være sikre på, at med hvert løb er vi absolut køre den nyeste kode. Vi sikrer dette ved at opdatere vores kodebase hver eneste gang vi udfører en løbetur og reducerer netværkstrafik ved kun at overføre filen forskelle på tværs af vores netværk.

I min demonstration setup, gjorde jeg præcis som ovenfor. Subversion blev installeret på mit job forarbejdning server og jeg simpelthen trak den nyeste kode fra en »arbejdstager« gren ved hjælp af 'svn update'. Jeg har også tilføjet en versionsnummer mærke til min behandling script, som blev returneret til databasen som en del af resultaterne afkast. På den måde kunne jeg se, at min kode var ved at blive opdateret hver gang jeg kopieret min kuffert i arbejdstagerens gren, dvs at jeg var helt kører med den nyeste behandling af scriptet.

Ved hjælp af de nyeste data

Hvis dit job forarbejdningen gør brug af datakilder så på et tidspunkt disse vil blive opdateret. Medmindre du ringe til din datakilder på en meget sjælden grundlag du vil oversvømme netværket med trafik, så snart dine medarbejdere begynde at køre bringe alting i stå. For min løsning, besluttede jeg at jeg vil flytte mine data kilder rundt med mine VM'er.

Hold du er heste der! Hvad nu hvis mine data kilder er enorme? Nå det er virkelig et tilfælde af hvor mange data vi taler? Det kan være mere omkostningseffektivt at installere en ekstra større harddisk i hver maskine, end at købe en ekstra behandling server. Dette er et spørgsmål om budget og er op til virksomheden at afgøre. Det måske, at dine data kilder er så store, at det bare umuligt at holde, at mængden af data i dit arbejdstager maskiner. I så fald hvad ville du gøre? Godt vi kunne se på at kalde en lokal data-server, men dette kan forårsage problemer med netværket. I dette tilfælde et gitter system som dette kan blive urealistisk at inkludere i dit kontormiljø. Det kan også være, at du kan se i alternative kører strategier, for eksempel kun at kalde dine arbejdere fra 08:00 til 06:00 hver aften og / eller kvæle datakilde anmodninger.

Flytning på lad os sige vores datakilder beløbe sig til 100 GB data. Nå ja, det er en hel del data for at flytte rundt på nettet på en opdatering. Hvordan vil vi sikre, at vi har den seneste kopi af data i denne sag? Rsync er en mulighed, men jeg personligt tror, ​​ved at køre dine seneste datakilde på din jobbehandling server og konfigurere dette som en mester i replikation (med en dejlig lang bin log) kan være vejen at gå:

replikering Ved at indstille hver af dine medarbejdere op som en slave til jobbet Control Server opdateringer til dine data kilder vil sive ned pænt til dine medarbejdere uden en enorm stigning i net-aktivitet (det er medmindre du udfører en kæmpe data opdatering samt alle dine medarbejdere spark i på én gang). Dette har fordele frem for rsync i, ​​at du ikke ville få en lang pause, før hvert job, som database opdateringer, mysql vil daemon på din arbejdstager løbende opdatere sine data, mens behandlingen fortsætter.

Dette er hvordan jeg oprettet min demonstration server. For at opsætte replikering Jeg fulgte guiden på mySQL stedet ( Opsætning replikering ), og inden for 20 minutter, som jeg havde min inital arbejdstager kopiere jobbet kontrol servere datasæt. For hver yderligere arbejdstager replikation indstillinger og processen arbejdede hver gang, da VM blev kopieret.

Resumé

I dette afsnit af artiklen har vi set på, hvor nemt og smertefrit det er at holde din behandling koden up to date med using rsync eller subverion (SVN) til at gøre arbejdet og reducere netværkstrafikken på samme time. Vi har også diskuteret, hvordan at holde dine oplysninger om datakilden up-to-date ved at lade den sive ned til hver af dine medarbejdere. Således vi område at sikre, at vi holder op med forretningslogik og information på vores kontor skinnesystem. Der vil naturligvis være utallige alternativer til at udføre disse opgaver, men her var to simple eksempler for at vise, hvor let en løsning er at komme forbi.

Næste gang

I den sidste del af denne serie, rammende opkaldt kapitel 5 , vil vi diskutere at implementere dette system. Jeg vil sammenfatte hvad der er blevet lært, og hvad jeg formåede at skabe.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 3

Ved , fredag ​​4 Dec 2009 23:37

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 2 ser vi på de job, en server vil køre, og hvordan job skal konfigureres for at opnå størst forarbejdningsstøtte samtidig sikre, at hvert job er behandlet, uden at mislykkes.

Opsætning af din arbejdsplads - eller halte server

Det næste skridt i processen er at oprette din virtuelle medarbejdere. For denne jeg har tænkt mig at bruge en installation af CentOS bruge VirtualBox. Jeg har tænkt mig at installere mySQL og PHP på serveren, også kendt som en slatten (Li nux, m ySQL, P HP) Servera (jeg kan have gjort dette navn op).

  • Installer VirtualBox på din Windows-maskine (følg link)
  • Hent og installer CentOS (nuværende version 5.3) inden for en oprettet virtuel maskine

Der er ingen mening mig at gå til dette er der nok 1.000 'er af stor tutorials derude (ok, her er en: Oprettelse og Managing CentOS virtuel maskine under VirtualBox ). Det vigtige punkt at bemærke Jeg formoder, er, at jeg ringede til min virtuelle maskine GridMachine.

For så vidt angår mit valg af virtualisering klient og operativsystem gå der ikke er nogen stor tvingende grund for hvert valg. VirtualBox er noget, jeg bruger på min hjemme maskine, og er støttet af de tre store operativsystemer. Jeg valgte CentOS som sin et godt stabilt OS og jeg bruger det på min egen webserver. Jeg er en stor tilhænger af det rigtige værktøj til opgaven (selvom jeg anvender 'brug den hurtigste og nemmeste for dig' mentalitet her), så hvis styresystemet X kører din kode hurtigere og mere effektivt bruge dette i stedet:)

Det er vigtigt at sikre, at din VM bruger DHCP, ellers for hver ny virtuel maskine vil skulle konfigureres særskilt hvilket er noget, vi ikke want.By bruger DHCP vi behøver ikke at konfigurere netværksindstillinger individuelt for arbejdstager maskiner, vil DHCP hånd ud IP'er for dig. Derfor kan du kopiere din virtuelle maskine om kontoret uden at bekymre sig om opsætning hver en op (Dette forbedrer skalerbarhed og reducerer arbejdstager administration).

Den proces, du bør sigte på at opnå ville være at få en ny fysisk maskine, installere VirtualBox, og derefter stort set installere virtuelle billede uden meget andet. Det kan være klogt at sætte alle dine medarbejdere på et andet subnet, så du kan i det mindste se, hvor mange maskiner kører. Du skal også oprette dine maskiner på en lang lejekontrakt eller ubegrænset lejemål DHCP.

Sådan køres job på arbejdstageren

Dette er et interessant område, og der er flere gyldige metoder til behandling af jobs på arbejdstageren. Her Jeg vil bare diskutere de to mest oplagte:

  • Bestandigt at køre script: Et script, det være sig en shell script, eller et PHP script udføres én gang på arbejdstageren og kører som en del af en uendelig løkke. Jeg har diskonteret denne metode som et brag af manuskriptet og potentielt dine medarbejdere vil ophøre med at køre uden en form for intervention.
  • Cron baseret script udførelse: Hvert X minutter cron daemon starter et opkald til dit script til at få tingene i gang. Uden en vis kontrol af dette kan føre til mange mange kopier af dine arbejdstager scriptet kører.

Min beslutning var at gå med cron, som starter en shell script hver 10 minutes. Mit shell script, udfører følgende opgaver:

  1. Få en proces liste og grep dette for 'php'. Hvis den ikke findes derefter fortsætte.
  2. Ring til dit job kode, i mit tilfælde ville det være noget, der bygger PHP
  3. Worker scriptet afslutter sit løb
  4. Klar til at gå igen på det næste passende kalder

Min bash script ser ud som følger:

  #! / Bin / sh
 hvis ps ax | grep-v grep | grep php> / dev / null
 Derefter
     echo "Job er i øjeblikket behandling, frakørsel"
 andet
     echo "Job ikke kører, skal du starte nu"
     php yourJobProcessingScript.php
 fi 

Bemærk: ECHO er næsten fuldstændigt meningsløst, men det kan hjælpe den næste person, der kommer sammen for at prøve og redigere dem.

Hermed er opsætningen af ​​arbejderen virtuelle maskine, hurtig, enkel og nem at kopiere til hvert nyt stykke hardware, der er modtaget. Den 'dygtighed' af elnettet er virkelig ikke i visualiseret OS, det hele at gøre med den kode, der oprettes til at behandle job, jobbet konfiguration, og i at sikre, at jobbet kører når det er relevant (dvs. når værten er inaktiv ).

Opsætning af Windows for at initialisere Workers

Den første opgave er at arbejde ud af den kommando kræves for at køre den virtuelle maskine fra vinduerne kommandolinjen. Hvis du har installeret VirtualBox på standardplaceringen, og du har kaldt dit arbejdstager GridMachine derefter kommandoen kræves for at indlæse dine arbejdstager er:

  "C: \ Programmer \ søn \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Men at køre script i en "hovedløs" state vi er nødt til at bruge:

  "C: \ Programmer \ søn \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Dette vil starte den virtuelle maskine uden GUI og gør det muligt at spare staten yndefuldt. Det andet argument slukker RDP, så det ikke i konflikt med Windows RDP, eller give dig en besked om at lytte på port 3389. Den virtuelle maskine navn er store og små bogstaver!

Dernæst vil vi nødt til at sætte vinduer på op til kick off vores arbejdstager VM, når maskinen har været inaktiv. For at gøre dette (på Windows XP) Du bliver nødt til at gå Start -> Alle Programmer -> Tilbehør -> Systemværktøjer -> Planlagte Opgaver som nedenfor:

planlagte opgaver

Klik derefter på 'Tilføj Scheduled Task "efterfulgt af Gennemse for at tilføje et brugerdefineret program. Navigere til din VBoxManage script og klik ok. Planlæg din opgave for nogen af ​​de muligheder (vi vil ændre dette i et minut) og fortsætte. Efter at springe det næste skærmbillede Windows vil spørge dig, hvem du vil køre denne opgave, ville jeg foreslå enten 'Administrator' eller oprette en ny bruger med rettigheder. Husk at vi ikke ønsker at blande sig med den standard personalet konto på maskinen på noget tidspunkt. Klik på Næste og kontrol viser, avancerede indstillinger for denne opgave.

Til slutningen af kørslen tekstfeltet tilføje vores 'startvm GridMachine' snor og sikre, at der kun kører, når logget ind er tilbage unticked. Besøg tidsplanen opgaven næste og ændre tidsplanen drop ned til indstillingen ', når tomgang', vælge den tid, du ønsker at maskinen skal være ledig, før man går videre til næste fane.

Endelig Fjern markeringen den mulighed, der hedder at stoppe den opgave, hvis den har kørt X tid, men kryds mulighed for at stoppe den opgave, hvis maskinen ikke længere er ledig.

tidsplan

Det var det så for Windows host setup!

Resumé

I denne del har vi oprettet en virtuel maskine til at fungere som en arbejdstager, samt den måde, hvorpå vi kalder og udføre vores job behandling scripts (for mig selv en PHP script). Herfra ser vi på, hvordan du opsætter vores kopier af Windows til at starte den virtuelle maskine i hovedløse tilstand, når computeren bliver ledig, og gemme dens tilstand, når brugeren genoptager brugen af ​​maskinen. Forhåbentlig på dette punkt du ser hvor nemt det er at etablere et sådant system og er kløe at få nogle eksperimenter gang selv!

Næste gang

I Kapitel 4 vil vi se på ved hjælp af værktøjer til at sikre, at du kører den nyeste version af kode og data kilder, så opnåede resultater er altid up-to-date med de nyeste forretningsoplysninger og logik.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 1

Ved , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

Som en PHP udvikler jeg har tænkt mig at bruge værktøjer, som jeg bruger hver dag, nemlig, Linux, mySQL , PHP, VirtualBox og undergravende virksomhed (SVN). Men jeg håber, at denne guide vil tilpasse sig andre sprog og teknologier lige så godt.

Den løsning jeg give vil være meget løst baseret på den type behandling vi havde brug for at opnå men dette kan ikke være rigtigt igennem hele artiklen, som jeg vil ændre tingene til enkelthed, eller til at producere mere interessant brug scenarier.

Disse virtualiserede miljøer, der kan køre på windows maskiner, da dette er hvad de fleste af kontorer køre. Behandlingen, at kontormaskiner ikke bør ikke gribe ind med personale ved hjælp af disse maskiner, bør kræve, ingen vedligeholdelse på maskinen, og være let indsættes til nye maskiner, som de bliver tilgængelige. Desuden bør nye virtuelle maskiner, der ikke kræver nogen yderligere konfiguration, da det reducerer skalerbarhed og lethed, hvor elnettet kan udvides.

Hvorfor Implementer et Office Computing Grid?

For det første du tænker måske, hvorfor ikke bare bruge en cloud computing ressource såsom Amazons EC2-platform ? Nå årsagerne kan være flere, for eksempel:

  • Du vil ikke overdrage visse data til en cloud computing miljø
  • Du kan ikke sætte bestemte data i et cloud computing miljø for juridiske årsager (f.eks data forlader landet), potentielt af juridiske årsager, fx NHS optegnelser.
  • Du ønsker at holde din forarbejdningsenheder tæt og har fuld kontrol over hardware også
  • Du behøver ikke projektmidlerne til at køre cloud tilfælde
  • Dit kontor har ikke en forbindelse til internettet og dermed dets ikke muligt at bruge en sky ressource
  • Du ikke kan lide regn, skyer tyder regn, derfor skal du holde sig langt væk

Jeg er sikker på listen kunne fortsætte, men jeg tror, ​​det er nok for nu.

Fordele ved et kontor Computing Grid

Nå, lad os lave noget matematik (og i ægte fysik stil lader foretage nogle fejende antagelser). Forestil dig at du har stor velnæret behandling server, der kører 100 arbejdspladser om dagen. I dit kontor, du har 50 maskiner, der er inaktive 16 timer om dagen, hver af disse maskiner er 10% så stærk som din velnæret behandling skille. (Alle resultater her er afrundet til at undervurdere performance stigning).

Så kunne 1 maskine * 10% strøm * 2 / 3 tid = 0,067 dvs 1 desktop-forarbejdning i spildtid proces 6 Fuld job om dagen.

Hvis du nu skalere det op det tager 15 tomgang desktops til at behandle så mange arbejdspladser pr dag, som din vigtigste behandling server gør.

Så i vores foregive kontor på 50 maskiner, vi kunne øge vores regnekraft fra 1 server op til 4 fulde behandling servere, eller vi kunne være behandlingen 400 arbejdspladser om dagen i stedet for 100.

Læg mærke til, for ingen investering i ny hardware dit firma har netop øget sin batch forarbejdningskapacitet 4 gange! Potentielt du vil øge dit strømforbrug, men fra de fleste kontormiljøer Jeg har været i maskiner er generelt tilbage på natten alligevel, så man kunne se dette som et grønt initiativ.

Andre fordele også betyde, at investeringer i nye (eller opdateret) behandling servere kan blive forsinket, hvis dit kontor maskiner er tilstrækkelige, og at som du forbedre styrken i din kontormaskiner dit kontor forsyningsnet bliver mere kraftfuld automatisk.

Teknologier

Hvad du har brug for? (Eller mere korrekt, hvad har jeg brug):

  • Idle kontormaskiner (i mit tilfælde et ekstra gamle Windows XP laptop)
  • VirtualBox (eller en anden virtualiserings-klient-software)
  • En virtuel maskine med PHP, MySQL running kører en skære ned OS, jeg ringer disse mine Limp servere:)
  • Jobs til at køre
  • Job server (kan være en anden virtuel maskine eller andet sted)

Typisk Job

De typer af job, at dette system er designet til at køre er som følger:

  • System modtager en liste over data, som vi har brug for at matche og returnere resultater
  • Matchende omfatter det at tjekke / søge flere (temmelig statisk) datakilder
  • Resultater fra datakilder kan kræve yderligere validering, sammenlægning, kontrol af yderligere datakilder, som reaktion på resultaterne
  • Data returneres med matchende poster, fuldt valideret og bearbejdet
  • Hver post inden for et job er uafhængig af resten

Så dybest set, vi kigger på kørende jobs, som kræver en blanding af database opslag og nogle talknusning, en ret typisk scenario i et erhvervsmiljø.

Grid løsninger er ikke kun fordelagtig for behandling job af denne type. Dybest set kan enhver proces, som kan opdeles i selvstændige enheder køres parallelt. Se dette Wikipedia for eksempler og mere information: Grid Computing , men et par kendte eksempler er Seti @ Home og BIONC . Der er rammer for at køre computing net, og disse er værd at se på.

Hvad vil vi opnå?

Ved udgangen af ​​disse artikler håber jeg at vise, at indsætte et kontor net ikke behøver at være enormt dyrt eller tidskrævende. Jeg har tænkt mig at diskutere:

  • Opsætning af jobbet kontrolsystem, job konfiguration
  • Oprettelse af en passende behandling af virtuel maskine
  • Sådan setup systemet på en Windows-maskine
  • Sikrer, at du bruger den nyeste kode og data
  • Deployment og benchmarking
  • Se fremad

Jeg vil være bygning (ok jeg byggede, så skrev dette) et eksempel på program for at teste de koncepter på en lokal maskine ved hjælp af Windows XP og min "GridMachine" virtuel maskine. Mit job kontrol server vil være min primære maskine, der kører Fedora 11 .

Dette er på ingen måde betød at demonstrere et fuldt fungerende robust system, dets betød mere for en demonstration og diskutere viser, at disse ting kan opnås en rimelig kort tid og med små omkostninger. Du er velkommen til at sende mig eventuelle kommentarer, rettelser eller forbedringer, og jeg vil gøre mit bedste for at holde denne artikel opdateret til at matche.

Næste gang

I del 2 vil jeg starte med at se på jobbet styring, og se på, hvordan arbejdspladser skal konfigureres for at opnå størst forarbejdningsstøtte samtidig sikre, at hvert job er behandlet, uden at mislykkes.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 2

Ved , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 1 jeg gav et overblik over systemet og teknologier jeg vil bruge samt drøftet nogle af de potentielle grunde til, at du ønsker at oprette et kontor gitter.

Job Kontrol

Hvis du vil køre jobs så du vil få brug for nogle måde at styre dem. Dit job kontrolsystem (på dit job server) skal være virkelig velgennemtænkt, før selv forsøger at køre et kontor gitter. Så det første, hvad er opgaver for et job kontrolsystem:

  • Uddel opgaver efter anmodning fra arbejdstagerne
  • Fortæl arbejdere hvilken type af job til at køre
  • Spor job
  • Sørg for, at arbejdspladser er kun køre én gang
  • Giv jobdata til arbejdstagere, eller i hvert fald fortælle dem, hvor du kan få det

Systemet skal også udvides, en løsning der virker for nu i et enkelt tilfælde kan udvides til at køre flere typer af arbejdspladser, fordi virksomheden ser en værdi i et gitter løsning. For eksempel kan arbejdspladser få prioriteter, mere end én jobtype kan eksistere (dvs. flere code baser), i sidste ende kan du endda køre flere forskellige arbejdstager maskiner, der er optimeret for hver type af arbejde (selv om det bevæger sig væk fra det »generiske arbejdstager 'idé). Forsøg altid at tænke på fremtiden, når udvikle systemer, kan en kortsigtet vision føre til på længere sigt frustration og øget udviklingsbistand tid.

Job Server

Vi vil få brug for et sted at styre vores job fra, bør dette være det eneste system i dit net, der har en fast ressource locator, være, at en IP-adresse, værtsnavn, URL (ved hjælp af intern DNS), osv. Dette skyldes arbejderne har brug for at vide hvor de skal lede efter job, arbejdstagere har behov for at finde det job kontrolsystem (ikke jobbet kontrolsystem finde arbejderne).

Jobbet selve serveren ikke rigtig har en kompliceret opgave (i et grundlæggende system alligevel), er det nødvendigt at gemme en liste over job, uddele job, modtage resultaterne, og efterfølgende gemme dem til senere afhentning. Hvordan disse dele (såsom 'hånd ud arbejdspladser «) er defineret kan være meget basale. Senere kan vi udvide systemet til også at omfatte et administrations-interface til at tilføje, redigere, slette, suspendere job, men det er hinsides denne øvelse.

Der er ingen som helst grund så er dit job server ikke kunne være en virtuel maskine, der kører inden for dit primære behandling server, forudsat at det ikke dræne alt for mange ressourcer fra det. Jobbet serveren dog ikke brug for høj tilgængelighed, hvis det går ned på en fredag ​​aften, du kommer til at miste en hel weekend med behandling, potentielt koste dig et par uger til en værdi af sagsbehandlingstiden (i forhold til din primære behandling server alene) . Du vil måske overveje at sætte dit job server på en load balanceret miljø for høj tilgængelighed.

Grundlæggende opsætning

Den grundlæggende opsætning til vores job-server vil bestå af hvad jeg kalder en af mine slatne servere (dvs. Li nux, m ySql, P HP). Den kode, der kører på thea arbejdere rent faktisk vil finde ud af hvilke job det kan køre ved at interagere med med job-styresystem databaser. Senere kunne vi skabe en web service og faktisk uddele job frem for at lade arbejderne udføre det hårde arbejde selv, men for nu vil vi fortsætte med at anvende KISS princippet (Keep It Simple, Stupid!).

Så kan oprette tre mySQL tabeller til at beskæftige sig med job. Disse vil blive `jobs`, `jobRecords` og `jobResults`.

jobs tabel Her Jeg bruger SQL Buddy en stor lille alternativ til phpMyAdmin bare fordi det er nemmere at installere på CentOS (for andre, se: 10 Great alternativer til phpMyAdmin )

Denne tabel består af 5 enkle felter,

  • id: entydigt identificerer jobbet
  • navn: Kunne være en klient reference, eller en række af andre identifikatorer
  • Status: Du skal vide, hvor opgaven er, fx
    • 0: Ikke startet
    • 1: samlet op
    • 2: Afsluttet
  • started_by: Hvem er begyndt at gøre jobbet? Dette er ikke helt påkrævet, men er et rart at have. Jeg vil foreslå, sporing af arbejdstagere ved deres IP-adresse på dit netværk
  • started_at: Hvornår arbejdstageren starte jobbet? Ved at spore job, der ikke har gennemført inden for X tid, vi ved vi nødt til at afhente jobbet igen og starte behandling af en anden arbejdstager. Arbejdstagere kunne stoppe behandlingen / gå offline for en række årsager, strømsvigt, nedbrud, netværk tab, osv.

Det er nemt, hvordan denne tabel kunne udvides med et par ekstra felter for at muliggøre statistik sporing, et sluttidspunkt kolonne for at se, hvor lang tid jobbet tog, en tæller til at se, hvor mange arbejdere tog jobbet (selvfølgelig det skal en tendens til at 1), job prioritet, kan listen blive ved og ved. I mere komplekse job scenarier vil det være muligt at angive, hvor meget hukommelse arbejdstageren ville have adgang til (og derfor kun er anvendt passende arbejdstagere), eller sågar hvilken type arbejdstager krævede ville være.

Lad os tilføje et par eksempel job:

eksempel job

Den næste bordet igen er ganske simpelt at forstå, det er vores job optegnelser. De er knyttet til de vigtigste job bordet ved en kolonne `jobs_id`. Den gør op med denne tabel afhænger meget af de data, du har brug for til at levere til dine medarbejdere, kan gøre et meget simpelt eksempel, hvor vi har fire kolonner:

  • id: ID af posten
  • navn: Person navn
  • adresse: Person adresse
  • jobs_id: Jobbet ID, at denne rekord er knyttet til

Den tredje og sidste tabel består af et resultat tabellen, har stort set samme gør op som vore optegnelser bordet, og med tilføjelse af nogle kolonner kunne være en del af posterne tabel:

  • job_record_id: Link resultatet til jobbet bordet
  • Resultat: Resultatet af data

... Og det er alt du har brug for job kontrol! (Omend på et meget grundlæggende niveau) I mit tilfælde er jeg pegede på et andet bord, hvor mine data til processen var placeret, men det kunne lige så let være blevet en fil, parametre til at køre simulering kode, you name it.

Valg af et job

Som tidligere nævnt, vil arbejderne gøre vores jobstyring for os for nu, så vi alle har brug for virkelig at gøre er at finde et job, der kræver behandling og få oplysningerne. Hvordan ville vi gøre det? Godt pick vores job udvælgelseskriterier og søge job, i SQL gjorde jeg følgende:

  1. Tag nogle job, der ikke er markeret som komplet, men fra vores arbejdstager og nulstille dem (stedfortræder __ME__ med et id, ville nemmeste være IP-adresse):
      UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 og `started_by` = __ME__; 
  2. Brug vores job udvælgelseskriterier, skal du vælge et job og fortælle kontrolsystem, at denne arbejdstager beskæftiger sig med det:
      UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 eller
     (`Status` = 1 og `started_at`> DATE_SUB (NOW (), interval X HOUR)) ORDER BY `id` ASC; 

    Ved at snuppe job, der ikke returnerede resultater i X tid, vi sikrer, at alle job er at køre i tilfælde af en arbejdstager bryder sammen eller gå væk fra mig.

  3. Næste fat i job detaljer efterfulgt af journaler selv:
      SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Ved afslutningen af ​​jobbet, vi indsætter vores resultat optegnelser og markere opgaven som fuldført. Husk som arbejdspladser kan suspendere / genoptages på ethvert tidspunkt give mulighed for en vis robusthed i dit script. Det kan være, at opgaven suspenderer halvvejs gennem opdatering jobbet kontrolsystem, så kontrol af antallet af poster i et job, og antallet af resultater gemt tilbage til jobbet kontrolsystem ville være et klogt træk.

Hertil kommer, samtidig med at dette viser, hvordan arbejdspladser kan vælges og styres fra en SQL-forespørgsel ramme, du skal virkelig være abstrahere dit job kontrol, så hvis du beslutter dig for at skifte til at bruge en webtjeneste, en fil baseret system, XML , eller enhver anden Antallet af systemer, vil det ikke påvirke den ovenstående kode det.

Job Configuration

Det næste aspekt at overveje, er opgavens omfang og konfiguration. Ved at spille med job konfiguration, vi kan skabe en god balance mellem hastighed, proces-replikation, og pålidelighed. Tag et par OFA scenarier:

  1. Jobs tage 1 dag hver til at køre: Det betyder, at dine medarbejdere har brug for 15 dage til at behandle hvert job (husk 10% af den strøm til 2/3rds af tiden). Dette er tydeligvis ikke en klog konfiguration, dit job størrelse er alt for stor! Det ville tage mindst dobbelt så lang tid at få et forarbejdet job bør den initiale arbejdstager gå væk fra mig (tid til at samle op, at det ikke har returneret et resultat plus oparbejdning tid). I en ideel du gerne have mindst en hel jobbet let slettes ved udgangen af hver langside inaktiv periode, den måde du holder jobs tikker over og i værste fald et job, ville tage to dage at processen bør de første forsvinder.
  2. Jobs tage 1 minut til at køre: Det betyder, at dine medarbejdere tager cirka 15 minutter at køre hvert job. Mens dette kan i starten synes ideelt, får du ekstra arbejde forarbejdning under frokost tid, kaffepauser, møder, osv. dette scenario lægger pres på andre områder af dit system og introducerer sine egne problemer. For eksempel dit setup / sagsbehandlingstiden forholdet først og fremmest kommer til at gå helt ned, således at miste systemets effektivitet. Dit netværk vil være konstant streaming job information til de forskellige arbejdere frustrerende medarbejdere, som DONG deres daglige arbejde. Du er også kommer til at lægge mere pres på dit job forarbejdning serveren, som det er at uddele masser og masser af små stykker arbejde på regelmæssig basis. Endelig, i denne situation, hvis dit job server går ned du kommer til at skabe en enorm tilbage log over uafsluttet arbejde, mens større arbejdspladser kan for fortsat behandling lykkeligt uvidende om, at jobbet serveren havde vanskeligheder.

I virkeligheden vil der ikke være en ideel konfiguration til dit net setup, meget afhænger af de tilgængelige ressourcer, typer af job, job ekspeditionstid krav, netværks-kapacitet, og så videre. Men nogle retningslinjer vil være:

  • Størrelse job, så at hver arbejdstager kan komme igennem mindst 3-4 arbejdspladser i en periode på 15 timer (den længste sandsynlige inaktiv periode)
  • Spil med jobbet størrelse, så setup tid bliver temmelig ubetydelige i forhold til behandlingstiden (under hensyntagen til ovenstående punkt).
  • Hvis et job ikke komplet i dobbelt så lang tid (måske mindre), du forventer at færdiggøre det antage, at det er væk væk fra mig og begynde at behandle det med en anden arbejdstager. Dette betyder, at du måske nødt til at vente i op til tre gange den normale længde af et job til den er færdig (muligvis længere, hvis den efterfølgende jobbet mislykkes). Du ønsker måske at reducere denne tid, men vær forsigtig med ikke at reducere det alt for meget som du kan begynde at overlappe behandlings opgaver på regelmæssig basis.
  • Jobs bør være uafhængige af eksterne krav, så meget som muligt. Jobbet server, for eksempel, bør kun kontaktes ved starten og slutningen af ​​hver opgave.
  • Må ikke mætte dit netværk, vil dette få to negative effekter, vil din dagtimerne personalet finde ved hjælp af netværket frustrerende og problemer, kan opleves med tilslutninger timing et problem, som kun vil blive værre, når du skalere din net.
  • Sikre jobs kan køre på dine medarbejdere. Hvis arbejdspladser bliver for hukommelsen intensiv eller diskplads intensivt job vil begynde at opgive, og det eneste du vil bemærke er et fald i antal arbejdspladser behandles uden reel grund til hvorfor.

Indsendelse Resultater af et job

Ved fremlæggelsen af ​​resultaterne af et job er det vigtigt at kontrollere, at resultaterne ikke er blevet indsendt af en anden arbejdstager, især hvis den nuværende arbejdstageren har været i dvale i et stykke tid.

Når resultaterne er fremlagt sikre, at antallet af resultater svarer til det antal poster i jobbet.

Som nævnt tidligere, og kan ikke være over understreges, at bygge fejltolerance i job hentning og resultater underkastelse. Arbejderne kan (og højst sandsynligt vil) gå i standby-tilstanden på det mest ubelejlige gange, og det skal være taget højde for. Også igen abstrahere væk dine resultater indsendelse vil hjælpe tage højde for fremtidige ændringer i dit job styresystem meget nemmere at håndtere.

Resumé

I denne section har vi kigget på, hvad et job kontrol server har brug for at gøre, og hvordan man får et meget grundlæggende system oprettet. Vi diskuterede hvordan man henter et job fra kontrolsystemet og hvordan man bedst kan konfigurere job for at få mest vores af dit kontor skinnesystem. Til slut, var et afsnit eller to på sende resultaterne tilbage til jobbet Control Server præsenteret.

  • Et job kontrol server styrer job og sikrer, at alle arbejder enheder er afsluttet
  • Ved at abstrahere dit job vælge / resultater indsendelse vi kan ændre teknologien i kontrol-serveren uden de store problemer
  • Konfigurer dit job at sikre, at de kører hurtigt og effektivt uden at lægge for meget pres på dit netværk infrastruktur, og uden at overlappe behandlings opgaver på regelmæssig basis.
  • Sørg for, at du bygger fejltolerance og fejl checking ind i dine rutiner, kan arbejderne afbryde og genoptage og de mest ubelejlige af gange. Husk at kontrollere, om resultater, der allerede er blevet indsendt af en anden arbejdstager.

Næste gang

I del 3 vil vi skabe vores virtuelle behandling maskine og oprettet vores Windows-maskiner for at blive ledig-deltidsansatte.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 5

Ved , fredag ​​4 Dec 2009 11:03

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 4, kiggede vi på ved hjælp af værktøjer til at sikre, at vi kører den nyeste version af kode og data kilder, så opnåede resultater er altid up-to-date med de nyeste forretningsoplysninger og logik.

Pre-Deployment

Før implementering dit grid system, hvis der er én ting, du gør, og en ting alene, det er benchmark dit nuværende system! Ligegyldigt hvad du fortæller kolleger om, hvor meget ekstra arbejde dit system vil gøre, medmindre du har tal til at bakke dette op din garantier er ingenting.

  • hvor mange poster kan du behandle i øjeblikket? Om dagen? I timen?
  • Hvor lang tid tager det typisk tager at vende rundt et job?
  • Hvor meget mere kapacitet, har du?

Der er også yderligere spørgsmål:

  • Hvis din behandling server (eller en af ​​dine forarbejdning servere) går ned, hvordan vil det påvirke dine evner, vil du blive lammet?
  • Hvilke fordele håber du / forventer at få fra et gitter system?
  • Er dine kontormaskiner stand til at køre de job?
  • Er dine (eller kan du arbejdspladser konverteret) til at arbejde i denne stil for at køre?

Det sidste store punkt er at tage din tid på større ændringer, som denne. Opdater din behandling kode for at arbejde med den nye metode, benchmark igen. Eventuelt oprettelse af din behandling server til at køre en virtuel maskine, efter at alle dine forarbejdning server vil bare være en anden arbejdstager (bare en meget kraftig en relativt). Lad den nye proces at bosætte sig.

Deployment

Mit forslag ville være at pop ind på kontoret en weekend udføre alle de installationer og opsætning. Gør det lige før en fjorten dages ferie og lad så andre fattige fyr til at håndtere konsekvenserne ... måske ikke ...

Deployment for et system som dette behov for at være langsom. På trods af at det er relativt enkelt at etablere dette system vil påvirke hele dit kontor infrastruktur (såvel den digitale én). For det første, rul ud til et par af maskiner ad gangen, overvåge netværkstrafik, hvor arbejdstageren værter udføre på en dag-til-dag basis. Du skal muligvis ændre dit job konfiguration som svar på dine resultater.

Når systemet har afgjort med et par maskiner (lad os sige 10% af alle kontormaskiner, dvs 5) fortsat at overvåge trafikken på nettet og vært maskine performance. Næste benchmark igen, bør du nu være behandling 33% flere arbejdspladser end dit første benchmarks. Marker dette er tilfældet, eller at du i det mindste i denne ballpark. Hvis ikke, undersøge hvad der foregår, inden vi går videre. Gentag denne cyklus, indtil du lykkeligt har alle kontor-maskiner, der kører uden at dræbe individuelle maskinens ydeevne eller slibning dit netværk i stå.

På alle tider holde benchmarking, selv efter at alle installationer er lavet. Kontroller, hvor ny kode opdateringer påvirke hastigheden på dit system, skal du kontrollere alle arbejdstagere rapporterer med og forarbejdning job. Langsomt (meget langsomt) tilvæksten dit job konfiguration for at få det bedste ud af dine medarbejdere og netværk.

Stop!

Hvad nu hvis du ønsker at stoppe dine medarbejdere i at køre på et tidspunkt? De er alle derude løb, regenerere, og prøver deres bedste for at behandle data som sultne insekter. Svaret kan synes indlysende, men det værd at tilføje just in case sin overset. Du skal blot redigere din behandling script med en exit (0) or die () eller en anden erklæring om at dræbe din behandling job. En vigtig grund til, at vi altid forsøger at opdatere til den nyeste behandling af scriptet, før der køres!

Demonstration System

For at skrive denne række korte artikler, jeg skabte en meget lille gitter at demonstrere de teknologier og metoder. Jeg har læst masser af artikler, tutorials, og anvendt forskellige værktøjer til at konfigurere og overvåge, hvad der foregik. På ingen måde har jeg gået ud og mættet en hel kontor med trafik og heller ikke jeg har haft adgang til en regulær medarbejdere pc for at se, hvordan vært præstation var påvirket.

Min demonstration systemet var meget ydmyg faktisk. Jeg brugte min normale desktop sat op som et job Control Server. På dette havde jeg installeret mySQL -server installeret, sat op som en mester i replikation, PHP , A og SVN sammenknyttes gennem Apache (for adgang via arbejdstager VM).

Jeg har nu oprettet en CentOS arbejdstager maskine på VirtualBox på en 6 år gammel Windows XP laptop. Jeg setup planlagte opgaver som angivet efter kopiering af VM på maskinen, og lad det gå.

Den virtuelle maskine blev sat op med PHP, undergravende virksomhed, og mySQL. Jeg har checket ud en afdeling ved navn »arbejdstager« fra mit job kontrol servere repository, og sørgede for det kunne blive opdateret ved hjælp af 'svn update'. Næste jeg setup MySQL som en slave og kontrolleret, at data blev kopiere fra mySQL på jobbet kontrol-serveren ned til arbejdstageren VM. Efter alt dette har jeg opsætning af bash scriptet og cron job.

Min behandling script dybest set gik i retning af dette (meget simple ting):

  • Læs i navnefeltet
  • Tælles antallet af lignende navne i en tabel fra datakilden afholdt på VM
  • Tælles antallet af navne, som ovenfor, men at opdele navnet af mellemrum (dvs. fornavn, mellemnavn efternavn)
  • Gentagne denne proces 1.000 gange

Hvert job tog cirka 20 minutter at køre. På et tidspunkt åbnede jeg flere kopier af den arbejdstager VM på vinduerne bærbare computer, og så de arbejdspladser kontrolleres ud af hver af arbejdstageren IP-adresser. På dette punkt, jeg også bekræftet, at replikationen automatisk genstartes.

Forlader den bærbare computer i tomgang resulterede i en arbejdstager begynder at behandle job fra jobbet Control Server. Når genoptage laptop brug var der en forsinkelse på ca 30-60 sekunder, dette er en rimelig mængde af tid og personale vil skulle gøres opmærksom på, at deres maskine kan holde pause for en kort stund, når du returnerer til maskinen. Nyere maskiner kan ikke have en pause på denne lange. Fordelen ved mængden af ​​behandlingen udføres af disse maskiner i tomgang perioder vil mere end opveje ansatte med at vente en kort periode (f.eks 1 minut) ankommer til deres maskiner af en morgen (jeg ofte vente længere, at dette for en Windows Defender opdateringen kan finde sted), hvis de blev gjort opmærksomme på denne (nyttige tid til at snuppe en morgenkaffe!).

Alt i alt føler jeg overbevist om, at jeg har vist de teknologier, der kunne bruges til at oprette et sådant system. Jeg har vist, at et sådant system virker på en (meget) lille målestok og med nogle mere eksperimenterende kunne skaleres op udnytte ressourcerne i et kontor maskiner. Hvis jeg ikke kommer til det punkt at gøre dette ville jeg være meget interesseret i at vide / se, når nogen andre gør.

Konklusioner / Evaluering

Det næste oplagte skridt ville være til rent faktisk at få en virkelig verden eksempel og begynde at implementere et system som dette i et kontormiljø, og se hvad der sker. At bede en virksomhed at forpligte sig til dette uden et spor brændende virksomhed at bevise den teknologi og effektivitet kan være lidt vanskeligt. Grid / Distributed computing er meget populær, er nogle kredse og har nogle store applikationer (BIONC, SETI @ Home, Folding @ Home, osv.). Jeg har dog ikke finde en mindre målestok og enkelt system som dette i mine søgninger, som kunne blive rullet ud i et kontormiljø.

Jeg har oprettet en dybest set gratis system ved hjælp af primært open source-software og værktøjer til rådighed i næsten ethvert kontor. De teknologier var dybest set demonstreret og vise at udføre og arbejde som forventet. Forhåbentlig har jeg vise, at der med ikke meget arbejde, og med en meget enkel opsætning, du kan installere et kontor grid computing-system, der er kraftfuld, billig, A og skalerbar alle på samme tid.

Når et system er oppe at køre er der næsten ingen ende på mængden af ​​tilpasning og forbedringer, du kan gøre. For eksempel statistik / benchmarking kan nemt tilføjes viser værdien af ​​et sådant system hver dag. Nye maskiner kan tilføjes hurtigt og nemt, når de ankommer med opgradering af eksisterende hardware styrke din processorkraft.

Jeg håber du har nydt at læse denne serie af artikler og givet dig stof til eftertanke om at drive et kontor skinnesystem. Løsningen præsenteres her, vil ikke nødvendigvis arbejde i alle situationer, men bør kunne tilpasses, så du kan få dine data forarbejdning foretaget ved hjælp af din egen løsning.

Du er velkommen til at sende mig eventuelle kommentarer, rettelser eller forbedringer, og jeg vil gøre mit bedste for at holde denne artikel opdateret til at matche.

Zend Framework: Fundamentals - Anmeldelse

Ved , lørdag 28 november 2009 22:42

Min arbejdsgiver for nylig betalt for en gruppe af os udviklere at tage Zend Framework: Fundamentals kursus, her vil jeg sammenfatte mine tanker og udtalelser om kurset for andre. For dem, der ønsker at spare tid, er her mit resumé:

For udviklere, der ikke har haft tid til at se på Zend Framework dette kursus (Zend Framework: Fundamentals) giver et godt samlet billede af de rammer, at indføre dig til de centrale områder og give tilstrækkelige oplysninger med henblik på at fortsætte. For dem, der har brugt tid på at kigge på de rammer og har fulgt en eller to tutorials dette kursus giver ikke meget ud over.

Baggrund

Jeg har været en PHP udvikler for omkring 5-6 år, og er begyndt at arbejde med Zend Framework på en komponent grundlag over de sidste 6 måneder. Jeg har udviklet og / eller været en udvikler på et par små Zend Framework MVC sites. vil jeg være ærlig, har jeg ikke haft en enorm mængde af udsættelse for andre rammer fra en kodning synspunkt, men har tilbragt flere timer forsker i projektet, websites og evaluering them. Rammerne og fællesskabet omkring Zend Framework det er ganske spændende, og der synes at være store muligheder i, hvor dens vej hen.

Om kurset

Kurset er leveret over 9 to timer WebEx sessioner (med en 10-minutters pause i midten). Den tid går at gå gennem et sæt af slides fra Zend med diskussion til enhver tid. Du kan bruge en mikrofon til at tale med instruktøren, men for at være ærlig jeg ikke se nogen bruge noget mere end chatvinduet. Dertil kommer en VMWare Ubuntu maskine er forudsat, at der er eksempel kode og projekter oprettet en en prøveversion af Zend Studio. Kurset leder taler med deltagerne enten over en integreret VoIP-løsning, eller du kan ringe op ved hjælp af en af ​​de mange verdensomspændende dial-in numre.

I løbet af kurset Materialet består af en kort oversigt over rammerne og MVC mønstret inden turen går til en prøve gæstebog ansøgning. Diskussionen viste bootstrapping, Zend_Application, DB tabeller, databaseadgang, Forms, filtrering, ACL, validering osv. osv. Dybest set dækker alle de emner, du vil kræve at få en grundlæggende websted oprette en kørende hele tiden giver dig værktøjer til at gå hen og få mere avancerede inden for rammerne (selv om dette var tale om 'Se hjemmesiden "meget af tiden).

Tid er givet til at kode nogle eksempler, og at udvikle 'gæstebogen' og simple 'wiki' ansøgning. Personligt følte jeg, at give koden eller hver app, og derefter beder os om at udvikle, hvad der var det væsentlige en kopi sammen med ikke rigtig give en god og lærerig oplevelse. Jeg ville have foretrukket at udvikle et program som ligner, men ikke identiske. til eksempel ansøgning med fordelen ved at have en guide til at henvise til. Alternativt kan bygge applikationer fra bunden med demonstrator vil af eventuelt førte til flere spørgsmål om, hvorfor og hvordan, hvilket giver en bedre forståelse af rammerne, når alt hvad du kan se op detaljerne efter kurset.

Den sidste forelæsning bestod af arbejde på wiki ansøgningen med hjælp / vejledning fra instruktøren. Efter kurset tilbagemeldinger blev taget, blev det understreget flere gange gennem kurset, at Zend tager tilbagemeldinger meget alvorligt, i virkeligheden tilsyneladende vores version af kurset var ganske nyt. Nogle af de andre udviklere i selskabet vil tage kurset snart, så det bliver interessant at se, om dette er sket.

Kurset Stilen var uformelt, tilladt for feedback og samarbejde mellem deltagere og instruktør. Kurset leder var venlige, ubureaukratiske (e-mail adresser er blevet delt i spørgsmål), og mens hans præsentation fra slides var lidt usikker syntes fuldt ud kompetente inden for rammerne. Han var tydeligvis en person, der brugte rammer på regelmæssig basis i stedet for nogen, der er oplært til at undervise i kurset, kunne jeg godt lide den "virkelige verden erfaring i den henseende.

Samlet Feeling

På nogle måder fandt jeg selvfølgelig et spild af tid, i andre var det meget handy. Forhåbentlig får jeg mine grunde går tydeligt igennem, og måske give nogle stof til eftertanke eller nyttig feedback (at kende mig, det er usandsynligt!).

For mig dette kursus var rettet mod et for lavt niveau. At have gået gennem quickstart guide, skal du læse Rob Allens Zend Framework i aktion, og arbejdede med de rammer lidt jeg fik ikke rigtig noget for meget. Jeg ville i kunne lide kurset at hente fra slutningen af ​​QuickStart og udvikle flere færdigheder.

Når det er sagt, kurset titlen ikke klart fremgå, "Zend Framework: Fundamentals" og i dette aspekt kurset opnår, hvad det formål at gøre. Andre medlemmer af udviklingsteamet, der ikke har brugt tid på at kigge ind i de rammer færdige hver session med entusiasme og stillede spørgsmål, som var virkelig rart at se.

Alt var ikke tabt, det var godt at bruge tid på at bekræfte de grundlæggende oplysninger i rammen og komme til at stille et par spørgsmål i områder, hvor jeg ikke var 100%. Det var også på tide, at jeg kom til at sidde ned hver dag og tænke over kodning ved hjælp af rammer og fremtidige projekter, noget, jeg ville ikke været i stand til at gøre noget andet (kan du forestille dig din virksomhed at acceptere, at:?)). Sidst men ikke mindst får du også en dejlig certifikat fra Zend at sige, at du har deltaget i kurset (om end via e-mail).

Zend Framework Certificering

Det var et spørgsmål, der blev ved at komme til at tænke på i løbet af kurset, ville det forberede mig til certificering? Den hurtige, let er et rungende nej. Kurset instruktør var helt klar på, at med de ekstra råd, for certificering bør du virkelig skal bruge rammer på en dag til dag og føler mig meget komfortabel og sikker på dens brug og metoder.

Resumé

I betragtning af alt det jeg har skrevet ovenfor, vil jeg opsummere det hele i to nemme punktform:

  • Ny på Zend Framework: Dette kursus gør præcis, hvad du ville forvente, det giver dig en fin introduktion til de rammer og en god jordforbindelse på det grundlæggende, hvorfra du kan bygge. Kurset ser ud til at skabe interesse og entusiasme for det rammer blandt udviklerne.
  • Brugt Zend Framework: Selv om det var rart at afstive nogle af de meget grundlæggende Jeg følte tid, kræfter og midler til at tage kurset kunne af været bedre brugt andre steder. Det vil være rart at SEEA Zend oprette et nyt højere niveau selvfølgelig at tage udviklere til det næste niveau. - I det mindste at standarden for certificering og ud over For at jeg ville melde sig med det samme.












Panorama Tema ved Themocracy

6 besøgende online nu
4 gæster, 2 bots, 0 medlemmer
Max besøgende i dag: 19 kl 6:09 UTC
Denne måned: 19 kl 19-08-2011 06:09 UTC
I år: 130 kl 28-03-2011 22:40 UTC
Al tid: 130 kl 28-03-2011 10:40 UTC