Categorie: Artikelen

Kantoor Grid Computing met behulp van virtuele omgevingen - Deel 1

Door , vrijdag 04 december 2009 23:23

Introductie

Ik werk in een bedrijf waar lopen we een groot aantal batch-taken die worden verwerkt miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets doen voor meerdere uren. Zou het niet goed zijn als we zouden kunnen gebruiken die machines voor de verwerking kracht van onze systemen te versterken? In deze reeks artikelen ga ik kijken naar de potentiële voordelen van het gebruik van een kantoor rooster met behulp van gevirtualiseerde omgevingen.

Als PHP developer ga ik tools die ik gebruik elke dag, namelijk, Linux, gebruik 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 te bieden zal zeer losjes gebaseerd op het type van de verwerking zouden we moeten er echter te bereiken dit kan niet waar zijn door de 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 uit te voeren. De verwerking dat de kantoormachines niet mag bemoeien met de medewerkers met behulp van die machines, zou vergen geen onderhoud aan de machine, en gemakkelijk inzetbaar om nieuwe machines als ze beschikbaar zijn. Ook mag nieuwe virtuele machines vereisen geen extra configuratie, omdat dit sterk de schaalbaarheid en het gemak waarmee de grid systeem kan uitgebreid worden vermindert.

Daarom implementeren een Office-Computing Grid?

Ten eerste denk je misschien, waarom niet gewoon gebruik maken van een cloud computing resources, zoals Amazon's EC2-platform ? Nou, de redenen kunnen zijn meerdere, bijvoorbeeld:

  • Je zal niet toevertrouwen bepaalde gegevens aan een cloud computing-omgeving
  • Je kunt niet stellen bepaalde gegevens in een cloud computing omgeving voor juridische redenen (bijvoorbeeld gegevens het verlaten van het land), mogelijk om juridische redenen, bijvoorbeeld NHS records.
  • U wilt bewaren uw processing units te dicht bij en hebben volledige controle over de hardware
  • U niet beschikt over het project middelen om cloud instances draaien
  • Uw kantoor heeft geen verbinding met het internet en dus haar niet mogelijk om een ​​wolk het gebruik van hulpbronnen
  • Je houdt niet van regen, wolken suggereren regen, dus je blijft uit de buurt

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

Voordelen van een Office-Computing Grid

Nou, laat sommige wiskunde (en in echte fysica stijl kunt maken wat vegen aannames). Stel je hebt grote vlezige verwerking server 100 opdrachten per dag draaien. In uw kantoor heb je 50 machines die zijn inactieve 16 uur per dag, elk van deze machines is 10% zo krachtig als je stevige verwerking verbreken. (Alle resultaten zijn hier afgerond op de prestaties te verhogen onderschatten).

Ja, een machine * 10% vermogen * 2 / 3 keer = 0,067 wil zeggen een desktop verwerking in idle time proces 6 volledige banen per dag.

Als u nu schaal dit tot het duurt 15 idle desktops om zoveel mogelijk banen per dag proces als uw belangrijkste verwerking server doet.

Dus in ons alsof kantoor van 50 machines die wij kunnen verhogen onze processing power van een server tot en met 4 volledige verwerking van servers, of we kunnen de verwerking van 400 arbeidsplaatsen per dag in plaats van 100.

Merk op, want geen investeringen in nieuwe hardware van uw bedrijf heeft zojuist verhoogde zijn batch processing capaciteit 4 keer! Potentieel je gaat om uw stroomverbruik te verhogen, maar de meeste kantooromgevingen Ik ben al naar machines zijn over het algemeen links op 's nachts toch, dus je kon zien dit als een groen initiatief.

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

Technologieën

Wat u nodig hebt? (Of beter gezegd 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 mijn slappe deze servers:)
  • Jobs te lopen
  • Job server (kan een andere virtuele machine ergens)

Typische Jobs

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

  • Systeem ontvangt een lijst met gegevens waarop we nodig hebben om match en terug te keren resultaten
  • Matching houdt in het controleren van / zoeken verschillende (vrij statisch) gegevensbronnen
  • Resultaten van gegevensbronnen kan verdere validatie, samenvoegen, de controle van aanvullende gegevens bronnen in reactie op de resultaten
  • Data 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 sommige aantal het kraken, 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 uitgevoerd in parallel. 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 computer-grids, en deze zijn zeker de moeite waard op zoek naar.

Wat gaan we bereiken?

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

  • Het opzetten van de baan controlesysteem, job configuratie
  • Het creëren van een juiste verwerking ervan virtuele machine
  • Hoe het systeem instellen op een windows machine
  • Zorgen voor je de laatste code en de gegevens met behulp van
  • Implementatie en benchmarking
  • Vooruit te kijken

Ik zal bouwen (ok ik gebouwd, toen schreef), een voorbeeld aanvraag in bij de concepten testen op een lokale machine met Windows XP en mijn 'GridMachine' virtuele machine. Mijn job control server zal mijn grootste machine die draait worden Fedora 11 .

Dit is op geen enkele manier bedoeld om een ​​volledig werkend robuust systeem te tonen, zijn 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. Aarzel niet 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 het werk controlesysteem, en kijk hoe banen moeten worden geconfigureerd om de grootste hoeveelheid van de verwerking te bereiken tegelijkertijd voor te zorgen dat elke opdracht wordt verwerkt zonder mankeren.

Kantoor Grid Computing met behulp van virtuele omgevingen - Deel 2

Door , vrijdag 04 december 2009 23:23

Introductie

Ik werk in een bedrijf waar lopen we een groot aantal batch-taken die worden verwerkt miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets doen voor meerdere uren. Zou het niet goed zijn als we zouden kunnen gebruiken die machines voor de verwerking kracht van onze systemen te versterken? In deze reeks artikelen ga ik kijken naar de potentiële voordelen van het gebruik van een kantoor rooster met behulp van gevirtualiseerde omgevingen.

In deel 1 heb ik een overzicht van het systeem en technologieën zal ik gebruik maken besproken, evenals enkele van de mogelijke redenen waarom je zou willen naar een kantoor netwerk te creëren.

Job Control

Als je gaat worden uitgevoerd banen dan zul je een manier om ze te beheren nodig hebben. Jouw taak besturingssysteem (op uw werk server) moet echt goed worden doordacht voordat zelfs maar te proberen om een ​​kantoor netwerk draaien. Dus in de eerste plaats, wat zijn de taken voor een job control systeem:

  • Hand out banen op verzoek van werknemers
  • Vertel werknemers wat voor soort banen uit te voeren
  • Track jobs
  • Zorg ervoor dat alleen banen worden eenmaal uitgevoerd
  • Bieden job data voor de werknemers, of op zijn minst vertellen waar om het te krijgen

Het systeem moet ook uitbreidbaar, een oplossing die nu werkt in een enkel geval kan worden uitgebreid naar verschillende soorten taken uit te voeren als het bedrijfsleven ziet de waarde in een raster oplossing. Bijvoorbeeld, banen kunnen prioriteiten te winnen, meer dan een soort taak kan bestaan ​​(dat wil zeggen meerdere code bases), uiteindelijk kan je zelfs draaien op verschillende machines werknemer die zijn geoptimaliseerd voor elk type van werk (hoewel dat niet af te stappen van de 'generieke werknemer 'idee). Probeer altijd na te denken over de toekomst bij het ontwikkelen van systemen, kan een korte termijn visie leiden tot een langere termijn frustratie en uitbreiding van de ontwikkelingshulp tijd.

Job Server

We gaan ergens nodig hebben om onze banen controle van, dient dit te worden het enige systeem in uw netwerk, dat een vaste Resource Locator is, zijn dat een IP-adres, hostnaam, URL (met behulp van interne DNS), enz. Dit komt omdat de werknemers moeten weten waar hij moet zoeken naar een baan, werknemers moeten om de klus te controlesysteem (niet de taak besturingssysteem vindt de werknemers) te vinden.

De baan server zelf niet echt een ingewikkelde taak hebben (in een basissysteem ieder geval), moet het een lijst van taken op te slaan, met de hand uit banen, resultaten te ontvangen, en vervolgens op te slaan voor later gebruik. Hoe deze onderdelen (zoals de 'hand out jobs') worden gedefinieerd kunnen erg basic. Later kunnen we het systeem uitbreiden tot een administratie-interface toe te voegen, te bewerken, te verwijderen, te schorsen banen, maar dat wordt niet deze oefening nemen.

Er is geen enkele reden dan dat het je baan server niet kon worden een virtuele machine draaien binnen uw belangrijkste verwerkende server voorwaarde dat het niet te veel middelen afvoer van. De job-server heeft echter nodig een hoge beschikbaarheid, als het gaat neer op een vrijdag avond ga je een heel weekend van de verwerking te verliezen, mogelijk kost je een paar weken ter waarde van de verwerking van de tijd (in vergelijking met uw belangrijkste verwerking server alleen) . Wilt u misschien overwegen om uw werk-server op een load balanced omgeving voor hoge beschikbaarheid.

Basic Setup

De basis set-up voor onze job server zal bestaan ​​uit wat ik bellen naar een van mijn slappe servers (dat is Li nux, m ySql, P HP). De code draait op thea werknemers ook daadwerkelijk uit te werken welke taken het kan draaien door interactie met de job besturingssysteem databases. Later konden we creëren een web service en eigenlijk uitdelen banen in plaats van de arbeiders doen het harde werk zelf, maar voor nu zullen we blijven maken van de KISS-principe (Keep It Simple, Stupid!).

Dus, laat creëren drie mySQL tafels om te gaan met banen. Deze worden `baan`, `jobRecords` en `jobResults`.

Jobs tafel Hier ben ik met behulp van SQL Buddy een grote kleine alternatief voor phpMyAdmin , alleen maar omdat het makkelijker te installeren op CentOS (voor anderen te zien: 10 Great alternatieven voor phpMyAdmin )

Deze tabel bestaat uit 5 eenvoudige velden,

  • id: een unieke identificatie van de baan
  • naam: Kan een klant referentie, of een aantal andere identificatiegegevens worden
  • Status: Je moet weten waar de baan is, bv
    • 0: Niet gestart
    • 1: opgepikt
    • 2: Voltooid
  • started_by: Wie is er begonnen met het doen van de baan? Dit is niet helemaal nodig, maar is een mooie aanvulling zijn. Ik stel voor het bijhouden van werknemers door hun IP-adres op je netwerk
  • started_at: Wanneer heeft de werknemer start van de baan? Door het bijhouden van taken die nog niet zijn afgerond binnen X tijd weten we dat we nodig hebben op te halen de baan opnieuw te beginnen en de verwerking door een andere werknemer. Werknemers zouden stoppen met het verwerken / offline gaan voor een aantal redenen, stroomuitval, crash, netwerk verlies, etc.

Het is gemakkelijk hoe deze tafel zou kunnen worden uitgebreid met een paar extra velden om te zorgen voor de statistieken tracking, een eindtijd kolom om te zien hoe lang de baan nam, een teller om te zien hoeveel werknemers pakte de baan (uiteraard moet dit hebben de neiging om 1), job prioriteit, kan de lijst gaan en op. In meer complexe klus scenario's zou het mogelijk zijn om aan te geven hoeveel geheugen de werknemer zou de toegang tot (en dus gebruik alleen geschikte werknemers), of zelfs wat voor soort werknemer nodig zou zijn nodig.

Laten we nog een paar voorbeeld vacatures:

voorbeeld jobs

De volgende tabel weer is vrij eenvoudig te begrijpen, dit zijn onze job records. Ze zijn gekoppeld aan de belangrijkste taken tafel door een kolom `jobs_id`. De make-up van deze tabel is sterk afhankelijk van de gegevens die je nodig hebt om te leveren aan uw medewerkers, laat een zeer simpel voorbeeld, waar we vier kolommen:

  • id: ID van het record
  • Naam: Persoon naam
  • adres: Persoon adres van
  • jobs_id: De functie ID dat dit record is gekoppeld aan

De derde en laatste tabel bestaat uit een tabel met resultaten, het heeft ongeveer dezelfde make-up als onze administratie tafel, en met de toevoeging van een aantal kolommen kan deel uitmaken van de records tabel:

  • job_record_id: Link het resultaat aan de job tafel
  • resultaat: Het resultaat gegevens

... En dat is alles wat je nodig hebt voor het scheppen van controle! (Zij het op een zeer elementair niveau) In mijn geval ben ik wees naar een andere tafel waar mijn gegevens te verwerken was gevestigd, maar dit kan net zo goed een bestand, parameters om simulatie code uit te voeren, noem maar op.

Het selecteren van een job

Zoals eerder vermeld, de arbeiders zullen ons werk het beheer doen voor ons nu, dus alles wat we nodig hebben om echt te doen is het vinden van een baan dat verwerking nodig heeft en krijgt de informatie. Hoe zouden we dit doen? Nou pick onze job selectiecriteria en op zoek naar banen, in SQL ik het volgende gedaan:

  1. Neem een ​​willekeurige opdrachten die niet zijn gemarkeerd als compleet, maar van onze werknemer en opnieuw instellen (vervang __ME__ met een identifier, gemakkelijkste zou IP-adres):
      UPDATE `banen` SET `de status van` = 0 WHERE `de status van` = 1 EN `started_by` = __ME__; 
  2. Met behulp van onze job selectiecriteria, selecteert u een baan en vertellen het controlesysteem dat deze werknemer zich bezig met het:
      UPDATE `banen` SET `de status van` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `de status van` = 0 of
     (`De status van` = 1 EN `started_at`> DATE_SUB (NOW (), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    Door grijpen taken die niet tot resultaten hebben geleid teruggekeerd in X hoeveelheid tijd zorgen we ervoor dat alle opdrachten worden uitgevoerd in het geval van een werknemer crashen of gaan AWOL.

  3. Naast grijp de banen details, gevolgd door de documenten zelf:
      SELECT * FROM `banen` WHERE `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 taken kunnen suspend / resume te allen tijde zorgen voor een aantal robuustheid in uw script. Het kan zijn dat de taak half weg opschort door het updaten 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 beslissing is.

Daarnaast, terwijl dit laat zien hoe taken kunnen worden geselecteerd en beheerd vanuit een SQL-query frame dat u moet echt worden abstraheren je baan controle, zodat als je besluit over te stappen naar het gebruik van een web service, een file based systeem, XML , of enige andere aantal systemen zal het geen invloed op de code boven.

Job Configuratie

Het volgende aspect dat aandacht verdient is het werk grootte en de configuratie. Door te spelen met werk configuratie kunnen we slaan een uitstekende balans tussen snelheid, proces-replicatie, en betrouwbaarheid. Neem een ​​paar ofa scenario's:

  1. Jobs neemt een dag per uit te voeren: dit betekent dat uw werknemers moeten 15 dagen om elke taak te verwerken (denk aan 10% van het vermogen voor 2/3e van de tijd). Dit is niet duidelijk een wijs configuratie, je werk maat is veel te groot! Het zou op zijn minst het dubbele van de tijd verwerkte een baan te krijgen moet de eerste werknemer gaan AWOL (tijd op te halen dat het niet een plus opwerking tijd terug). In een ideale zou je op zijn minst een volledige baan gemakkelijk goedgekeurd door het einde van elke lange periode van inactiviteit, op die manier je de banen draaiende en in het ergste geval een baan te behouden zou twee dagen duren proces moet de eerste gaan ontbreekt.
  2. Jobs neemt een minuut te lopen: Dit betekent dat uw werknemers ongeveer 15 minuten te nemen om elke taak uit te voeren. Hoewel dit aanvankelijk ideaal lijkt, moet u extra werkzaamheden verwerken krijgen tijdens de lunch, koffiepauzes, vergaderingen, enz. dit scenario zet druk op andere gebieden van uw systeem en introduceert zijn eigen problemen. Bijvoorbeeld eerst je setup / verwerkingstijd verhouding gaat recht naar beneden te gaan, dus het verliezen van het systeem efficiëntie. Uw netwerk zal worden voortdurend streaming taak informatie aan de verschillende werknemers frustrerend medewerkers die dong hun dagelijkse werk. Je bent ook gaan om meer druk op je werk de verwerking van de server als het moet schotel uit heel veel kleine stukjes van het werk op een regelmatige basis. Ten slotte is in deze situatie als de taak server down gaat ga je een enorme achterstand van het onvoltooide werk dat de grotere banen te creëren kon de aanhoudende verwerking zalig niet van bewust dat de klus server problemen ervaren.

In werkelijkheid zal er geen een ideale configuratie voor uw netwerk setup, veel hangt af van de beschikbare middelen, soorten werk, job doorlooptijd vereisten, netwerk mogelijkheden, en zo verder. Maar een aantal richtlijnen zou zijn:

  • Grootte opdrachten zo, dat elke werknemer kan krijgen door minimaal 3-4 banen in een periode van 15 uur (de langste waarschijnlijk idle time periode)
  • Speel met de opdracht grootte zodat setup-tijd wordt relatief onbelangrijk vergeleken met de verwerkingstijd (rekening houdend met het vorige punt).
  • Als een opdracht niet volledig in het dubbele van de hoeveelheid tijd (misschien minder) je verwachten dat het voltooien ervan uitgaan dat haar verdwenen AWOL en begint de verwerking van het met een andere werknemer. Dit betekent dat u moet wachten tot drie keer de normale lengte van een baan voor het in te vullen (eventueel langer indien de latere job mislukt). U kunt deze tijd te verminderen, maar wees voorzichtig niet te verminderen te veel als je kan beginnen dupliceren de verwerking van taken op een regelmatige basis te zijn.
  • Jobs moet onafhankelijk zijn van externe eisen zo veel mogelijk. De baan server, bijvoorbeeld, mogen alleen worden gecontacteerd aan het begin en einde van elke baan.
  • Niet verzadigen uw netwerk, dit zal twee negatieve gevolgen zal hebben, zal je overdag personeel te vinden met behulp van het netwerk frustrerend en problemen kunnen worden ervaren met aansluitingen time-out een probleem dat alleen maar erger wordt als je schaal van je raster.
  • Zorg ervoor dat taken kunnen uitvoeren op uw werknemers. Als taken worden te geheugen intensieve of schijfruimte intensieve taken start 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 baan

Bij het indienen van de resultaten van een baan is het belangrijk om te controleren of geen resultaten zijn ingediend door een andere werknemer, zeker als de huidige werknemer slapende al enige tijd.

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

Zoals gezegd eerder, en kan niet genoeg worden benadrukt, bouwen fout-tolerantie in de printopdrachten en resultaten onderwerping. De werknemers kunnen (en waarschijnlijk zullen) gaan in de stand-bymodus op de meest ongelegen tijden en dit moet worden gehouden. Ook weer weg te abstraheren uw resultaten inzending zal helpen het oog op toekomstige wijzigingen in uw job control systeem veel eenvoudiger te behandelen.

Overzicht

In deze section hebben we gekeken naar wat een baan control server moet doen en hoe je een zeer fundamentele systeem opgezet. We hebben besproken hoe een baan van het besturingssysteem en de beste manier om banen te configureren om het behouden van uw kantoor grid-systeem te krijgen op te halen. Om af te sluiten, was een paragraaf of twee aan overleggen van de resultaten terug naar de job control server gepresenteerd.

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

Volgende keer

In deel 3 gaan we creëren onze virtuele machine en het opzetten van onze Windows-machines te worden idle-time werknemers.

Kantoor Grid Computing met behulp van virtuele omgevingen - Deel 5

Door , vrijdag 04 december 2009 23:03

Introductie

Ik werk in een bedrijf waar lopen we een groot aantal batch-taken die worden verwerkt miljoenen records van de gegevens elke dag en ik heb onlangs na te denken over alle machines die zitten elke dag niets doen voor meerdere uren. Zou het niet goed zijn als we zouden kunnen gebruiken die machines voor de verwerking kracht van onze systemen te versterken? In deze reeks artikelen ga ik kijken naar de potentiële voordelen van het gebruik van een kantoor rooster met behulp van gevirtualiseerde omgevingen.

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

Pre-implementatie

Voor de implementatie van uw netwerk het systeem als er een ding dat je doet en een ding alleen al de benchmark uw huidige systeem! Het maakt niet uit wat je collega's over hoeveel extra werk je systeem gaat doen vertellen, tenzij je nummers van deze back-up van uw garanties zijn niets. Dus,

  • hoeveel records kunt u op dit moment proces? Per dag? Per uur?
  • Hoe lang duurt het normaal gesproken te nemen om te draaien een baan?
  • Hoeveel meer capaciteit hebt u?

Er is ook bijkomende vragen:

  • Als je de verwerking van server (of een van uw verwerking servers) naar beneden gaat hoe zal dit invloed hebben op uw mogelijkheden, wordt u kreupel?
  • Welke voordelen hoop je / verwacht te krijgen van een grid-systeem?
  • Zijn uw kantoor machines die het uitvoeren van de jobs?
  • Zijn uw (of kan u van baan omgezet worden) om te werken in deze stijl van draaien?

Het laatste belangrijke punt is om je tijd te nemen op elke belangrijke verandering als deze. Update uw verwerking van code aan het werk met behulp van de nieuwe methodologie, benchmark opnieuw. Mogelijk set-up van uw verwerking van server naar een virtuele machine te laten draaien, na al uw verwerking server zal gewoon een andere werknemer (alleen een zeer krachtige een relatief). Laat het nieuwe proces om zich te vestigen.

Deployment

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

Implementatie van een systeem als dit moet worden traag. Ondanks dat het relatief eenvoudig op te zetten dit systeem zal invloed hebben op uw hele kantoor infrastructuur (zowel de digitale een). Ten eerste, uit te rollen naar een paar machines in een tijd, monitor netwerkverkeer, hoe de werknemer gastheren uit te voeren op een dag-tot-dag basis. Het kan nodig zijn om uw werk te kunnen veranderen in reactie op uw bevindingen.

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

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

Stop!

Wat als u wilt dat uw werknemers stoppen met draaien op enig moment? Ze zijn er allemaal lopen, regenereren, en proberen hun best om gegevens als hongerige insecten proces. Het antwoord lijkt misschien vanzelfsprekend, maar zijn waarde toe te voegen voor het geval haar over het hoofd gezien. Gewoon bewerken van uw verwerking script met een exit (0) or die () of een andere verklaring aan uw verwerking van job te doden. Een belangrijke reden waarom we altijd proberen om te updaten naar de laatste verwerking script voordat er een run!

Demonstratie System

Om deze set van korte artikelen te schrijven heb ik een heel klein rooster aan de technologieën en methodologieën aan te tonen. Ik lees veel artikelen, tutorials, en gebruikt verschillende tools te installeren en wat er gaande was op de monitor. In geen geval ben ik uitgegaan en verzadigde een heel kantoor met verkeer en noch heb ik toegang had tot een vaste medewerkers pc om te zien hoe gastheer optreden was beïnvloed.

Mijn demonstratie systeem was zeer bescheiden inderdaad. Ik gebruikte mijn reguliere desktop opgezet als een job control server. Op deze had ik geinstalleerd mySQL server geïnstalleerd is opgezet als een meester in replicatie, PHP , Â en SVN met elkaar verbonden door apache (voor toegang via werknemer VM).

Vervolgens heb ik gemaakt een CentOS werknemer machine op VirtualBox op een zes jaar oude Windows XP laptop. Ik setup geplande taken als opgegeven na het kopiëren van de VM op de machine en laat het gaan.

De virtuele machine was opgezet met PHP, subversie, en mySQL. Ik controleerde op een tak met de naam "werknemer" vanuit mijn job control servers repository en zorgde ervoor dat het kan worden bijgewerkt met behulp van "svn update '. Vervolgens heb ik setup MySQL als een slaaf en gecontroleerd of de gegevens was replicatie van MySQL op de job control server down aan de werknemer VM. Na dit alles ik het instellen van de bash script en de cron job.

Mijn verwerking script eigenlijk ging langs de lijnen van deze (zeer eenvoudige dingen):

  • Lees in het naamveld
  • Geteld is het aantal vergelijkbare namen in een tabel van de gegevensbron gehouden op de VM
  • Geteld is het aantal namen als hierboven, maar het splitsen van de naam door spaties (bijv. voornaam, midden, achternaam)
  • Herhaalde dit proces 1000 keer

Elke baan duurde ongeveer 20 minuten te lopen. Op een punt dat ik meerdere exemplaren van de werknemer VM geopend op de ramen laptop en keek toe hoe de banen worden afgevinkt door elk van de werknemer IP-adressen. Op dit punt heb ik ook bevestigd dat de replicatie automatisch opnieuw opgestart.

Het verlaten van de laptop naar stationair resulteerde in een werknemer begint om banen proces vanaf de job control server. Bij het voortzetten van het gebruik van laptop was er een vertraging van ongeveer 30-60 seconden, is dit een redelijke hoeveelheid tijd en personeel zou moeten bewust worden gemaakt dat hun machine kan pauzeren voor een korte tijd bij terugkeer naar de machine. Nieuwere machines kunnen niet een pauze van deze lange. Het voordeel van de hoeveelheid van de verwerking door deze machines tijdens inactieve perioden zou meer dan opwegen tegen medewerkers met een korte periode (bijvoorbeeld 1 minuut) wachten op de aankomst op de machines van een ochtend (ik vaak langer wachten dat dit voor een Windows Defender update plaats te vinden), op voorwaarde dat zij waren op de hoogte van deze (nuttige tijd om een ​​kopje koffie te pakken!).

Overall ik ben ervan overtuigd dat ik de technieken die kunnen worden gebruikt om een ​​dergelijk systeem te creëren gedemonstreerd. Ik heb laten zien dat een dergelijk systeem werken aan een (zeer) kleine schaal en met wat meer experimenteren kan worden opgeschaald gebruik maken van de middelen van de machines een kantoor doet. Als ik niet naar de punt van om dit te doen zou ik erg geïnteresseerd om te weten / zien wanneer iemand anders dat doet.

Conclusies / Evaluatie

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

Ik heb een in principe vrij systeem met behulp van vooral open source software en tools beschikbaar zijn in vrijwel elk kantoor. De technologieën zijn in principe gedemonstreerd en tonen om te presteren en te werken zoals verwacht. Hopelijk heb ik laten zien dat met niet veel werk en met een zeer eenvoudige setup kun je een kantoor grid computing systeem dat is krachtig, goedkoop, Â en schaalbare allemaal op hetzelfde moment in te zetten.

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

Ik hoop dat je hebt genoten van het lezen van deze serie artikelen en zijn gegeven aan het denken over het draaien van een kantoor raster-systeem. De oplossing hier gepresenteerde zal niet noodzakelijk werken in alle situaties, maar dient te worden aangepast aan laten u toe om uw gegevens te verwerken gedaan met behulp van uw eigen oplossing.

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

Zend Framework: Fundamentals - Review

Door , zaterdag 28 november 2009 22:42

Mijn werkgever onlangs betaald voor een groep van ons ontwikkelaars in staat om het te nemen Zend Framework: Fundamentals cursus, hier zal ik mijn gedachten en meningen samen te vatten op de cursus voor anderen. Voor wie op zoek is om tijd te besparen, hier is mijn samenvatting:

Voor ontwikkelaars die hebben niet de tijd gehad om te kijken naar het Zend Framework deze cursus (Zend Framework: Fundamentals) biedt een goed beeld van het kader tot invoering van u naar de belangrijkste gebieden en het geven van voldoende informatie om verder te gaan. Voor degenen die tijd doorgebracht te kijken naar het kader en gevolgd hebben een of twee tutorials deze cursus biedt niet veel verder.

Achtergrond

Ik heb een PHP- ontwikkelaar voor ongeveer 5-6 jaar, en zijn begonnen te werken met het Zend Framework op een component basis over de laatste 6 maanden. Ik heb ontwikkeld en / of is een ontwikkelaar op een paar kleine Zend Framework MVC- sites. Ik zal eerlijk zijn, ik heb niet had een enorme hoeveelheid blootstelling aan andere kaders uit een codering oogpunt, maar hebben gedurende een aantal uur het onderzoeken van het project websites en evalueren them. Het kader en de omringende gemeenschap Zend Framework is het heel spannend en lijken er enorme mogelijkheden in waar zijn gaan.

Over de cursus

De cursus wordt geleverd over 9 twee uur WebEx sessies (met een 10-minuten pauze in het midden). De tijd wordt besteed gaat door een reeks dia's door Zend met discussie op elk moment. U kunt gebruik maken van een microfoon om te praten met de instructeur, maar om eerlijk te zijn ik zag niemand gebruik van iets meer dan het chatvenster. Naast een VMWare Ubuntu machine is op voorwaarde dat heeft bijvoorbeeld code en projecten het opzetten van een een trial versie van Zend Studio. De cursus leider praat met de deelnemers, hetzij via een geïntegreerde VoIP-oplossing, of u kunt bellen in het gebruik van een van de vele wereldwijde inbelnummers.

Tijdens de cursus het materiaal bestaat uit een kort overzicht van het kader en de MVC patroon voordat je in een monster gastenboek applicatie. De discussie toonde bootstrapping, Zend_Application, Db Tafels, database toegang, Forms, Filtering, ACL, valideren, etc, etc. In principe over alle onderwerpen je zou nodig heeft om een ​​basis site up een lopen de hele tijd te krijgen waardoor u de tools om gaan en meer gevorderd in het kader (hoewel dit bedrag deed om 'Zie de website' een groot deel van de tijd).

De tijd wordt gegeven om code op een aantal voorbeelden, en om de 'gastenboek' en eenvoudige 'wiki' applicatie te ontwikkelen. Persoonlijk heb ik het gevoel dat het verstrekken van de code of elke applicatie en dan vragen ons te ontwikkelen wat in wezen een kopie naast niet echt een goede leerervaring. Ik had liever een applicatie soortgelijke ontwikkelen, maar niet identiek. naar het voorbeeld applicatie met het voordeel van het hebben van een gids om te verwijzen naar. U kunt ook het bouwen van de applicaties van de grond af met de demonstrator zou van mogelijk heeft geleid tot meer vragen over hoe en waarom, waardoor een beter begrip van het kader, na alles wat je kunt opzoeken specifieke na de cursus.

De laatste lezing bestond uit het werken aan de wiki applicatie met de hulp / begeleiding van de instructeur. Na de cursus feedback werd genomen, werd hij meerdere malen benadrukt door middel van de cursus die Zend neemt feedback zeer serieus, in feite blijkbaar onze versie van de cursus was vrij nieuw. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Overzicht

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.

Html Table Generating Class (HtmlTable.php)

By , Tuesday 5th May 2009 9:11 pm

I required to generate a HTML table from PHP data for a project that I was working on. Unfortunately after a bit of Googling I couldn't really find anything that was suitable so I decided to create my own.

I realise that this may not be the best table generating class ever and there's probably a few bugs still in it, but I'd prefer to share and if anyone wants a better version I'll look into it :) I originally wanted to create a table built up of seperate objects eg cell object, row object (built up of cell objects), but I realised the overhead on this would be HUGE! So I've gone back to an array setup.

The class will calculate the maximum number of columns used in the header, footer, or body and write out that number of columns. Headers, Footers, and the Caption are optional. Attributes are made up of an array where the key is the attribute name and the value is the attribute value. Attributes are applied to table tag (on table creation – class initialisation), table rows (array[row][attribute]), and table cells (array[row][column][attribute]) this applies for headers, footers, and the table body.

Voorbeeld

I always find the best way to look at something is to use an example so here we go:

$table = new HtmlTable( array('class' =>'sortable',
                'style' => 'width: 550px;'));
$header[0][0]['content'] = 'ID';
$header[0][1]['content'] = 'Title';
$header[0][2]['content'] = 'Date';
$header[0][3]['content'] = 'Site';

$table->addHeader($header);
 $ I = 0;
foreach ($newsList AS $newsItem) {
$itemLink = "{$newsItem['title']}";
$tableBody[$i] = array(0 => array('content' => $newsItem['id'],
'attributes' => array('style' => 'font-weight: bold;')),
1 => array('content' => $itemLink),
2 => array('content' => $newsItem['date_posted']),
3 => array('content' => $newsItem['site']) );
 $ I + +;
 }
$table->addBody($tableBody);
echo $table->drawTable();
ID Titel Datum Plaats
9 Nieuws 1 2009-04-04 10:40:00 naam van de site
10 Nieuws 2 2009-04-04 12:44:11 naam van de site

And the HTML looks like this:

 < table  class =  "sortable" style =  "width: 550px;" >
< thead >
	< tr    >
		< th   >ID</ th > 
 < th   >Title</ th >
		< th   >Date</ th >
		< th   >Site</ th >
</ tr >
</ thead >
< tbody >
	< tr    >
		< td  style =  "font-weight: bold;" >9</ td > 
		< td   >News 1</ td > < td   >2009-04-04 10:40:00</ td > < td   >site name</ td > </ tr > < tr   > < td style = "font-weight: bold;" >10</ td > < td   >News 2</ td > 
 < td   >2009-04-04 12:40:00</ td >
		< td   >site name</ td >
</ tr > 
 </ tbody >
</ table > 

Code

HtmlTable.php
If you have any comments please make them below, it would be great to hear some. If you end up using it also let me know and I'll extend it in the future :)

Log to DB using Zend Framework

By , Tuesday 14th April 2009 9:06 pm

I've managed to get a site up and running with the Zend Framework , everything is logging nicely to FireBug/FirePHP so next step was to log to the DB. I also wanted to log some additional information using the framework such as user agent, date and time, get and post variables. So to extend the manual a little here's what I did:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

$columnMapping = array( 'priority' => 'priority',
'message' => 'message',
'datetime' => 'timestamp',
'user_agent'=> 'user_agent',
'get_vars' => 'get_vars',
'post_vars' => 'post_vars',
'site' => 'site'
);

$writerDb = new Zend_Log_Writer_Db($db, 'error_logging', $columnMapping);
$logger = new Zend_Log($writerDb);

$logger->setEventItem('datetime',date('Ymd H:i:s'));
$logger->setEventItem('user_agent',$_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars',print_r($_GET,true));
$logger->setEventItem('post_vars',print_r($_POST,true));
$logger->setEventItem('site',SITE);

$logger->info('Informational message');

Where the array keys in $columnMapping are my column names. 'Priority' and 'message' are understood by Zend_Log_Writers but the additional fields were added to give me some additional information.

Obviously this assumes that you have logging working using one of the other writers first :)

UK Names Directory and Facebook Application

By , Friday 10th April 2009 9:33 am

One of the fun things I've been involved in whilst working for Tracesmart is the names directory . Basically we took our huge information database and pulled out a big pile of stats about various names.

The process is all one big SEO effort in order to draw more traffic to the site, but it also provides some interesting information and name statistics.

Here's an example for my name Lloyd Watkin , or I suppose more correctly Steven Watkin . Take a minute to look up your name on the Tracesmart site, might be interesting ;)

We've also got names statistics data on the names directory page which tells you what names have been searched and how recently. Its quite interesting to see famous people's names fly up the stats when they appear in the news. A recent example is that of Liam Neeson who's wife died from a skiing accident recently, although obviously people aren't quite right on the spelling (hence the huge numbers of hits on this name) — Liam Nilson .

Facebook Application

Once the names directory was created we set about creating a facebook application which we duely named ' My Name '. The facebook application is an extension of the names directory and provides some additional statistics. In order to add the names directory to your facebook account please visit:

http://apps.facebook.com/my-name/

Disabled Form Fields are not submitted…

By , Thursday 4th September 2008 11:01 am

As a quick note, as part of the ongoing estate agency software project I've gone back to editing date entry within the system. Now instead of allowing users to enter any old bit of text I've switched over to a Javascript date/time picker (for the short term) that allows user to 'pick' and date and time from a pop up window.

Now, for my old system the picker would pop up when the user clicked on the input field . This however would allow the user to ignore the text field and still go and type any old thing into the field. This wasn't ideal. So my solution was to ' disable ' the form field and put a span next to it with an onclick event calling the date/time picker. This meant that the user was almost forced into using the nice date/time picker so dates would go in with the correct format (although that still has to be validated!).

So I started passing my nicely formatted date-time(s) through the form and picking trying to pick them up with PHP 's $_GET or $_POST variables. Unfortunately'disabled' fields are not passed through form submissions This was very annoying. The solution was to enable the input element using javascript when the form was submitted using the onsubmit event.

This meant that the form data was passed through as required and was nicely formatted ready for validation…Â

Search Array Keys and Return Matches

By , Wednesday 13th August 2008 4:26 pm

I've had the need to search through an array and return the elements that have keys that match a search term. So I thought I'd share.

'W hy would I need this?' would probably be the first question you'd ask, well if I wanted to search through an array for all the elements that related to the dimensions of an item then I could pull out the appropriate keys by using this little function:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

So for example if I wanted to search an array of item data for the dimension data then I could do the following (and print to screen presumably):

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

Which would return something like:

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

Custom php.ini with Plesk

By , Wednesday 13th August 2008 3:53 pm

We have a dedicated server with ukFast  on which we run a number of domains that exist on virtual servers running under Plesk . Anyway, on most of my domains I want to hide away warnings and for security keep errors to the log files, however on some of my domains (such as those I'm developing on) I want to show every little nasty warning and error that appears.

If I edit my PHP .INI”>php.ini this affects each and every domain on the server, not a good idea especially when several of the sites are fully live versions  So in order to get around this you need to put a file called vhosts.conf in your conf directory, for example, /var/www/vhosts/<my_domain>/conf/vhost.conf .

Once you've added your additional code, again for example I included,

 php_value error_reporting E_ALL php_value display_errors On 

followed by running the following command (this reconfigures all of your domains its just sneller lazier than typing in the domain name ,

 # /usr/local/psa/admin/bin/websrvmng -a 

If you're feeling a bit nimble then you can always type out the full version which is,

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

After this command if you look to httpd.include file, will see that your httpd.include will have an include line for your vhost.conf, something like this:

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












Panorama Thema door Themocracy

7 bezoekers nu online
3 gasten, 4 bots, 0 leden
Max bezoekers vandaag: 17 om 06:54 UTC
Deze maand: 17 op 18-08-2011 06:54 GMT
Dit jaar: 130 op 28-03-2011 22:40 GMT
All time: 130 op 28-03-2011 22:40 GMT