Introductie
Ik werk in een bedrijf waar we lopen veel batch jobs verwerken van 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 konden gebruiken deze machines om de rekenkracht van onze systemen te versterken? In deze reeks artikelen zal ik kijken naar de mogelijke voordelen van de tewerkstelling van een kantoor raster met behulp van gevirtualiseerde omgevingen.
In deel 1 heb ik een overzicht van het systeem en technologieën zal ik gebruik maken en gesproken over een aantal van de mogelijke redenen waarom je zou willen om 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. Het is jouw taak besturingssysteem (op je werk server) moet echt goed worden doordacht voordat zelfs maar te proberen om een kantoor raster uit te voeren. Dus in de eerste plaats, wat zijn de taken voor een job control systeem:
- Uitdelen banen op verzoek van werknemers
- Vertel werknemers wat voor soort banen te lopen
- Track jobs
- Zorg ervoor dat alleen banen worden eenmaal uitgevoerd
- Zorg voor 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 van het werk als het bedrijf te runnen ziet de waarde in een raster oplossing. Bijvoorbeeld, banen kunnen prioriteiten te winnen, meer dan een baan type kan bestaan (dat wil zeggen meerdere code bases), uiteindelijk je kan zelfs draaien op verschillende machines werknemer die zijn geoptimaliseerd voor elk type baan (hoewel dat niet af te stappen van de 'generieke werknemer 'idee). Probeer altijd om na te denken over de toekomst bij het ontwikkelen van systemen, kan een korte termijn visie leiden tot langere termijn frustratie en meer ontwikkelingstijd.
Job Server
We gaan ergens nodig hebben om onze banen te bedienen vanaf, moet dit het enige systeem in uw netwerk, dat een vaste Resource Locator heeft, zijn dat een IP-adres, de hostnaam, de URL (met behulp van interne DNS), enz. Dit komt omdat de werknemers moeten weten waar je moet zoeken naar banen, werknemers moeten om de klus te controlesysteem (niet de taak besturingssysteem vinden van de werknemers) te vinden.
De job server zelf niet echt een ingewikkelde taak hebben (in een basis systeem hoe dan ook), moet het een lijst van taken op te slaan, met de hand uit banen, de resultaten te ontvangen en ze vervolgens op te slaan voor later gebruik. Hoe deze onderdelen (zoals 'hand uit banen') worden gedefinieerd kan zeer basic. Later kunnen we het systeem uitbreiden tot een administratie-interface toe te voegen, bewerken, verwijderen, op te schorten banen, maar dit is buiten deze oefening op te nemen.
Er is geen enkele reden dan is dat uw werk-server niet kon worden van een virtuele machine draaien binnen uw hoofdzone voor de verwerking server die het niet te veel middelen uitlekken van. De job server Wel dient er een hoge beschikbaarheid, als hij onderuit gaat op een vrijdag avond ga je een heel weekend van de verwerking te verliezen, mogelijk kost je een paar weken ter waarde van verwerkingstijd (in vergelijking met uw belangrijkste verwerking server alleen) . Misschien wilt u overwegen om uw werk-server op een load balanced omgeving voor hoge beschikbaarheid.
Basic Setup
De basis set-up voor ons werk server zal bestaan uit wat ik bellen naar een van mijn slappe servers (dat is Li nux, m ySql, P HP). De code die op thee werknemers ook daadwerkelijk uit te werken welke taken het kan draaien door interactie met met job besturingssysteem databases. Later konden we 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 het KISS principe (Keep It Simple, Stupid!).
Dus, laat u drie mySQL tabellen om te gaan met banen. Dit zijn `werk`, `jobRecords`, en `jobResults`.
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
- Status: Je moet weten waar de baan is, bijvoorbeeld
- 0: Niet gestart
- 1: Opgehaald
- 2: Voltooid
- started_by: Wie is 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 de baan? Door het volgen van banen die nog niet zijn afgerond binnen X tijd weten we dat we nodig hebben op te halen de baan weer en de verwerking te beginnen door een andere werknemer. Werknemers zouden stoppen met het verwerken / offline gaan voor een aantal redenen, stroomuitval, crash, netwerk verlies, enz.
Het is gemakkelijk is de manier waarop deze tabel kan worden uitgebreid met een paar extra velden toe te staan voor statistieken bijhouden, een eindtijd kolom te zien hoe lang het werk heeft, een teller om te zien hoeveel werknemers pakte de baan (uiteraard dit moet de neiging om 1), job prioriteit, kan de lijst doorgaan. In meer complexe klus scenario's zou het mogelijk zijn om aan te geven hoeveel geheugen de werknemer zou toegang nodig te hebben (en dus gebruik alleen geschikte werknemers), of zelfs wat voor soort werknemer nodig zou zijn.
Laten we nog een paar voorbeeld vacatures:
De volgende tabel weer is vrij eenvoudig te begrijpen, dat 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 u nodig heeft om te leveren aan uw medewerkers, laat een heel eenvoudig voorbeeld, waar we vier kolommen:
- id: ID van het record
- naam: naam van de persoon
- adres: Persoon adres van
- jobs_id: De functie ID dat dit record is gekoppeld aan
De derde en laatste tafel bestaat uit een tabel met resultaten, het heeft ongeveer dezelfde make-up als onze gegevens tafel, en met de toevoeging van een aantal kolommen zou kunnen zijn een deel van de records tabel:
- job_record_id: Koppel het resultaat aan het werk tafel
- resultaat: Het resultaat data
... En dat is alles wat je nodig hebt voor het scheppen van controle! (Zij het op een zeer basaal niveau) In mijn geval ben ik wees naar een andere tafel waar mijn gegevens te verwerken was gevestigd, maar dit kan net zo goed geweest een bestand, parameters om simulatie-code uit te voeren, noem maar op.
Het selecteren van een job
Zoals eerder vermeld, de arbeiders zal het onze taak het beheer voor ons doen voor nu, dus alles wat we nodig hebben om echt te doen is het vinden van een baan dat de verwerking nodig heeft en krijgt de informatie. Hoe zouden we dat doen? Nou halen onze taak selectiecriteria en zoek naar banen, in SQL heb ik het volgende:
- Neem een willekeurige opdrachten die niet zijn gemarkeerd als compleet, maar van onze werknemers en stel ze opnieuw (vervang __ ME__ met een identifier, gemakkelijkste zou IP-adres):
UPDATE `werk` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ ME__;
- Met behulp van onze job selectiecriteria, selecteert u een opdracht en vertel het besturingssysteem dat deze werknemer te maken heeft met het:
UPDATE `werk` SET `status` = 1, `started_by` = __ ME__, `started_at` = NOW () WHERE `status` = 0 of
(`Status` = 1 AND `started_at`> DATE_SUB (NU (), INTERVAL x uur)) ORDER BY `id` ASC;
Door grijpen taken die niet tot resultaten hebben geleid terug in X hoeveelheid tijd zorgen we ervoor dat alle taken worden uitgevoerd in het geval van een werknemer crashen of gaan AWOL.
- Vervolgens pak je de banen gegevens, gevolgd door de documenten zelf:
SELECT * FROM `vacatures` 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. Vergeet niet als opdrachten kunnen suspend / resume te allen tijde zorgen voor een aantal robuustheid in het script. Het kan zijn dat de taak halverwege onderbreekt door het vernieuwen van de job controle systeem, dus het controleren van het aantal records in een baan en het aantal resultaten terug opgeslagen in het werk controlesysteem zou het een verstandige zet te zijn.
Daarnaast, terwijl dit toont aan 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 schakelen naar het gebruik van een web service, een bestand gebaseerd systeem, XML , of enige andere aantal systemen is geen invloed op de code erboven.
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:
- Jobs neemt een dag per uit te voeren: Dit betekent dat uw werknemers 15 dagen nodig hebt 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 baan grootte is veel te groot! Het zou op zijn minst het dubbele van de tijd om een baan verwerkt moeten de eerste werknemer gaat AWOL (tijd op te halen dat het niet een plus opwerking tijd terug). In een ideale zou je ten minste een volledige functiebeschrijving gemakkelijk goedgekeurd door het einde van elke lange tijd niet gebruikt, op die manier je de banen tikt te houden over en in het ergste geval een baan zou twee dagen duren om te verwerken moet de eerste vermist.
- Jobs neemt een minuut te lopen: Dit betekent dat uw werknemers ongeveer 15 minuten te nemen om elke taak uit te voeren. Hoewel dit in eerste instantie kan ideaal lijken, kunt u extra werk verwerking te krijgen tijdens de lunch, koffiepauzes, vergaderingen, enz. dit scenario zet druk op andere gebieden van uw systeem en introduceert zijn eigen problemen. Bijvoorbeeld, in de eerste plaats je setup / verwerkingstijd verhouding gaat naar rechts naar beneden gaan, dus het verliezen van het systeem efficiëntie. Uw netwerk zal voortdurend streaming taak informatie aan de verschillende werknemers frustrerend medewerkers die dong hun dagelijkse werk. Je bent ook gaan om meer spanning op je werk verwerking server als het moet schotel uit heel veel kleine stukjes van het werk op een regelmatige basis. Tot slot, in deze situatie als de taak de server down gaat je gaat een enorme achterstand van onvoltooid werk dat de grotere klussen kunnen van voortgezet verwerking zalig niet van bewust dat de klus server werd moeilijkheden ondervindt te creëren.
In werkelijkheid zal er geen een ideale configuratie voor uw netwerk setup zijn, hangt veel af van de beschikbare middelen, soorten werk, job doorlooptijd eisen, netwerkcapaciteit, en ga zo maar door. Maar een aantal richtlijnen zijn:
- Grootte opdrachten zo, dat elke werknemer kan krijgen door middel van minimaal 3-4 banen in een periode van 15 uur (de langste waarschijnlijk inactieve periode)
- Speel met hoe groot de 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 voltooien ervan uit dat haar verdwenen AWOL en beginnen met de verwerking door 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 als de daarop volgende taak niet). U kunt deze tijd te beperken, maar wees voorzichtig niet te verminderen te veel als je kan beginnen dupliceren verwerking van taken op een regelmatige basis.
- Banen moet onafhankelijk zijn van eisen zoveel mogelijk. Het werk-server, bijvoorbeeld, mogen alleen gecontacteerd worden op het begin en einde van elke opdracht.
- Niet je netwerk te verzadigen, zal dit 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 schalen je raster.
- Zorg ervoor dat taken kunnen uitvoeren op uw werknemers. Als taken worden te veel geheugen of schijfruimte intensieve banen zal beginnen afbreken en het enige wat je zal opvallen is een daling van aantal banen verwerkt met geen echte reden waarom.
Overleggen van de resultaten van een baan
Bij indiening van de resultaten van een baan is het belangrijk om te controleren of de resultaten niet zijn ingediend door een andere werknemer, zeker als de huidige werknemer slapende al enige tijd.
Wanneer resultaten dienen ervoor te zorgen dat het aantal resultaten dat het aantal records dat overeenkomt met in de taak.
Zoals eerder, en kan niet genoeg benadrukt worden, bouwen fout-tolerantie in printopdrachten en resultaten onderwerping. De arbeiders kunnen (en waarschijnlijk zal) gaan in slaapstand op de meest ongelegen tijden en dit moet worden verzorgd. Ook weer abstraheren weg uw resultaten inzending zal helpen inspelen op toekomstige veranderingen in uw werk besturingssysteem veel gemakkelijker te behandelen.
Overzicht
In deze section hebben we gekeken naar wat een baan controle-server moet doen en hoe je een zeer fundamentele opgezet. We bespraken hoe je een opdracht uit het besturingssysteem en de beste manier om banen te configureren om het behouden van uw kantoor net in te halen. Om te eindigen, werd een paragraaf of twee aan overleggen van de resultaten terug naar de job control server gepresenteerd.
- Een job controle-server beheert banen en zorgt ervoor dat alle werk-eenheden 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 uit te voeren zonder te veel druk op uw netwerk infrastructuur, en zonder doublures verwerking taken op een regelmatige basis.
- Zorg ervoor dat u fouttolerantie en opstaan checking in uw routines op te bouwen, kunnen werknemers op te schorten en te hervatten en de meest ongelegen tijden. Vergeet niet om te controleren of er reeds is 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.