Categorie: Linux

Office Grid Computing met behulp van virtuele omgevingen - Deel 4

Door Steven Lloyd Watkin , vrijdag 04 december 2009 23:59

Inleiding

Ik werk in een bedrijf waar we lopen veel batch jobs verwerking miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets te doen voor enkele uren. Zou het niet goed zijn als we zouden kunnen gebruiken om systemen die machines versterking van de rekenkracht van onze? In deze reeks van artikelen die ik ben gaan kijken naar de potentiële voordelen van het gebruik van een kantoor raster met behulp van gevirtualiseerde omgevingen.

In deel 3 hebben we onze virtuele machine en het opzetten van Windows-machines van de werknemers wordt idle-tijd.

Het uitvoeren van de laatste code

Onvermijdelijk na het maken van uw werknemers business logica zal veranderen, zal bugs worden gevonden, sneller efficiënter code zal geproduceerd dus het verlaten van uw werknemers zaten rond de verwerking van gegevens met behulp van oude stinkende code . Hoe dan zorgen we ervoor dat we altijd de nieuwste en beste versie van onze verwerking scripts gebruiken?

Er zijn een paar zeer gemakkelijk eenvoudige manieren kunnen we dit doen, de truc is echter om de verwerking macht en het netwerkverkeer te verminderen om dit te bereiken. Laten we beginnen met de eenvoudigste oplossingen en langzaam te verbeteren over een paar iteraties.

De eerste methode zou zijn om gewoon verbinding maken met onze job control server (via Samba, FTP, of iets dergelijks) en trek de laatste versie van de code. Niet erg efficiënt, maar het zal het werk doen. Laat verbeteren dat enigszins, hoe zit een rsync script maken en gebruiken van dat elke keer plaats? Anders gezegd, wat over het zetten van onze nieuwste verwerking script in subversie het controleren van de code in eerste instantie en dan gewoon updaten van onze code op elke run ( svn update )?

Op het einde konden we eindigen met een bash-script (genoemd door cron elke 10 minuten), die ziet er zo simpel als dit:

  #! / Bin / sh
 Als ps ax | grep-v grep | grep php > / dev / null
 dan
     echo "Job is momenteel de verwerking, de afslag"
 anders
     echo "Job is niet draait, start nu"
     cd / pad / naar / werken / kopiëren
     svn update
     php yourJobProcessingScript.php
 fi 

Nu kunnen we er zeker van zijn dat met elke run we zeker bent de laatste code draait. We zijn ervoor zorgt dat dit door een aanpassing van onze code base elke keer voeren we een run en het verminderen van het netwerkverkeer door alleen de overdracht van het dossier verschillen tussen ons netwerk.

In mijn demonstratie setup, ik deed precies zoals hierboven beschreven. Subversion is geïnstalleerd op mijn werk verwerking server en ik gewoon trok de laatste code van tak een "werknemer" met behulp van 'svn update'. Ik heb ook nog een versie nummer tag op mijn verwerking script dat was om de database terug als onderdeel van de resultaten terug. Op deze manier kon ik zien dat mijn code werd elke keer als ik mijn koffer gekopieerd naar de werknemer tak wil zeggen dat ik was zeker het uitvoeren van de laatste verwerking script bijgewerkt.

Met behulp van de meest recente gegevens

Als uw baan verwerking maakt gebruik van gegevensbronnen dan op een bepaald moment deze zullen ook worden bijgewerkt. Tenzij u contact opnemen met uw gegevensbronnen op een zeer onregelmatige basis je gaat om uw netwerk met verkeerslichten overstromingen zodra uw werknemers beginnen te lopen om alles tot stilstand. Voor mijn oplossing heb ik besloten dat ik zou willen bewegen mijn gegevens bronnen met mijn VM's.

Houd je bent er paarden! Wat als mijn data bronnen HUGE zijn? Nou dit is echt een geval van hoe veel data hebben we het? Het kan server meer kosteneffectief moeilijk te installeren van een extra grotere schijf in elke machine dan de verwerking van de aankoop van een extra. Dit is een kwestie van budget en is aan het bedrijf om te beslissen. Het misschien dat uw gegevens bronnen zijn zo groot dat het gewoon niet haalbaar om machines te houden dat bedrag van de gegevens in uw werknemer. In dat geval wat zou je doen? Nou we konden kijken naar het bellen van een lokale data-server, maar dit kan problemen veroorzaken met het netwerk. In dit geval een grid-systeem, zoals dit kan het niet meer realistisch om in uw kantooromgeving. Het kan ook zijn dat je kunt kijken naar alternatieve draait strategieën, bijvoorbeeld alleen het roepen van uw werknemers tussen 8pm en 6 uur per nacht en / of smoren gegevensbron verzoeken.

Bewegen op laten we zeggen dat onze data bronnen oplopen tot 100GB data. Nou ja dat is heel wat data om te bewegen het netwerk op een update. Hoe zouden we ervoor zorgen dat we de laatste kopie van de gegevens zijn in dit geval? Rsync is een mogelijkheid, maar persoonlijk denk ik door het uitvoeren van uw meest recente gegevens de bron op uw werk verwerking server en het instellen van deze zich als een meester in het replicatie (met een mooie lange bin log) zou de weg te gaan:

replicatie Door het instellen van elk van uw werknemers als een slaaf van de job control-server updates in uw gegevens bronnen zal mooi trickle down om uw werknemers zonder een enorme toename in het netwerk van de activiteit (dat wil zeggen, tenzij je een enorme gegevens bij te werken en al uw werknemers kick in in een keer). Dit heeft voordelen ten opzichte van rsync in dat je niet zou krijgen een lange pauze voor elke job, als de database-updates, de mysql daemon op uw werknemer zal voortdurend geactualiseerd zijn gegevens tijdens de verwerking wordt voortgezet.

Dit is hoe ik mijn demonstratie-server. Het opzetten van replicatie volgde ik de gids op de MySQL site ( opzetten van replicatie ) en binnen 20 minuten had ik mijn mand werknemer repliceren van de job control servers dataset. Voor elke extra werknemer van de replicatie-instellingen en het proces werkte elke keer als de VM is gekopieerd.

Samenvatting

In dit deel van het artikel hebben we gekeken naar hoe gemakkelijk en pijnloos het is om uw verwerking code up-to-date te houden door using rsync of subverion (SVN) aan het werk te doen en het netwerkverkeer te verminderen op hetzelfde moment te We hebben ook besproken hoe om uw gegevensbron informatie up-to-date door het te laten doorsijpelen aan elk van uw werknemers. Zo kunnen we ruimte te zorgen dat we gelijke tred houden met business logica en informatie in ons kantoor grid systeem. Er zal uiteraard worden talloze alternatieven voor het uitvoeren van deze taken, maar hier waren twee eenvoudige voorbeelden om te laten zien hoe makkelijk een oplossing is om langs te komen.

Volgende keer

In het laatste deel van deze serie, toepasselijk genaamd Deel 5 , zullen we bespreken de implementatie van dit systeem voor. Ik zal een samenvatting van wat er is geleerd en wat ik weten te creëren.

Office Grid Computing met behulp van virtuele omgevingen - Deel 3

Door Steven Lloyd Watkin , vrijdag 04 december 2009 23:37

Inleiding

Ik werk in een bedrijf waar we lopen veel batch jobs verwerking miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets te doen voor enkele uren. Zou het niet goed zijn als we zouden kunnen gebruiken om systemen die machines versterking van de rekenkracht van onze? In deze reeks van artikelen die ik ben gaan kijken naar de potentiële voordelen van het gebruik van een kantoor raster met behulp van gevirtualiseerde omgevingen.

In deel 2 hebben we gekeken naar de banen van een server wordt uitgevoerd, en hoe werkgelegenheid moet worden geconfigureerd om te mislukken bereiken grootste hoeveelheid van de verwerking tegelijkertijd voor te zorgen dat elke taak wordt verwerkt zonder.

Het opzetten van uw werknemer - of "limp-server

De volgende stap in het proces is het opzetten van uw virtuele werknemers. Voor dit ga ik een installatie van CentOS met behulp van VirtualBox te gebruiken. Ik ga te installeren mySQL en PHP op de server, ook wel bekend als een slap (Li nux, m ySQL, P PK) Servera (Misschien heb ik die naam up).

  • VirtualBox installeren op je Windows machine (volg link)
  • Download en CentOS (huidige versie 5.3) te installeren in een virtuele machine gemaakt

Het heeft geen zin mij gaat dit er waarschijnlijk 1,000 's van grote tutorials die er zijn (ok, hier is een: maken en Managing CentOS virtuele machine onder virtualbox ). Het belangrijkste punt om op te merken denk ik is dat ik belde mijn virtuele machine GridMachine.

Zover gaat mijn keuzes van virtualisatie-client en het besturingssysteem is er geen grote dwingende reden voor elke keuze. VirtualBox is iets wat ik op mijn eigen machine en wordt ondersteund door de drie grote besturingssystemen. Ik koos voor CentOS als een goede stabiele OS en ik gebruik het op mijn eigen webserver. Ik ben een groot voorstander van het juiste gereedschap voor de job (hoewel ik het toepassen van 'gebruik maken van de snelste en makkelijkste voor jou' mentaliteit hier), dus als het besturingssysteem X-code, voert je sneller en efficiënter te gebruiken in plaats dat:)

Belangrijk Zorg ervoor dat uw VM DHCP gebruikt, anders is voor elke nieuwe virtuele machine zou moeten apart worden geconfigureerd dat is iets wat we niet want.By via DHCP we hoeven niet individueel te configureren netwerkinstellingen voor werknemer machines, zal DHCP hand uit IP's voor je. Dus u kunt uw virtuele machine over het kantoor zonder zich te bekommeren over het instellen van een ieder up (dit verbetert de schaalbaarheid en vermindert de werknemer administratie).

Het proces dat je moet streven te bereiken zou zijn om een ​​nieuwe fysieke machine te verkrijgen, VirtualBox installeren, en vervolgens vrij veel het virtuele beeld te zetten zonder veel anders. Het is misschien verstandig om setup al uw werknemers op een ander subnet, zodat u kunt tenminste zien hoeveel machines draaien. U moet ook het opzetten van uw machines op een erfpacht of een onbeperkte lease DHCP.

Hoe te Jobs draaien op de werknemer

Dit is een interessant gebied en er zijn diverse geldige methoden voor de verwerking van banen op de werknemer. Hier zal ik gewoon bespreken de twee meest voor de hand liggende:

  • Voortdurend het uitvoeren van scripts: Een script, zij het een shell-script, of een PHP-script wordt een keer uitgevoerd op de werknemer en loopt als onderdeel van een oneindige lus. Ik heb scherp geprijsde deze methode als een crash van het script en mogelijk uw werknemers zullen ophouden te lopen zonder enige vorm van interventie.
  • Cron gebaseerd script execution: Elke x minuten de cron daemon start een oproep om uw script op gang te krijgen. Zonder enige controle kan dit leiden tot vele, vele kopieën van uw werknemer script draait.

Mijn besluit was om te gaan met cron die start een shell-script om de 10 minutes. Mijn shell script voert de volgende taken:

  1. Hier krijg je een lijst met processen en grep dit voor 'php'. Als deze niet gevonden dan verder.
  2. Bel uw taak-code, in mijn geval zou dit iets zijn gebaseerd op PHP
  3. Werknemer script voltooit zijn run
  4. Klaar om opnieuw te gaan op de volgende geschikte oproep

Mijn bash-script ziet er als volgt uit:

  #! / Bin / sh
 Als ps ax | grep-v grep | grep php> / dev / null
 dan
     echo "Job is momenteel de verwerking, de afslag"
 anders
     echo "Job is niet draait, start nu"
     php yourJobProcessingScript.php
 fi 

Opmerking: de echo's zijn bijna volledig zinloos, maar kan hen helpen de volgende persoon die langs komt om te proberen te bewerken en.

Dat concludeert de set-up van de werknemer virtuele machine, snel, eenvoudig en gemakkelijk te kopiëren naar elke nieuwe stuk hardware dat wordt ontvangen. De 'slimheid' van het net niet echt in de gevisualiseerde OS, zijn alle te maken met de code die te verwerken banen, de baan configuratie, en ervoor te zorgen dat het werk wordt uitgevoerd wanneer nodig (dat wil zeggen wanneer de host inactief is ).

Het opzetten van Windows Werknemers Initialise

De eerste taak is te werken buiten de opdracht nodig zijn om de virtuele machine van de Windows command line uit te voeren. Als u hebt geïnstalleerd VirtualBox in de standaard locatie en je hebt de naam van uw werknemer GridMachine vervolgens de opdracht nodig is om te laden van uw werknemer:

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

Maar om het script in een 'headless' staat die we moeten gebruiken uit te voeren:

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

Dit start de virtuele machine zonder dat de GUI en laat het netjes op te slaan staat. Het tweede argument gaat uit RDP, zodat het niet in strijd is met windows RDP, of geeft u een boodschap over luisteren op poort 3389. De virtuele machine naam is hoofdlettergevoelig!

Vervolgens moeten we naar windows opgezet om kick off van onze werknemer VM zodra de machine inactief is geweest. Om dit te doen (op Windows XP) je nodig hebt om te gaan Start -> Alle Programma's -> Bureau-accessoires -> Systeemwerkset -> Geplande Taken als volgt:

geplande taken

Klik vervolgens op 'Geplande taak toevoegen ", gevolgd door bladeren naar een aangepast programma toe te voegen. Navigeer naar uw VBoxManage script en klik op OK. Plan uw taak voor een van de opties (we zullen deze verandering in een minuut) en ga verder. Na het overslaan van het volgende scherm Windows zal u vragen wie je deze taak wilt uitvoeren, zou ik stel ofwel 'Administrator' of het creëren van een nieuwe bevoorrechte gebruiker. Onthouden we willen niet te bemoeien met de standaard personeel account op de machine op elk punt. Klik op Volgende en controle blijkt geavanceerde opties voor deze taak.

Naar het einde van de run tekstvak toe te voegen onze 'startvm GridMachine' string en ervoor zorgen dat alleen wordt uitgevoerd wanneer ingelogd wordt overgelaten afgevinkt. Bezoek het schema taak de volgende keer op en neer te veranderen het schema vallen op de optie 'idle', de hoeveelheid tijd die u wilt de machine inactief moet kiezen voordat u naar het volgende tabblad.

Ten slotte uitvinken van de optie die staten stoppen met de taak als deze is het draaien van X hoeveelheid tijd, maar vink de optie om de taak te stoppen als de machine is niet meer actief is.

schema

Dat is het dan voor de Windows host setup!

Samenvatting

In dit deel hebben we het opzetten van een virtuele machine op te treden als een werknemer, alsook de manier waarop we bellen en uit te voeren onze taak de verwerking van scripts (voor mezelf een PHP-script). Vanaf hier kijken we naar hoe het opzetten van onze exemplaren van Windows om het opstarten van de virtuele machine in headless mode wanneer de computer inactief, en sla de staat wanneer de gebruiker hervat gebruik van de machine. Hopelijk op dit punt je ziet hoe eenvoudig het is om een ​​dergelijk systeem en staan ​​te popelen om wat experimenten te gaan jezelf!

Volgende keer

In deel 4 zullen we kijken naar het gebruik van tools om ervoor te zorgen dat je de logica draait de nieuwste versie van de code en gegevensbronnen zodat de verkregen resultaten zijn altijd up-to-date met de nieuwste zakelijke informatie en.

Office Grid Computing met behulp van virtuele omgevingen - Deel 1

Door Steven Lloyd Watkin , vrijdag 04 december 2009 23:23

Inleiding

Ik werk in een bedrijf waar we lopen veel batch jobs verwerking miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets te doen voor enkele uren. Zou het niet goed zijn als we zouden kunnen gebruiken om systemen die machines versterking van de rekenkracht van onze? In deze reeks van artikelen die ik ben gaan kijken naar de potentiële voordelen van het gebruik van een kantoor raster met behulp van gevirtualiseerde omgevingen.

Als PHP developer ga ik, gebruiksvriendelijke tools die ik gebruik elke dag, namelijk Linux mySQL , PHP, VirtualBox en Subversion (SVN). Maar ik hoop dat deze gids zal aanpassen aan andere talen en technologieën net zo goed.

De oplossing die ik geven zal zeer losjes gebaseerd op het type van de verwerking zouden we moeten echter dit te bereiken kan niet waar zijn door het hele artikel als ik dingen veranderen voor eenvoud, of om meer interessante gebruiksscenario's te produceren.

Deze gevirtualiseerde omgevingen zal draaien op Windows-machines, omdat dit is wat de meerderheid van de kantoren lopen. De verwerking dat de kantoormachines doen mag niet interfereren met het personeel gebruik van die machines, dient vereisen geen onderhoud aan de machine, en gemakkelijk inzetbaar om nieuwe machines als ze beschikbaar zijn. Ook moeten nieuwe virtuele machines vereisen geen extra configuratie als deze sterk vermindert de schaalbaarheid en het gemak waarmee de grid systeem kan worden uitgebreid.

Daarom implementeren een Office-Computing Grid?

In de eerste plaats denkt u misschien, waarom niet gewoon gebruik van hulpbronnen een cloud computing, zoals EC2-platform van Amazon ? Nou, de redenen kunnen zijn meerdere, bijvoorbeeld:

  • Je zult niet toe, bepaalde gegevens aan een cloud computing omgeving
  • U kunt niet bepaalde gegevens in een cloud computing omgeving voor juridische redenen (bijvoorbeeld gegevens die het land verlaten), mogelijk om juridische redenen, bijvoorbeeld NHS records.
  • U wilt uw verwerkingseenheden te sluiten en hebben volledige controle over de hardware te
  • U hebt geen middelen om het project cloud instances draaien
  • Uw kantoor heeft geen verbinding met het internet en dus het niet mogelijk om een ​​wolk het gebruik van hulpbronnen
  • Je hebt geen regen, wolken suggereren regen, dus je blijft ver weg

Ik weet zeker dat de lijst zou kunnen blijven, maar ik denk dat is genoeg voor nu.

Voordelen van een Office-Computing Grid

Nou, laat doen wat wiskunde (en natuurkunde in ware stijl laat maken sommige vegen aannames). Stel je hebt grote vlezige verwerking server draait 100 arbeidsplaatsen per dag. In uw kantoor u 50 machines die zijn idle 16 uur per dag, elk van deze machines is 10% zo krachtig als je vlezige verwerking verbreken. (Alle resultaten zijn hier afgerond op onderschatten de prestaties te verhogen).

Dus, machine * 10% vermogen * 2 / 3 keer = 0,067 dwz 1 desktop verwerking in de standby-tijd zou kunnen 1 proces 6 volledige banen per dag.

Als je nu dit op schaal Het duurt 15 idle desktops te verwerken zoveel banen per dag als je belangrijkste verwerking server doet.

Dus in ons alsof kantoor van 50 machines kunnen wij meer onze processing power van 1 server tot 4 volledige verwerking servers, of we konden worden verwerkt 400 banen per dag in plaats van 100.

Mededeling, want geen enkele investering in nieuwe hardware van uw bedrijf heeft zojuist verhoogde haar batch processing capaciteit 4 keer! Potentieel je gaat om uw energieverbruik te verhogen, maar van de meeste kantooromgevingen Ik ben al naar machines over het algemeen links op overnachting toch, dus je kan dit zien als een groen initiatief.

Andere voordelen ook betekenen dat de investeringen in nieuwe (of vernieuwde) verwerking servers kunnen worden vertraagd als je kantoormachines toereikend zijn en dat als je het verbeteren van de kracht van uw kantoormachines uw kantoor grid wordt krachtiger automatisch.

Technologieën

Wat heb je nodig? (Of meer correct wat heb ik gebruik):

  • Idle kantoormachines (in mijn geval een reserve oude Windows XP laptop)
  • VirtualBox (of een andere virtualisatie client software)
  • Een virtuele machine met PHP, MySQL running het runnen van een gekapt OS, ik bel deze mijn LIMP servers:)
  • Jobs te lopen
  • Job server (kan ook een andere virtuele machine ergens)

Typisch Werk

De aard van de jobs die dit systeem is ontworpen om te draaien is als volgt:

  • Systeem ontvangt een lijst met gegevens waarop we moeten overeenkomen en resultaten opleveren
  • Matching houdt de controle / zoeken verschillende (redelijk statisch) gegevensbronnen
  • Resultaten van gegevensbronnen kunnen verlangen dat verdere validatie, het samenvoegen, de controle van aanvullende gegevensbronnen in reactie op de resultaten
  • Gegevens is terug met overeenkomende records, volledig gevalideerd en verwerkt
  • Elke record in een baan is onafhankelijk van de rest

Dus eigenlijk zijn we op zoek bij het runnen van banen die een mengsel van database lookups en wat rekenwerk, een vrij typisch scenario in een zakelijke omgeving vereisen.

Grid-oplossingen zijn niet alleen voordelig zijn voor de verwerking van banen van dit type. In principe kan iedere methode die kan worden opgesplitst in zelfstandige eenheden worden parallel lopen. Zie deze wikipedia voor voorbeelden en meer informatie: Grid Computing , maar een paar van de bekendste voorbeelden zijn Seti @ Home en BIONC . Er zijn kaders voor het uitvoeren van computing grids, en deze zijn goed waard.

Wat gaan we bereiken?

Tegen het einde van deze artikelen hoop ik aan te tonen dat de implementatie van een kantoor net niet hoeft te worden enorm duur of tijdrovend. Ik ga om te bespreken:

  • Het opzetten van de job control-systeem, het scheppen van de configuratie
  • Het creëren van een juiste verwerking virtuele machine
  • Hoe om het systeem op een windows machine
  • Zorgen voor u de laatste code en data
  • Inzet en benchmarking
  • Vooruitblikkend

Ik zal bouwen (ok ik heb gebouwd, dan schreef dit) een voorbeeld aanvraag aan de concepten testen op een lokale machine met Windows XP en mijn 'GridMachine' virtuele machine. Mijn job control server draait is mijn belangrijkste machine die Fedora 11 .

Dit is op geen enkele manier bedoeld om een ​​volledig werkende robuust systeem, aantonen dat het betekende meer van een demonstratie en het bespreken waaruit blijkt dat deze dingen kunnen worden bereikt in een redelijk korte tijd en tegen weinig kosten. Gelieve te voelen vrij om mij eventuele opmerkingen, correcties of verbeteringen en ik zal mijn best doen om dit artikel aan te passen bijgewerkt te houden.

Volgende keer

In deel 2 zal ik beginnen door te kijken naar de job control systeem, en kijken hoe werkgelegenheid moet worden geconfigureerd om te mislukken bereiken grootste hoeveelheid van de verwerking tegelijkertijd voor te zorgen dat elke taak wordt verwerkt zonder.

Office Grid Computing met behulp van virtuele omgevingen - Deel 2

Door Steven Lloyd Watkin , vrijdag 04 december 2009 23:23

Inleiding

Ik werk in een bedrijf waar we lopen veel batch jobs verwerking miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets te doen voor enkele uren. Zou het niet goed zijn als we zouden kunnen gebruiken om systemen die machines versterking van de rekenkracht van onze? In deze reeks van artikelen die ik ben gaan kijken naar de potentiële voordelen van het gebruik van een kantoor raster met behulp van gevirtualiseerde omgevingen.

In deel 1 heb ik een overzicht van het systeem en technologieën die ik zal gebruiken besproken, evenals enkele van de mogelijke redenen waarom u zou willen grid creëren van een kantoor.

Job Control

Als je gaat draaien banen dan moet je gaan om enkele manier om ze te beheren nodig. Uw job control systeem (op uw werk-server) moet echt goed doordacht voordat zelfs een poging om een ​​kantoor grid lopen. Dus de eerste plaats, wat zijn de taken voor een job controle systeem:

  • Uitdelen banen op verzoek van werknemers
  • Vertel de werknemers wat voor soort banen te lopen
  • Track jobs
  • Ervoor te zorgen dat de banen slechts eenmaal uit te voeren
  • Bieden job data voor de werknemers, of op zijn minst vertellen waar het te krijgen

Het systeem moet ook uitbreidbaar, een oplossing die werkt voor nu in een enkel geval kan worden uitgebreid tot verschillende soorten banen lopen als het bedrijfsleven ziet de waarde in een raster oplossing. Bijvoorbeeld, banen kunnen krijgen prioriteiten, kan meer dan een soort taak bestaat (dwz meerdere code basen), uiteindelijk kun je zelfs lopen verschillende werknemer machines die zijn geoptimaliseerd voor elk type van werk (hoewel dat niet af te stappen van de 'generieke werknemer 'idee). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

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

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

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

Basisinstellingen

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

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

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

This table consists of 5 simple fields,

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

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

Lets add a few example jobs:

example jobs

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

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

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

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

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

Selecting a job

Zoals eerder vermeld, de werknemers zullen onze taakbeheer te doen voor ons nu, dus alles wat we nodig om echt te doen is het vinden van een baan, dat de verwerking van de behoeften en ontvang de informatie. Hoe zouden we dit doen? Nou halen onze taak selectiecriteria en kijk voor banen, in SQL heb ik het volgende:

  1. Neem geen vacatures die niet zijn gemarkeerd als compleet, maar van onze werknemers en reset ze (vervangende __ME__ met een identifier, makkelijkst zou IP-adres):
      UPDATE `vacatures` SET `status` = 0 WHERE `status` = 1 EN `started_by` = __ME__; 
  2. Met behulp van onze job selectiecriteria, selecteert u een baan en vertel het controlesysteem dat deze werknemer zich bezighoudt met het:
      UPDATE `vacatures` SET `status` = 1, "started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 of
     (`Status` = 1 EN `started_at`> DATE_SUB (NU (), INTERVAL x uur)) ORDER BY `id` ASC; 

    Door grijpen banen die niet zijn teruggekeerd resultaten in X hoeveelheid tijd die we ervoor zorgen dat alle opdrachten worden uitgevoerd in het geval van een werknemer botsen of AWOL.

  3. Volgende grijp de banen details gevolgd door de documenten zelf:
      SELECT * FROM `banen` waar `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Na voltooiing van het werk dat wij voegen ons resultaat records en markeer de taak als voltooid. Herinneren als banen kan suspend / resume te allen tijde mogelijk voor sommige robuustheid in je script. Het kan zijn dat de taak halverwege opschort door het bijwerken van de job control systeem, dus het controleren van het aantal records in een baan en het aantal resultaten opgeslagen in de job control systeem zou een verstandige zet te zijn.

Bovendien, terwijl dit laat zien hoe banen kunnen worden geselecteerd en beheerd vanuit een SQL-query frame moet je echt abstraheren je baan controle, zodat als u besluit om over te schakelen naar het gebruik van een web service, een bestand gebaseerd systeem, XML , of enige andere aantal systemen zal niet van invloed op de code erboven.

Job Configuratie

Het volgende aspect te onderzoeken, is grootte van een opdracht en configuratie. Door te spelen met job configuratie kunnen we vinden een uitstekende balans tussen snelheid, proces-replicatie, en betrouwbaarheid. Neem een ​​paar OFA scenario's:

  1. Jobs Neem 1 dag per te lopen: Dit betekent dat uw werknemers moeten 15 dagen tot taak te verwerken elke (denk 10% van de stroom voor 2/3rds van de tijd). Dit is niet duidelijk een wijs configuratie, je baan grootte is veel te groot! Het zou ten minste het dubbele van de tijd om een ​​baan verwerkt, moeten de eerste werknemer gaan AWOL krijgen (tijd op te halen dat zij niet beschikt over een plus opwerking tijd terug). In een ideale zou je ten minste een volledige baan eenvoudig geklaard door het einde van elke lange periode van inactiviteit, op die manier houdt u de banen tikken over en om het ergste geval een baan zou dagen duren twee tot proces moet de eerste gaan ontbreekt.
  2. Taken 1 minuut lopen: Dit betekent dat uw werknemers duurt ongeveer 15 minuten tot taak uit te voeren per stuk. Hoewel dit kan in eerste instantie lijkt ideaal, krijg je extra werk verwerking tijdens de lunch, koffiepauzes, vergaderingen, enz. dit scenario met druk op andere gebieden van uw systeem en introduceert haar eigen problemen. Bijvoorbeeld, wordt eerst je setup / verwerkingstijd ratio gaat recht naar beneden gaan, dus verliezen rendement van het systeem. Uw netwerk zal worden voortdurend streaming job informatie aan de verschillende werknemers frustrerend medewerkers die dong hun dagelijkse werk. Je bent ook gaan om meer spanning op je werk verwerking server omdat het om schotel uit heel veel kleine stukjes van het werk op een regelmatige basis. Ten slotte, in deze situatie als je baan server uitvalt je gaat een enorme achterstand van de onvoltooide werk te creëren terwijl grotere banen kunnen de permanente verwerking onwetend dat de klus server moeilijkheden ondervindt.

In werkelijkheid zal er niet een ideale configuratie voor uw grid opstelling worden, hangt veel af van de beschikbare middelen, de soorten van werk, beroep doorlooptijd eisen, netwerkmogelijkheden, enzovoort. Echter enkele richtlijnen zou zijn:

  • Afdruktaken, zodat iedere werknemer kan krijgen door middel van ten minste 3-4 banen in een periode van 15 uur (de langste waarschijnlijk lang het duurt)
  • Spelen met de grootte van een opdracht, zodat setup-tijd wordt vrij onbeduidend in vergelijking met de verwerking tijd (rekening houdend met het bovenstaande punt).
  • Als een opdracht niet volledig in het dubbele van de hoeveelheid tijd (misschien minder) je verwacht dat het volledige er vanuit gaan dat haar verdwenen AWOL en verwerking met een andere werknemer te starten. Dit betekent dat u hoeft te wachten tot drie keer de normale lengte van een baan voor het in te vullen (eventueel langer indien de latere taak niet). Wilt u misschien de tijd te beperken, maar wees voorzichtig niet te verminderen te veel als je kan beginnen dupliceren verwerking van taken op een regelmatige basis.
  • Banen moeten onafhankelijk zijn van buiten de eisen worden zoveel mogelijk. De job-server, bijvoorbeeld, mag alleen worden gecontacteerd bij het begin en het einde van elke opdracht.
  • Niet verzadigen uw netwerk, zal dit zijn twee negatieve effecten, zal je overdag personeel te vinden met behulp van het netwerk frustrerend en problemen kunnen worden ervaren met aansluitingen timing een probleem dat alleen maar erger wordt als je je grid schaal.
  • Zorgen voor banen kan worden uitgevoerd op uw werknemers. Als taken worden te geheugen-intensieve of schijfruimte intensieve banen zal beginnen afbreken en het enige wat je zal opvallen is een daling in het aantal banen verwerkt met geen echte reden waarom.

Overleggen van de resultaten van een Job

Bij de indiening van de resultaten van een baan is het belangrijk om te controleren dat geen resultaten zijn ingediend door een andere werknemer, zeker als de huidige werknemer is slapende voor bepaalde tijd.

Wanneer de resultaten worden voorgelegd ervoor te zorgen dat het aantal resultaten van het aantal records wedstrijden binnen de baan.

Zoals eerder vermeld, en kan niet genoeg worden benadrukt, bouwen fouttolerantie in beroep ophalen en de resultaten indienen. De werknemers kunnen (en waarschijnlijk zal) gaan in de modus te schorten op de meest ongelegen tijden en dit moet worden gehouden. Ook weer weg te abstraheren uw resultaten inzending zal helpen voor toekomstige wijzigingen in uw job control systeem veel eenvoudiger om te gaan met catering.

Samenvatting

In dit section hebben we gekeken naar wat een baan control server moet doen en hoe je een zeer fundamentele opgezet te krijgen. We besproken hoe je een baan van de besturing te halen en de beste manier om banen te configureren om de meeste van onze van uw kantoor grid systeem. Om te eindigen, een paragraaf of twee op de indiening van de resultaten terug naar de job control-server werd gepresenteerd.

  • Een job control-server beheert banen en zorgt ervoor dat alle werkzaamheden zijn afgerond eenheden
  • Door te abstraheren van uw taak te selecteren / resultaten indiening kunnen we de technologie van de controle-server te wijzigen zonder veel problemen
  • Configureren uw opdrachten om ervoor te zorgen dat ze snel en efficiënt werken zonder te veel druk op uw netwerk infrastructuur, en zonder doublures verwerking van taken op een regelmatige basis.
  • Zorg ervoor dat u fouttolerantie en fout checking te bouwen in uw routines, kunnen de werknemers op te schorten en te hervatten en de meest ongelegen tijden. Vergeet niet te controleren of de resultaten zijn reeds ingediend door een andere werknemer.

Volgende keer

In deel 3 We maken onze virtuele machine en het opzetten van onze Windows-machines te worden idle-time werknemers.

Office Grid Computing met behulp van virtuele omgevingen - Deel 5

Door Steven Lloyd Watkin , vrijdag 04 december 2009 23:03

Inleiding

Ik werk in een bedrijf waar we lopen veel batch jobs verwerking miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets te doen voor enkele uren. Zou het niet goed zijn als we zouden kunnen gebruiken om systemen die machines versterking van de rekenkracht van onze? In deze reeks van artikelen die ik ben gaan kijken naar de potentiële voordelen van het gebruik van een kantoor raster met behulp van gevirtualiseerde omgevingen.

In deel 4 hebben we gekeken naar het gebruik van tools om ervoor te zorgen dat we de logica draait de nieuwste versie van de code en gegevensbronnen zodat de verkregen resultaten zijn altijd up-to-date met de nieuwste zakelijke informatie en.

Voorafgaand aan de implementatie

Voordat de implementatie van je grid systeem als er een ding is wat je doet en een ding alleen al de benchmark uw huidige systeem! Ongeacht wat je collega's over hoeveel extra werk uw systeem gaat doen zien, tenzij u nummers van deze back-up van uw garanties zijn niets. Ja,

  • hoeveel records kunt u momenteel proces? Per dag? Per uur?
  • Hoe lang duurt het doorgaans te nemen om het tij voor een baan?
  • Hoe veel meer capaciteit heeft u?

Er is ook aanvullende vragen:

  • Als uw verwerking server (of een van uw servers verwerking) naar beneden gaat hoe zal dit uw mogelijkheden beïnvloeden, wordt u kreupel?
  • Welke voordelen hoop je / verwachten te krijgen van een grid-systeem?
  • Zijn uw kantoor machines die het uitvoeren van de banen?
  • Ben je (of kun je banen worden omgezet) om te werken in deze stijl van draaien?

Het laatste belangrijke punt is om je tijd te nemen over een belangrijke wijziging vinden dit leuk. Update uw verwerking code te werken met behulp van de nieuwe methodologie, benchmark opnieuw. Eventueel instellen van uw verwerking server naar een virtuele machine te laten draaien, na verwerking van al uw server zal gewoon een andere werknemer (slechts een zeer krachtig relatief). Laat het nieuwe proces om zich te vestigen.

Inzet

Mijn suggestie zou zijn om pop in het kantoor een weekend installatie uit te voeren over alle installaties en. Doe dit net voor twee weken vakantie een en laat zo andere arme vent om te gaan met de gevolgen ... misschien ook niet ...

Inzet voor een systeem als dit moet worden traag. Ondanks dat het relatief eenvoudig op te zetten dit systeem zal uw hele kantoor infrastructuur (zowel het digitale) beïnvloeden. Ten eerste, uit te rollen naar een paar machines in een tijd, monitor netwerkverkeer, de wijze waarop de werknemer gastheren uit te voeren op een dag-tot-dag basis. Het kan nodig zijn om uw werk configuratie te veranderen in reactie op uw bevindingen.

Zodra het systeem heeft afgedaan met een paar machines (laten we zeggen 10% van alle kantoormachines, dwz 5) toezicht op het netwerkverkeer en host machine performance. Volgende benchmark weer te houden, je moet nu de verwerking van 33% meer arbeidsplaatsen dan de eerste benchmarks. Controleer dit zo is, of dat je op zijn minst in dit stadion. Zo niet, dan onderzoeken wat er gaande is voordat u verder gaat. Herhaal deze cyclus totdat u graag alle kantoormachines draaien zonder het doden van individuele prestaties van de machine of slijpen uw netwerk tot stilstand.

Te allen tijde te houden benchmarking, zelfs nadat alle implementaties zijn gemaakt. Check hoe de nieuwe code-updates snelheid van uw systeem beïnvloeden, controleer alle werknemers zijn rapportage in en verwerken van orders. Langzaam (heel langzaam) increment uw baan configuratie om het beste uit uw werknemers en netwerk.

Stop!

Wat als u wilt dat uw werknemers niet meer vertoond op enig moment? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

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

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

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

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

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

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

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

Het verlaten van de laptop naar stationair resulteerde in een werknemer begint te banen uit de job control server proces. Bij het voortzetten van het gebruik van laptop was er een vertraging van ongeveer 30-60 seconden, dit is een eerlijke hoeveelheid tijd en het personeel zou moeten bewust worden gemaakt dat hun machine kan onderbreken voor een korte tijd bij terugkeer naar de machine. Nieuwere machines kunnen niet over een pauze van zo lang. Het voordeel van het bedrag van de verwerking uitgevoerd door deze machines tijdens stationair periodes zou meer dat functionarissen met een korte periode te wachten opwegen tegen (bijvoorbeeld 1 minuut) bij aankomst in hun machines van een ochtend (ik vaak langer wachten dat dit voor een Windows Defender update plaatsvinden) op voorwaarde dat zij bewust werden gemaakt van deze (nuttige tijd om een ​​kopje koffie te pakken!).

Algehele Ik ben ervan overtuigd dat ik de technieken die gebruikt kunnen worden om een ​​dergelijk systeem te creëren aangetoond. Ik heb aangetoond dat een dergelijk systeem wel werkt op een (zeer) kleine schaal en met wat meer experimenteren kan worden opgeschaald gebruik maken van de middelen van de machines een kantoor. Als ik niet op het punt om dit te doen zou ik zeer geïnteresseerd om te weten / als iemand anders dat doet zien.

Conclusies / Evaluatie

De volgende logische stap zou zijn om daadwerkelijk krijgen een echte wereld bijvoorbeeld en beginnen met een systeem zoals dit binnen een kantooromgeving te implementeren en te zien wat er gebeurt. Vraagt ​​een bedrijf om dit te plegen, zonder een spoor brandende bedrijf om de technologie te bewijzen en effectiviteit kan een beetje moeilijk. Grid / Distributed computing is zeer populair is in sommige kringen en heeft een aantal grote applicaties (BIONC, SETI @ Home, Folding @ home, etc). Ik heb echter niet vinden van een kleinere schaal en eenvoudig systeem als dit in mijn zoekopdrachten die zou kunnen worden uitgerold binnen een kantooromgeving.

Ik heb een in principe vrij systeem wordt meestal gebruik gemaakt van open source software en tools beschikbaar zijn in bijna elk kantoor. De technologieën zijn in principe gedemonstreerd en show uit te voeren en zoals verwacht werken. Hopelijk heb ik laten zien dat met niet veel werk en met een zeer eenvoudige opzet kunt u een kantoor grid computing systeem dat is krachtig, goedkoop, A en schaalbare allemaal op hetzelfde tijdstip in te zetten.

Zodra een systeem is up and running is er bijna geen einde aan het bedrag van de maatwerk en verbeteringen die u kunt maken. Bijvoorbeeld statistieken / benchmarking kunnen eenvoudig worden toegevoegd waaruit de waarde van een dergelijk systeem elke dag. Nieuwe machines kunnen snel en eenvoudig worden toegevoegd en wanneer ze aankomen met upgrades voor bestaande hardware versterking van uw processing power.

Ik hoop dat je hebt genoten van deze serie artikelen lezen en zijn u gegeven stof tot nadenken over het draaien van een kantoor grid systeem. De oplossing die hier gepresenteerd wordt niet per se te werken in alle situaties, maar moet worden aangepast zodat u uw gegevens te krijgen verwerking gebeurt met behulp van uw eigen oplossing.

Gelieve te voelen vrij om mij eventuele opmerkingen, correcties of verbeteringen en ik zal mijn best doen om dit artikel aan te passen bijgewerkt te houden.

[Disclaimer] kind pid XXXX exit-signaal Segmentation fault (11)

Door Steven Lloyd Watkin , zondag 11 oktober 2009 18:09

If you've recently upgraded PHP or Apache you maybe coming up against the issue of your webserver returning blank pages, and throwing error messages into your logs with no idea why, here's one possible way to fix it…

I've had this problem a couple of times recently after upgrading Apache or PHP on a virtual machine. The first time I noticed the error I simply reverted to a backup of my VM but the second time I realised I'd have to look into the issue.

The first time I noticed the issue some of my web pages were being served as blank files while the others worked absolutely fine. After some investigation I noted that apache was writing out to /var/log/http/error_log with the following message repeatidly:

[notice] child pid XXXX exit signal Segmentation fault (11)

There's not allot to go by on-line, and most of the pages about it trail off to nothing. That said, I narrowed down the issue to PHP crashing when trying to unneeded dynamic libraries.

Looking at my php.ini (/etc/php.ini) I commented out all of the dynamic libraries loaded planning on commenting them back in as required. The two I had to take out where pdo.so and mysql .so .

Once these were removed all my web pages were being served fine, just as before the PHP/Apache update.

Wireless on Acer 5002 WLMi on Linux (Fedora 11)

By Steven Lloyd Watkin , Saturday 11th July 2009 9:48 pm

As I've spent another few hours today without internet access I thought I'd better get this written down so that next time I mess my laptop up the information is easy to fix.

Basically to get wireless drivers working for an Acer 5002 WLMi you'll need to use b43-fwcutter. Instructions can be found here: Linux Wireless B43 .

Easy once the information is located.













Panorama Thema door Themocracy

7 bezoekers nu online
5 guests, 2 bots, 0 members
Max bezoekers vandaag: 17 om 12:28 am UTC
Deze maand: 26 op 07-05-2011 0:35 UTC
Dit jaar: 130 bij 28-03-2011 22:40 UTC
Alle tijd: 130 op 28-03-2011 22:40 UTC