Kategori: Linux

Office Grid Computing hjälp Virtuella miljöer - Del 4

Genom Steven Lloyd Watkin , fredag ​​4 dec 2009 11:59

Inledning

Jag arbetar i ett företag där vi driver många batchjobb bearbetning miljontals skivor av data varje dag och jag har funderat nyligen om alla maskiner som sitter runt varje dag gör ingenting i flera timmar. Vore det inte bra om vi kunde använda dessa maskiner att stärka processorkraften i våra system? I denna uppsättning av artiklar jag kommer att titta på de potentiella fördelarna med att anställa ett kontor rutnät med virtualiserade miljöer.

I del 3 har vi skapat vår virtuella maskin och ställa in Windows-maskiner för att bli idle-tid arbetstagare.

Kör den senaste koden

Oundvikligen efter att skapa dina arbetare affärslogik kommer att förändras, kommer fel hittas, effektivare kod kommer snabbare att produceras vilket lämnar dina arbetare satt runt bearbeta data med hjälp av gamla illaluktande kod . Hur då ser vi till att vi alltid använder den senaste och bästa versionen av vår bearbetning skript?

Det finns några mycket enkla enkla sätt vi kunde göra detta, tricket är dock att minska processorkraft och nätverkstrafik för att uppnå detta. Låt oss börja med den enklaste av lösningar och förbättra den långsamt under ett par iterationer.

Den första metoden skulle vara att helt enkelt ansluta till vårt jobb Control Server (via samba, ftp, eller liknande) och dra ner den senaste versionen av koden. Inte särskilt effektivt, men det kommer att göra jobbet. Låter bättre på att något, vad sägs om att skapa en rsync script och använder det varje gång istället? Alternativt vad om att sätta våra senaste bearbetning manus till omstörtande verksamhet granska koden först och sedan bara uppdatera vår kod på varje körning ( svn update )?

Till slut kunde vi sluta med ett bash-script (kallas av cron varje 10 minuter) som ser ut så enkelt som detta:

  #! / Bin / sh
 om ps ax | grep-v grep | grep php > / dev / null
 sedan
     echo "Job bearbetar för närvarande, utträde"
 annat
     echo "jobb är inte körs, startar nu"
     cd / sökväg / till / arbetar / kopiera
     svn update
     php yourJobProcessingScript.php
 fi 

Nu kan vi vara säkra på att för varje gång vi definitivt kör den senaste koden. Vi säkerställer detta genom att uppdatera vår kodbas varje gång vi gör en kör och minska nätverkstrafiken genom att endast överföra filen skillnader i vårt nätverk.

I min demonstration setup, jag gjorde exakt som ovan. Subversion var installerat på mitt jobb bearbetning server och jag helt enkelt drog den senaste koden från en arbetstagare filial med hjälp av "svn update". Jag lade också till en tagg versionsnumret till min behandling manus som var tillbaka till databasen som en del av resultaten avkastning. På detta sätt kunde jag se att min kod var att uppdateras varje gång jag kopierat mina stammen till arbetstagaren gren dvs att jag var definitivt kör den senaste bearbetningen skriptet.

Med den senaste uppgifterna

Om jobbet bearbetning använder datakällor sedan någon gång dessa kommer att uppdateras också. Om du inte ringa din datakällor på ett mycket ovanligt grund du kommer att översvämma ditt nätverk med trafik så fort dina arbetare börja köra föra allt för stillastående. För min lösning som jag bestämt att jag vill flytta min datakällor runt med min virtuella maskiner.

Håll du är hästar där! Vad händer om min datakällor är enorma? Ja detta är verkligen en fråga om hur mycket data talar vi? Det kan vara mer kostnadseffektivt att installera en extra större hårddisk till varje maskin än att köpa ytterligare bearbetning server. Detta är en fråga om budget och är upp till verksamheten att avgöra. Det kanske att dina datakällor är så stora att det bara omöjligt att hålla den mängd data i din arbetsdatorer. I så fall vad skulle du göra? Jo vi kunde titta på att ringa en lokal data-server, men det kan orsaka problem med nätverket. I detta fall ett rutsystem som detta kan bli orealistiskt att inkludera i din kontorsmiljö. Det kan också vara så att du kan titta in alternativa kör strategier, till exempel endast ringa dina arbetare från 20:00 till 06:00 varje kväll och / eller data strypning källa förfrågningar.

Flytta på låt säga våra datakällor uppgå till 100 GB data. Jo det är ganska lite data att flytta runt på nätet på en uppdatering. Hur skulle vi se till att vi har de senaste kopia av data i detta fall? Rsync är en möjlighet, men personligen tycker jag genom att köra ditt senaste datakällan på ditt jobb bearbetning server och skapa detta som en mästare i replikering (med en fin lång bin log) kan vara vägen att gå:

replikering Genom att ställa alla dina arbetstagare upp som slav till servern kontroll över arbetet uppdateringar av dina datakällor kommer att sippra ner fint till dina anställda utan en enorm ökning av nätverksaktivitet (som om inte du gör en enorm data uppdateringen och alla dina anställda spark i på en gång). Detta har fördelar jämfört med rsync i att du inte skulle få en lång paus innan varje jobb, som uppdateringar av databasen, den MySQL på din arbetaren kommer demonen kontinuerligt uppdatera sina data medan behandlingen fortsätter.

Det är så jag satt upp min demonstration server. För att ställa upp replikering Jag följde guiden på mySQL webbplats ( Konfigurera replikering ) och inom 20 minuter hade jag min inital arbetstagare replikera kontroll över arbetet servrar databasen. För varje ytterligare arbetstagare replikeringsinställningarna och processen fungerade varje gång när VM var kopierade.

Sammanfattning

I detta avsnitt av artikeln har vi tittat på hur enkelt och smärtfritt det är att hålla din processkod aktuellt genom using rsync eller subverion (SVN) för att göra jobbet och minska nätverkstrafiken på samma time. Vi har även diskuterat hur att hålla din information om datakällan up-to-date genom att låta den sippra ner till alla dina anställda. Således har vi område se till att vi hänger med affärslogik och information på vårt kontor nätet. Det kommer naturligtvis att vara otaliga alternativ att utföra dessa uppgifter, men här var två enkla exempel visa hur lätt en lösning är att komma med.

Nästa gång

I den sista delen av denna serie, passande namnet Del 5 kommer vi att diskutera utbyggnaden av detta system för. Jag ska sammanfatta vad som har lärt sig och vad jag lyckats skapa.

Office Grid Computing hjälp Virtuella miljöer - Del 3

Genom Steven Lloyd Watkin , fredag ​​4 dec 2009 23:37

Inledning

Jag arbetar i ett företag där vi driver många batchjobb bearbetning miljontals skivor av data varje dag och jag har funderat nyligen om alla maskiner som sitter runt varje dag gör ingenting i flera timmar. Vore det inte bra om vi kunde använda dessa maskiner att stärka processorkraften i våra system? I denna uppsättning av artiklar jag kommer att titta på de potentiella fördelarna med att anställa ett kontor rutnät med virtualiserade miljöer.

I del 2 tittade vi på jobb en server körs, och hur jobben ska konfigureras för att uppnå största mängden behandling samtidigt som varje jobb bearbetas utan att misslyckas.

Ställa in arbetare - eller "limp-server

Nästa steg i processen är att sätta upp din virtuella arbetare. För detta jag kommer att använda en installation av CentOS använder VirtualBox. Jag kommer att installera MySQL och PHP på servern, även känd som en slak (Li Nux, m ySQL, P HP) Servera (jag kan ha gjort det namnet upp).

  • Installera VirtualBox på din Windows-maskin (följ länk)
  • Ladda ner och installera CentOS (nuvarande version 5.3) inom en skapad virtuell maskin

Det är ingen idé jag går till detta finns förmodligen 1000-tals bra tutorials där ute (OK, här är ett: Skapa och Managing CentOS virtuell maskin under VirtualBox ). Det viktiga att notera antar jag är att jag ringde min virtuella maskinen GridMachine.

När det gäller mina val av virtualisering klient och operativsystem åka dit är ingen stor övertygande skäl för varje val. VirtualBox är något jag använder på min hemdator och stöds av de tre stora operativsystemen. Jag valde CentOS som det är en bra stabil OS och jag använder den på min egen webbserver. Jag är en stor anhängare av rätt verktyg för jobbet (även om jag tillämpa "använder snabbaste och enklaste för dig"-mentalitet här), så om operativsystemet X kör din kod snabbare och mer effektivt använda den istället:)

Viktigt att se till att din VM använder DHCP, annars för varje ny virtuell maskin skulle behöva konfigureras separat vilket är något som vi inte want.By använder DHCP vi inte behöver konfigurera nätverksinställningar individuellt för arbetstagare maskiner, kommer DHCP hand ut IP-adresser för dig. Därför kan du kopiera din virtuella maskin om Office utan att oroa dig ställa var och en upp (detta förbättrar skalbarheten och minskar arbetstagarens administration).

Den process du bör sträva efter att uppnå skulle vara att få en ny fysisk maskin, installera VirtualBox och sedan ganska mycket distribuera den virtuella bilden utan mycket annat. Det kan vara klokt att ställa alla dina anställda på ett annat delnät så att du kan åtminstone se hur många maskiner är igång. Du kommer också att behöva ställa in dina maskiner på en tomträtt eller obegränsad leasing DHCP.

Hur man kör jobb på arbetstagaren

Detta är ett intressant område och det finns flera vedertagna metoder för bearbetning jobb på arbetstagaren. Här ska jag bara diskutera de två mest uppenbara:

  • Ständigt kör skript: Ett skript, antingen det är en shell script, eller ett PHP-skript körs en gång på arbetstagaren och körs som en del av en oändlig loop. Jag har diskonterat denna metod som en krasch av manus och eventuellt dina anställda kommer att upphöra att fungera utan någon form av intervention.
  • Cron baserade skript: Varje X minuter cron demonen startar ett samtal till ditt manus för att få saker och ting. Utan någon kontroll kan detta leda till många många kopior av dina arbetare skriptet körs.

Mitt beslut var att gå med cron som startar ett shell script var 10 minutes. Mitt shell script utför följande uppgifter:

  1. Få en process lista och grep detta för "php". Om den inte hittas sedan fortsätta.
  2. Ring ditt jobb kod, i mitt fall detta skulle vara något PHP-baserad
  3. Arbetare script slutför köra
  4. Redo att gå igen på nästa lämpliga samtalet

Min bash-script ser ut ungefär så här:

  #! / Bin / sh
 om ps ax | grep-v grep | grep php> / dev / null
 sedan
     echo "Job bearbetar för närvarande, utträde"
 annat
     echo "jobb är inte körs, startar nu"
     php yourJobProcessingScript.php
 fi 

Obs: ECHO: s är nästan helt meningslöst, men kan hjälpa nästa person som kommer för att försöka redigera dem.

Som avslutar inrättandet av arbetstagaren virtuella maskinen, snabbt, enkelt och lätt att kopiera till varje ny maskinvara som är emot. Den "duktighet" av nätet är verkligen inte i visualiseras OS, dess allt att göra med kod som skapats för att bearbeta jobb, jobb konfiguration, och att se till att jobbet körs vid behov (dvs när den mottagande är inaktiv ).

Konfigurera Windows för att initiera Workers

Den första uppgiften är att räkna ut kommandot krävs för att köra den virtuella maskinen från fönstren kommandoraden. Om du har installerat VirtualBox på standardplatsen och du har namngett arbetstagare GridMachine sedan kommandot behövs för att ladda upp din arbetstagaren är:

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

Men att köra skriptet i en "huvudlös" stat vi behöver använda:

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

Detta kommer att starta den virtuella maskinen utan GUI och låt den spara staten graciöst. Det andra argumentet stängs av RDP så det inte står i konflikt med fönster RDP, eller ge dig ett meddelande om att lyssna på port 3389. Den virtuella maskinen namnet är skiftlägeskänsligt!

Därefter behöver vi ställa fönster upp till kick off våra arbetstagare VM när maskinen har varit inaktiv. För att göra detta (i Windows XP) du behöver för att gå Start -> Alla program -> Tillbehör -> Systemverktyg -> Schemalagda aktiviteter enligt nedan:

schemalagda aktiviteter

Klicka sedan på "Lägg till schemalagd aktivitet" följt av bläddra för att lägga till ett anpassat program. Navigera till din VBoxManage manus och klicka OK. Schemalägg din uppgift för något av alternativen (vi ändra detta i en minut) och fortsätta. Efter att hoppa över nästa skärm fönstren kommer att fråga dig vem du vill köra den här uppgiften, föreslår jag att antingen "Administratör" eller skapa en ny privilegierad användare. Kom ihåg att vi inte vill störa den vanliga personalen konto på maskinen på någon punkt. Klicka på Nästa och kontrollera att visa avancerade alternativ för denna uppgift.

Till slutet av körningen textrutan lägga våra "startvm GridMachine" sträng och se till att löpa först när du är inloggad lämnas omarkerad. Besök schema uppgift nästa och ändra schemat sjunka ner till alternativet "viloläge", välj den tid du vill att maskinen ska vara inaktiv innan du går vidare till nästa flik.

Slutligen avmarkera alternativet som anger stoppa uppgift om den har varit igång X tid, men välj alternativet för att stoppa uppgift om maskinen inte längre är ledig.

tidtabell

Det är det därefter på Windows Host setup!

Sammanfattning

I denna del har vi satt upp en virtuell maskin att fungera som en arbetstagare, liksom det sätt på vilket vi kallar och köra våra manus jobbearbetning (för mig själv ett PHP-skript). Härifrån vi tittar på hur man ställer in våra exemplar av Windows att starta den virtuella maskinen i huvudlösa läge när datorn blir inaktiv, och spara dess tillstånd när användaren återupptar användning av maskinen. Förhoppningsvis på denna punkt du ser hur enkelt det är att inrätta ett sådant system och är klåda att få några experiment som går själv!

Nästa gång

I del 4 vi kommer att titta på att använda verktyg för att säkerställa att du kör den senaste versionen av koden och datakällor så att resultaten är alltid up-to-date med de senaste affärsinformation och logik.

Office Grid Computing hjälp Virtuella miljöer - Del 1

Genom Steven Lloyd Watkin , fredag ​​4 dec 2009 11:23

Inledning

Jag arbetar i ett företag där vi driver många batchjobb bearbetning miljontals skivor av data varje dag och jag har funderat nyligen om alla maskiner som sitter runt varje dag gör ingenting i flera timmar. Vore det inte bra om vi kunde använda dessa maskiner att stärka processorkraften i våra system? I denna uppsättning av artiklar jag kommer att titta på de potentiella fördelarna med att anställa ett kontor rutnät med virtualiserade miljöer.

Som en PHP -utvecklare ska jag använda verktyg som jag använder varje dag nämligen, Linux, MySQL , PHP, VirtualBox och Subversion (SVN). Men jag hoppas att denna guide kommer att anpassa sig till andra språk och teknik lika bra.

Den lösning som jag ger kommer att vara mycket löst baserad på typ av behandling skulle vi behöver för att uppnå dock att detta inte kan vara sant genom hela artikeln som jag ska förändra saker till enkelhet, eller att producera mer intressant användningsscenarier.

Dessa virtualiserade miljöer kommer att köras på Windows-maskiner eftersom det är vad majoriteten av kontoren köra. De behandlingar som den kontorsmaskiner gör bör inte påverka personalen att använda dessa maskiner bör inte kräver något underhåll på maskinen, och vara lätt sättas till nya maskiner när de blir tillgängliga. Dessutom bör nya virtuella maskiner kräver ingen ytterligare konfiguration, eftersom detta avsevärt minskar skalbarhet och lätthet med vilken nätet kan förlängas.

Varför Distribuera ett rutnät Office Computing?

Först du kanske tänker, varför inte bara använda en dator resurs moln som Amazons EC2 plattform ? Tja orsakerna kan vara flera, till exempel:

  • Du kommer inte att överlåta vissa uppgifter till ett moln datormiljö
  • Du kan inte ställa vissa data i en moln datormiljö för juridiska skäl (t.ex. uppgifter att lämna landet), vilket kan av juridiska skäl, t.ex. NHS poster.
  • Du vill behålla dina produktionsenheter nära och har full kontroll över hårdvaran för
  • Du har inte projektmedel för att köra moln instanser
  • Ditt kontor har inte en anslutning till internet och därför inte möjligt att använda ett moln resurs
  • Du inte gillar regn, moln föreslår regn, därför ska du hålla dig borta

Jag är säker på listan skulle kunna fortsätta, men jag tror det räcker för nu.

Fördelar med ett Office Computing Grid

Tja, kan göra lite matematik (och i sann fysik stil låter göra några svepande antaganden). Tänk dig att du har stora biffiga bearbetning server som kör 100 jobb per dag. På kontoret du har 50 maskiner som står stilla 16 timmar om dagen, är vart och ett av dessa maskiner 10% lika kraftfullt som din biffiga bearbetning sever. (Alla resultat här är avrundade till underskatta prestanda ökning).

Så, maskin * 10% effekt * 2 / 3 tid = 0,067 dvs 1 skrivbordet bearbetning i dödtid kunde en process 6 fulla jobb per dag.

Om du skala nu upp detta tar det 15 idle skrivbord för att behandla så många jobb per dag som ditt huvudsakliga bearbetningen servern.

Så i vårt låtsas kontor på 50 maskiner vi kan öka vår processorkraft från 1 server upp till 4 fullständig behandling servrar, eller vi skulle kunna bearbetning 400 jobb per dag istället för 100.

Kallelse till några investeringar i ny hårdvara ditt företag har bara ökat sin batch-bearbetning kapacitet 4 gånger! Potentiellt du kommer att öka din elförbrukning utan från de flesta kontorsmiljöer Jag har varit i maskiner är i allmänhet kvar på natten ändå, så du kunde se detta som ett grönt initiativ.

Andra fördelar innebär också att investeringar i nya (eller uppdaterad) bearbetning servrar kan bli fördröjd om kontorsmaskiner är tillräckliga och att när du förbättra effekten av din kontorsmaskiner ditt kontor nätet blir mer kraftfull automatiskt.

Technologies

Vad du behöver? (Eller mer korrekt vad gjorde jag använder):

  • Idle kontorsmaskiner (i mitt fall en ledig gamla Windows XP laptop)
  • VirtualBox (eller annan virtualisering klientprogram)
  • En virtuell maskin med PHP, MySQL running kör en skära ner OS, jag ringer dessa mina LIMP servrar:)
  • Jobb för att köra
  • Job server (kan vara en annan virtuell maskin någonstans)

Typiska jobb

De typer av arbeten som detta system är utformat för att köras är följande:

  • Systemet får en lista med data som vi behöver för att matcha och returnera resultat
  • Matchande innefattar kontroll / söker flera (ganska statisk) datakällor
  • Resultat från datakällor kan kräva ytterligare validering, sammanslagning, kontroll av ytterligare datakällor som svar på resultat
  • Data returneras med matchande poster, fullt validerade och bearbetade
  • Varje post i ett jobb är oberoende av resten

Så i princip vi tittar på att köra jobb som kräver en blandning av databas uppslagningar och några siffertuggande, ett ganska typiskt scenario i en företagsmiljö.

Grid lösningar är inte bara fördelaktiga för bearbetning jobb av denna typ. I princip kan varje process som kan delas upp i självständiga enheter köras parallellt. Se denna wikipedia för exempel och mer information: Grid Computing , men ett par kända exempel är Seti @ Home och BIONC . Det finns ramar för att köra datorer nät, och dessa är väl värda att titta in.

Vad kommer vi uppnå?

Vid slutet av dessa artiklar jag hoppas kunna visa att driftsätta ett kontor nätet behöver inte vara enormt dyrt eller tidskrävande. Jag kommer att diskutera:

  • Koppla in systemet kontroll över arbetet, jobb konfiguration
  • Skapa en lämplig behandling virtuell maskin
  • Hur man ställer in systemet på en Windows-maskin
  • Garanterar att du använder den senaste kod och data
  • Distribution och benchmarking
  • Blickar framåt

Jag kommer att bygga (ok jag byggde, sedan skrev) ett exempel ansökan att testa koncept på en lokal dator med Windows XP och min "GridMachine" virtuell maskin. Mitt jobb Control Server kommer att vara min huvudsakliga dator som kör Fedora 11 .

Detta är på intet sätt tänkt att visa en fullt fungerande robust system, det innebar mer av en demonstration och diskutera visar att dessa saker kan uppnås i en relativt kort tid och till en låg kostnad. Du får gärna skicka mig några kommentarer, rättelser eller förbättringar och jag kommer göra mitt bästa för att hålla den här artikeln uppdateras för att matcha.

Nästa gång

I del 2 ska jag börja med att titta på jobbet kontrollsystemet, och titta på hur jobben ska konfigureras för att uppnå största mängden behandling samtidigt som varje jobb bearbetas utan att misslyckas.

Office Grid Computing hjälp Virtuella miljöer - Del 2

Genom Steven Lloyd Watkin , fredag ​​4 dec 2009 11:23

Inledning

Jag arbetar i ett företag där vi driver många batchjobb bearbetning miljontals skivor av data varje dag och jag har funderat nyligen om alla maskiner som sitter runt varje dag gör ingenting i flera timmar. Vore det inte bra om vi kunde använda dessa maskiner att stärka processorkraften i våra system? I denna uppsättning av artiklar jag kommer att titta på de potentiella fördelarna med att anställa ett kontor rutnät med virtualiserade miljöer.

I del 1 gav jag en översikt av systemet och teknik jag kommer att använda samt diskuterat några av de möjliga orsaker till varför du skulle vilja skapa ett kontor rutnät.

Kontroll över arbetet

Om du ska vara igång jobb då du kommer att behöva några sätt att hantera dem. Ditt jobb kontrollsystem (på ditt jobb server) behöver verkligen väl genomtänkt innan du ens försöker köra ett Office-nätet. Så det första, vad är de uppgifter för ett jobb styrsystem:

  • Dela ut jobb på begäran av arbetstagare
  • Berätta arbetstagare vilken typ av jobb för att köra
  • Spår jobb
  • Se till att jobb bara köras en gång
  • Ge jobbdata för arbetstagarna, eller åtminstone berätta var att få det

Systemet måste också vara utbyggbar, en lösning som fungerar för nu i ett enskilt fall får förlängas för att köra flera olika typer av arbeten som företaget ser värt i ett rutnät lösning. Till exempel kan arbetstillfällen vinna prioriteringar kan mer än ett jobb typ finns (dvs. flera kod baser), så småningom kan du även köra flera olika arbetsdatorer som är optimerade för varje typ av jobb (även om det rör sig bort från de "generiska arbetstagaren "idé). Försök alltid att tänka på framtiden när de utvecklar system kan ett kortsiktigt vision leda till mer långsiktiga frustration och ökad utvecklingstid.

Job Server

Vi kommer att behöva någonstans att kontrollera våra jobb från, detta bör vara det enda systemet i din tabell som har en fast Resource Locator, vara så att en IP-adress, värdnamn, URL (med interna DNS), etc. Detta beror på arbetarna måste veta var att söka jobb, arbetare behöver hitta systemet kontroll över arbetet (inte jobbet styrsystemet hitta arbetare).

Jobbet servern själv egentligen inte har en komplicerad uppgift (i en grundläggande system ändå), behöver den för att lagra en lista med jobb, dela ut jobb, få resultat, och därefter lagra dem för senare hämtning. Hur dessa delar (till exempel "dela ut jobb") definieras kan vara mycket grundläggande. Senare kan vi utvidga systemet till att omfatta ett administrationsgränssnitt för att lägga till, redigera, radera, avbryta jobb men detta är bortom denna övning.

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 )

Denna tabell består av 5 enkla fält,

  • 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. Jag skulle föreslå spårning arbetstagare genom deras IP-adress på ditt nätverk
  • started_at: When did the worker start the job? Genom att spåra jobb som inte har avslutats inom X tid vi vet att vi behöver plocka upp jobbet igen och börja behandlas av en annan arbetstagare. 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
  • Resultat: Resultatet 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

Som nämnts tidigare, kommer arbetarna att göra vårt jobb förvaltningen för oss för nu, så allt vi behöver verkligen göra är att hitta ett jobb som behöver behandling och få information. Hur skulle vi göra detta? Tja plocka våra kriterier jobb urval och söka jobb, i SQL gjorde jag följande:

  1. Ta några jobb som inte är markerade som färdiga men från vår arbetstagaren och återställa dem (substitut __ME__ ett identifieringsnummer, skulle enklast IP-adress):
      UPDATE `jobb` SET `status` = 0 där `status` = 1 och `started_by` = __ME__; 
  2. Använda våra kriterier jobb urval, välj ett jobb och tala om för styrsystemet att arbetstagaren har att göra med det:
      UPDATE `jobb` SET `status` = 1, "started_by` = __ME__, "started_at` = NOW () där `status` = 0 eller
     ("Status" = 1 och `started_at`> DATE_SUB (NU (), intervall X HOUR)) ORDER BY `id` ASC; 

    Genom att ta tag jobb som inte har återvänt resultat i X tid vi se till att alla jobb körs i händelse av en arbetstagare kraschar eller går AWOL.

  3. Nästa greppa jobb detaljer följt av posterna själva:
      SELECT * FROM `jobb` där `started_by` = __ME__ GRÄNS 1;
     SELECT * FROM `job_records` där `id` = __JOBID__; 

Efter avslutad jobb vi sätter vårt resultat register och markera jobbet som fullständig. Kom ihåg eftersom arbetstillfällen kan suspend / resume helst utrymme för en viss robusthet i skriptet. Det kan vara att uppgiften avbryter halvvägs genom en uppdatering av systemet kontroll över arbetet, så kontrollera antalet poster i ett jobb och antalet resultat sparas tillbaka till jobbet övervakningssystem skulle vara ett klokt drag.

Dessutom, samtidigt som detta visar hur jobben kan väljas och hanteras från en SQL-query frame ni verkligen borde abstrahera ditt jobb kontrollera så att om du väljer att byta till att använda en webbtjänst, en fil-baserat system, XML , eller någon annan antalet system de inte kommer att påverka koden ovanför.

Job konfiguration

Nästa aspekt att beakta är jobbets storlek och konfiguration. Genom att spela med jobb konfiguration vi kan slå till en utmärkt balans mellan fart, process replikering och tillförlitlighet. Ta ett par Ofa scenarier:

  1. Jobb ta en dag varje köra: Detta innebär att din arbetstagare behöver 15 dagar för att behandla varje jobb (kom ihåg 10% av kraften för 2/3rds av tiden). Detta är uppenbarligen inte en klok konfiguration, är ditt jobb storlek alldeles för stort! Det skulle ta minst dubbelt så lång tid att få ett jobb bearbetas bör den initiala arbetstagaren gå AWOL (tid att plocka upp att det inte har återvänt till följd plus upparbetning tid). I en idealisk du skulle ha minst en hel jobb enkelt bort i slutet av varje långa driftsstopp, som så håller du jobb tickande över och i värsta fall ett jobb skulle ta två dagar att processen bör den första go saknas.
  2. Jobb tar 1 minut att köra: Detta innebär att dina medarbetare tar ca 15 minuter att köra varje jobb. Även om detta kan förefalla idealiskt, får du extra arbete bearbetning vid lunchtid, kafferaster, möten osv detta scenario sätter stam på andra områden i ditt system och introducerar sina egna problem. Till exempel är det första din setup / handläggningstiden förhållande kommer att gå rätt ner, därför att förlora systemets effektivitet. Ditt nätverk kommer att vara ständigt strömmande jobbinformation till de olika arbetarna frustrerande personal som dong deras dagliga arbete. Du kommer också att lägga mer belastning på ditt jobb bearbetning servern som den har att dela ut massor av små bitar av arbete på en regelbunden basis. Slutligen, i denna situation, om ditt jobb servern går ner du kommer att skapa en enorm rygg logg över oavslutat arbete medan större arbeten kan fortsatt behandling lyckligt ovetande att jobbet servern hade några svårigheter.

I verkligheten blir det ingen idealisk konfiguration för din tabell inställning, mycket beror på de tillgängliga resurserna, typer av jobb, jobb handläggningstid krav, nätverkskapacitet, och så vidare. Men några riktlinjer skulle vara:

  • Storlek jobb så att varje arbetstagare kan ta sig igenom minst 3-4 jobb i en period av 15 timmar (den längsta sannolikt inaktiv tidsperiod)
  • Spela med jobbets storlek så att ställtiderna blir ganska obetydlig i jämförelse med handläggningstiden (med tanke på ovanstående punkt).
  • Om en arbetssökande inte komplett i den dubbla summan av tid (kanske mindre) du förväntar att slutföra det anta att dess gått AWOL och börja bearbeta den med en annan arbetare. Detta innebär att du kan få vänta upp till tre gånger den normala längden på ett jobb för att slutföra (möjligen längre om det efterföljande arbetet misslyckas). Du kanske vill minska denna tid, men var noga med att inte minska det alltför mycket som du kan börja dubblera bearbetning uppgifter på regelbunden basis.
  • Jobb bör vara oberoende av externa krav så mycket som möjligt. Jobbet server, till exempel, bör endast kontaktas i början och slutet av varje jobb.
  • Inte mätta ditt nätverk, kommer detta att ha två negativa effekter så kommer ditt dagtid personal hittar med hjälp av nätverket frustrerande och problem kan upplevas med anslutningar tidsgränsen går ut ett problem som bara kommer att bli värre när du skala din tabell.
  • Se till jobb kan köras på dina medarbetare. Om jobb blir för minneskrävande eller diskutrymme intensiva arbeten kommer att starta avbryter och det enda du märker är en droppe i antal arbetstillfällen som bearbetats med någon verklig anledning.

Skicka in Resultat av en Job

När de lämnar in resultatet av ett arbete är det viktigt att kontrollera att resultaten inte har lämnats in av en annan arbetstagare, särskilt om den aktuella arbetstagaren har varit vilande under en tid.

När resultaten har skickats in se till att antalet resultat motsvarar det antal poster inom jobb.

Som nämnts tidigare, och kan inte nog betonas, bygga feltolerans i jobb hämtning och resultat underkastelse. Arbetarna kan (och förmodligen kommer) att gå i vänteläge på de mest obekväma tider och detta måste tillgodoses. Också återigen abstrahera bort dina resultat inlämning kommer att bidra tillgodose framtida förändringar av ditt jobb styrsystem mycket lättare att hantera.

Sammanfattning

I detta section har vi tittat på vad ett jobb Control Server behöver göra och hur man får en mycket grundläggande system som inrättats. Vi diskuterade hur man hämtar ett jobb från styrsystemet och hur du bäst konfigurerar jobb för att få ut det mesta vår på ditt kontor bärverk. För att avsluta, ett stycke eller två på att lämna in resultat tillbaka till jobbet Control Server presenterades.

  • Ett jobb Control Server hanterar jobb och ser till att alla arbetsenheter är klara
  • Genom att abstrahera jobbet välja / resultat inlämnande vi kan ändra den teknik för kontroll servern utan mycket problem
  • Konfigurera jobb att se till att de sköts snabbt och effektivt utan att lägga alltför stor press på din nätverksinfrastruktur, och utan att dubbelarbete bearbetning uppgifter på regelbunden basis.
  • Se till att du bygger feltolerans och checking fel i dina rutiner, kan arbetstagare avbryta och återuppta och den mest obekväma gånger. Kom ihåg att kontrollera om resultaten har redan lämnats in av en annan arbetare.

Nästa gång

I del 3 kommer vi skapar våra virtuella maskin och sätta ihop våra Windows-maskiner att bli idle-tid arbetstagare.

Office Grid Computing hjälp Virtuella miljöer - Del 5

Genom Steven Lloyd Watkin , fredag ​​4 dec 2009 11:03

Inledning

Jag arbetar i ett företag där vi driver många batchjobb bearbetning miljontals skivor av data varje dag och jag har funderat nyligen om alla maskiner som sitter runt varje dag gör ingenting i flera timmar. Vore det inte bra om vi kunde använda dessa maskiner att stärka processorkraften i våra system? I denna uppsättning av artiklar jag kommer att titta på de potentiella fördelarna med att anställa ett kontor rutnät med virtualiserade miljöer.

I del 4 Vi tittade på att använda verktyg för att säkerställa att vi kör den senaste versionen av koden och datakällor så att resultaten är alltid up-to-date med de senaste affärsinformation och logik.

Pre-Deployment

Innan du distribuerar din nätet om det finns en sak du gör och en sak ensam är det riktmärke ditt nuvarande system! Oavsett vad du talar om kollegor om hur mycket extra arbete ditt system kommer att göra om du inte har siffror att backa upp detta dina garantier är ingenting. Så,

  • hur många poster kan du behandla idag? Per dag? Per timme?
  • Hur lång tid tar det normalt att vända sig om ett jobb?
  • Hur mycket mer kapacitet har du?

Det finns också ytterligare frågor:

  • Om din behandling server (eller någon av dina bearbetning servrar) går ner Hur kommer detta påverka din förmåga, kommer du att handikappade?
  • Vilka fördelar hoppas du / räkna med att få från ett rutsystem?
  • Är dina kontorsmaskiner som kan köra jobb?
  • Är dina (eller kan du jobb omvandlas) för att arbeta i denna stil för att driva?

Den sista viktig punkt är att ta din tid på någon större förändring så här. Uppdatera din processkod att arbeta med den nya metoden, riktmärke igen. Möjligen ställa in bearbetning server att köra en virtuell maskin, efter alla dina bearbetning servern kommer bara finnas en annan arbetare (bara en mycket kraftfull relativt). Låt den nya processen att lösa.

Deployment

Mitt förslag skulle vara att titta in på kontoret en helg utföra alla installationer och inställningar. Gör detta precis innan en fjorton dagars semester och åker så andra fattiga kille att hantera följderna ... kanske inte ...

Deployment för ett system som detta måste vara långsam. 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.

Stopp!

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

För att skriva denna rad korta artiklar jag skapat en mycket liten rutnät för att visa att teknik och metoder. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. På något sätt har jag gått ut och mättade en hel kontor med trafik och inte heller har jag haft tillgång till en fast anställda medarbetarna PC för att se hur värd resultatet påverkades.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. På detta hade jag installerat MySQL server installerad inrättas som en mästare i replikering, PHP Â och SVN kopplade genom apache (för åtkomst via arbetare 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.

Den virtuella maskinen inrättades med PHP, subversiv verksamhet, och 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
  • Räknade antal namn som ovan men att dela namn med mellanslag (dvs förnamn, mitten, efternamn)
  • 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

Nästa självklara steg skulle vara att faktiskt få en verklig förebild och börjar bygga ut ett system som detta i ett Office-miljö och se vad som händer. Att be ett företag att engagera sig i detta utan ett spår flammande företag att bevisa teknik och effektivitet kan vara lite svårt. Grid / Distributed computing är mycket populärt är vissa kretsar och har några större applikationer (BIONC, SETI @ Home, Folding @ Home, etc). Jag har dock inte hitta en mindre skala och enkla system som detta i mina sökningar som kan rullas ut i ett Office-miljö.

Jag har skapat en i princip gratis system med mestadels öppen källkod och verktyg som finns i nästan alla kontor. Den teknik som var i grunden har visat och visar att utföra och fungera som förväntat. Förhoppningsvis har jag visat att det inte fanns mycket arbete och med en mycket enkel installation kan du distribuera en Office-systemet grid computing som är kraftfull, billig, A och skalbar alla på samma gång.

När ett system är igång det finns nästan ingen ände på hur mycket anpassning och förbättringar du kan göra. Till exempel statistik / benchmarking kan enkelt läggas visar värdet av ett sådant system varje dag. Nya maskiner kan läggas till snabbt och enkelt och när de anländer med uppgraderingar av befintlig hårdvara stärka din processorkraft.

Jag hoppas du har njutit av att läsa denna serie av artiklar och gett dig en tankeställare om att köra ett system kontor rutnät. Lösningen som presenteras här inte nödvändigtvis fungera i alla situationer men bör kunna anpassas så att du kan få dina data behandlats med din egen lösning.

Du får gärna skicka mig några kommentarer, rättelser eller förbättringar och jag kommer göra mitt bästa för att hålla den här artikeln uppdateras för att matcha.

[Meddelande] barn pid XXXX avsluta signal segmenteringsfel (11)

Genom Steven Lloyd Watkin , söndag 11 okt 2009 06:09

Om du nyligen uppgraderat PHP eller Apache du kanske stöter på frågan om din webbserver återvänder tomma sidor, och kasta felmeddelanden i dina loggar med ingen aning om varför, här är ett möjligt sätt att fixa det ...

Jag har haft detta problem ett par gånger på senare tid efter en uppgradering Apache eller PHP på en virtuell maskin. Första gången jag märkte felet jag helt enkelt återgått till en backup av mina VM men andra gången insåg jag att jag måste undersöka frågan.

Första gången jag märkte frågan några av mina sidor var som serveras som tomma filer medan andra arbetade alldeles utmärkt. Efter några undersökning noterade jag att apache skrev ut till / var / log / http / error_log med följande meddelande repeatidly:

[Meddelande] barn pid XXXX avsluta signal segmenteringsfel (11)

Det finns inte tilld att gå on-line, och de flesta sidor om det spår av till ingenting. Som sagt, jag minskat ner problemet till PHP kraschar när man försöker onödiga dynamiska bibliotek.

Titta på min php.ini (/ etc / php.ini) jag har kommenterat bort alla dynamiska bibliotek lastas planerar kommentera dem tillbaka i vid behov. De två jag var tvungen att ta reda på var pdo.so och MySQL . så.

När dessa togs bort alla mina sidor var som serveras bra, precis som innan PHP / Apache uppdatering.

Trådlöst på Acer 5002 WLMi på Linux (Fedora 11)

Genom Steven Lloyd Watkin , lördag 11 juli, 2009 09:48

Som jag har spenderat ytterligare några timmar i dag utan tillgång till internet tänkte jag bättre få detta skrivs ned så att nästa gång jag röra min laptop upp informationen är lätt att fixa.

I grund och botten att få trådlös förare som arbetar för en Acer 5002 WLMi du behöver för att använda b43-fwcutter. Instruktioner finns här: Linux Wireless B43 .

Lätt när informationen finns.













Panorama Tema av Themocracy

11 visitors online now
1 guests, 10 bots, 0 members
Max visitors today: 16 at 12:39 am UTC
Denna månad: 26 kl 2011/07/05 12:35 UTC
I år: 130 på 28-03-2011 22:40 UTC
Alla tid: 130 på 28-03-2011 10:40 UTC