Įvadas
Aš dirba įmonė, kur mes paleisti daug partijos milijonų įrašų duomenų tvarkymo darbo vietas kiekvieną dieną ir aš galvoju apie visus mašinos, sėdi aplink kiekvieną ir kiekvieną dieną keletą valandų nieko nedaryti . Ar nebūtų gerai, jei galėtume naudoti šias mašinas paremti mūsų sistemos duomenų apdorojimo galia? Į šį straipsnių rinkinį aš pažvelgti į galimą naudą įdarbinimo biuro tinklo , naudojant virtualised aplinką .
1 dalyje daviau sistemos ir technologijos bus taip pat aptarti kai kurie iš galimų priežasčių, kodėl Jūs norėtumėte sukurti biuro tinklelį apžvalga .
Darbo kontrolė
Jei jūs ketinate veikia darbo vietas, tada jūs ketinate reikia kažkokiu būdu juos valdyti. Jūsų darbas kontrolės sistema (į savo darbo serveryje) turi būti tikrai gerai apgalvoti dar prieš bandant paleisti biuro tinklo. Taigi pirma, kas yra darbo kontrolės sistemos uždaviniai:
- Iš darbuotojų prašymu ranka iš darbo vietų
- Papasakokite darbuotojams, kokio tipo darbo vietų paleisti
- Sekti darbo vietų
- Užtikrinti, kad darbo vietų paleisti tik vieną kartą
- Suteikti darbo darbuotojų duomenis, arba bent pasakykite jiems, kur jį gauti
Sistema taip pat turi būti galima pratęsti, sprendimas, kuris veikia dabar vienu atveju gali būti pratęstas paleisti kelių tipų darbo vietų, verslo mato tinklelį tirpalo verta. Pavyzdžiui, darbo vietų gali gauti prioritetus, daugiau nei vieną darbą tipas, gali egzistuoti (ty keletą kodo bazės), galų gale jūs net gali vykdyti keletas skirtingų darbuotojas mašinos, optimizuota kiekvienam darbo tipui (nors tai nėra tolti nuo generinis darbuotojas "idėja). Visada stenkitės galvoti apie ateitį, kuriant sistemas, trumpą laiką regėjimas gali sukelti ilgesnį laiką nusivylimas ir padidinti vystymosi laikas.
Darbo Serveris
Mes ketiname reikia kažkur kontroliuoti mūsų darbo vietas, tai turėtų būti tik savo tinklelį sistemą, kad fiksuoto Resource Locator, kad IP adresą, kompiuterio vardą, URL (naudojant vidinio DNS), ir tt Tai yra todėl, kad darbuotojams reikia žinoti, kur ieškoti darbo, darbuotojams reikia rasti darbo kontrolės sistema (ne darbo kontrolės sistema rasti darbuotojų).
Darbo serveris pats nėra tikrai sudėtinga užduotis (bent jau pagrindinės sistemos), ji turi saugoti darbo vietų sąrašą, darbo vietų ranką, gauti rezultatus, o vėliau juos laikyti, kad vėliau. , Kaip šios dalys (pavyzdžiui, "darbo vietų" ranką) yra apibrėžti gali būti labai paprastas. Vėliau mes galime išplėsti sistemos administravimo sąsaja, pridėti, redaguoti, trinti, sustabdyti darbo vietų, tačiau tai yra ne tik šį pratimą.
Nėra jokios priežasties, kokia, tada, kad jūsų darbo serveris negalėjo būti virtualios mašinos veikia per savo pagrindinę perdirbimo serverio, jeigu nėra nutekėjimo per daug išteklių iš. Darbo serverio, tačiau reikia didelio prieinamumo, jei jis krinta nuo penktadienio vakaro jūs ketinate prarasti visą savaitgalį perdirbimo, potencialiai jums kainuos porą savaičių verta perdirbimo metu (lyginant su jūsų pagrindinė perdirbimo serverio vien) . Galbūt norėsite apsvarstyti galimybę pradėti savo darbą serverio apkrovos subalansuotą aplinką didelio prieinamumo.
Bazinė konfigūracija
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`.
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:
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
, Kaip nurodyta anksčiau, darbuotojams atlikti savo darbą valdymą mums dabar, todėl visi turime tikrai rasti darbą, reikia perdirbimo ir gauti informaciją. Kaip mes tai darome? Gerai pasirinkti mūsų darbo vietų atrankos kriterijus ir ieškoti darbo, SQL aš taip:
- Imtis bet kokių darbo vietų, kurios nėra pažymėtos kaip visiškas, bet iš mūsų darbuotojas ir iš naujo juos (pakeisti __ME__ su identifikatorius, lengviausia būtų IP adresas):
UPDATE "darbo vietų" SET "statusas" = 0, kai "statusas" = 1 ir `started_by` = __ME__;
- Naudodamiesi mūsų darbo, atrankos kriterijai, pasirinkti darbą ir pasakyti, kad šis darbuotojas yra susijusios su kontrolės sistema:
UPDATE "darbo vietų" SET ", status` = 1, "started_by` = __ME__, "started_at` = NOW () WHERE `, status` = 0 arba
("Statusas" = 1 ir `started_at"> DATE_SUB (NOW (), intervalas X val.)) ORDER BY `id` ASC; Greiferiniai darbo vietų, negrąžinami X laiko užtikrinti, kad visos darbo vietos paleisti darbuotojas kritimo ar vyksta AWOL.
- Kitas patraukti darbo vietų duomenys patys įrašus:
PASIRINKITE * `darbo vietų kūrimo" kur "started_by` = __ME__ limitu 1;
Pasirinkite * `job_records` WHERE `id` = __JOBID__;
Baigus darbą, mes įterpti mūsų rezultatų įrašus ir pažymėti kaip užbaigti darbą. Prisiminti darbo vietas gali sustabdyti / atnaujinti bet kuriuo metu galima, kai savo scenarijų atsparumą. Tai gali būti, kad užduotis sustabdo įpusėjo atnaujinti darbo kontrolės sistema, todėl tikrinti darbą įrašų skaičių ir rezultatus, išsaugoti darbo kontrolės sistema būtų protingas žingsnis.
Be to, o tai rodo, kaip darbo vietų gali būti pasirinktas ir valdoma iš SQL užklausos rėmo, jums tikrai turėtų būti savo darbo kontrolė atsiribotų, kad jei nuspręsite pereiti prie naudodami interneto paslaugą, failų sistema , XML, ar bet kurios kitos sistemų skaičius neturi įtakos virš jo kodą.
Darbo konfigūravimas
Kitas svarstytinas aspektas - darbo vietų dydžio ir konfigūracijos. Žaisdami su darbo vietų konfigūraciją galime streikuoti puikų balansą tarp greičio, replikacijos procesas, ir patikimumą. Užtrukti keletą OFA scenarijus:
- Darbo pasiūlymai 1 diena kiekvieną paleisti: Tai reiškia, kad jūsų darbuotojams reikia 15 dienų, apdoroti kiekviena darbo vieta (prisimenate 10% laiko, 2/3rds galios ). Tai aiškiai nėra išmintingas konfigūracijos, savo darbą dydis yra per didelis! Tai būtų bent dvigubai daugiau laiko gauti darbą tvarkomi pradinio darbuotojas AWOL (laikas pasiimti, kad ji nėra grąžinamas rezultatas plius perdirbimo metu). Idealiai jums reikia turėti bent vieną visą darbą, lengvai pašalinamas kiekvieno ilgos prastovos laikotarpio pabaigoje, tokiu būdu jūs nuolat tiksi ir blogiausiu atveju darbo darbo vietų būtų dvi dienas procesas turėtų būti pirmasis dingsta.
- Darbo pasiūlymai 1 minutę paleisti: Tai reiškia, kad jūsų darbuotojai būtų apie 15 minučių paleisti kiekvieną užduotį . Nors iš pradžių gali atrodyti idealus, jūs gaunate papildomus darbus apdorojimo metu pietų, kavos pertraukos, susitikimai ir tt, šis scenarijus kelia įtampą kitose srityse savo sistemą ir pristato savo problemas. Pavyzdžiui, pirma savo setup / perdirbimo laiko santykis bus eiti teisę žemyn, todėl praranda sistemos efektyvumą. Jūsų tinklas turi būti nuolat transliacijos informacijos apie darbo vietas įvairių darbuotojų nelinksma darbuotojai, kurie yra Dong jų kasdienį darbą. Jūs taip pat ketina skirti daugiau apkrauti savo darbą apdorojimo serverį, nes ji turi daug ir daug mažų gabalėlių darbą reguliariai patiekalas iš. Galiausiai, šioje situacijoje, jei jūsų darbas serveris krinta jūs ketinate sukurti milžinišką Atgal log kadangi didesnis darbo vietų nebaigti darbo galėtų toliau perdirbti palaimingai nežinoti, kad darbo serveris patiria sunkumų.
Iš tikrųjų ten bus niekas idealiai konfigūracijos savo tinklelį sąranką, daug kas priklauso nuo turimų išteklių, darbą, darbo apsisukimo laikas reikalavimai, tinklo pajėgumą, ir tt rūšių. Tačiau kai kurios gairės būtų:
- Dydis darbo vietas taip, kad kiekvienas darbuotojas gali gauti per bent 3-4 darbo vietų 15 valandų laikotarpį (ilgiausiai tikėtina, tuščiosios eigos laikotarpį)
- Žaisk su užduoties dydžiui, taip, kad diegimo metu tampa gana nereikšminga, palyginti su perdirbimo metu (turint omenyje pirmiau minėtą aspektą).
- , Jei darbas nėra baigtas dvigubo laiko (gal mažiau) tikisi, kad jis galėtų užbaigti jį prisiimti, kad jos dingo AWOL ir pradėti ją apdoroti su kitu darbuotoju. Tai reiškia, kad jums gali tekti palaukti iki tris kartus viršijanti įprastą darbą už tai ilgis, užbaigti (galbūt ilgiau, jei vėliau darbą nepavyksta). Galbūt Jūs norite sumažinti šį laiką, bet būkite atsargūs, ne sumažinti per daug, kaip jūs gali pradėti reguliariai kartoti apdorojimo užduotis .
- Darbo vietų turėtų būti nepriklausomi išorės reikalavimai kiek įmanoma. Serverio darbą, pavyzdžiui, turėtų būti tik susisiekti kiekvieno darbo pradžios ir pabaigos.
- Ar ne prisigerti savo tinklą, tai turės neigiamą poveikį jūsų dienos personalas rasti naudojant tinklo varginantis ir gali būti problemų patirties su problema, kad bus tik blogiau, kaip jūs savo tinklelį skalę jungtys laiką.
- Užtikrinti darbo vietų gali paleisti savo darbuotojus. Jei darbo vietos tampa per daug atminties intensyvaus ar diske intensyvaus darbo vietų bus pradėti nutraukimą, ir vienintelis dalykas, kurį pastebėsite yra nėra tikroji priežastis, kodėl tvarkomi su darbo vietų skaičiaus sumažėjimas.
Pateikdamos rezultatus Skelbimas
Pateikti darbo rezultatus, svarbu patikrinti, kad rezultatai nebuvo pateikti kitas darbuotojas, ypač jei darbuotojas buvo ramybės tam tikrą laiką.
Kai rezultatai pateikiami užtikrinti, kad rezultatų skaičius atitinka įrašų skaičius per darbą.
Kaip nurodyta anksčiau, ir negali būti daugiau kaip pabrėžė, kurti gedimui atsparūs į darbo paieškos ir rezultatų pateikimo. Darbuotojai gali (ir greičiausiai bus) pereiti į sustabdyti režimas labiausiai nepatogu kartų ir tai turi būti aptarnavo. Taip pat dar kartą atsiribotų nuo savo rezultatų pateikimo padės patenkinti būsimus pokyčius savo darbo kontrolės sistema daug lengviau susidoroti su.
Santrauka
Section mes pažvelgė, ką turi daryti darbo kontrolė serverio ir kaip gauti labai pagrindinės sistemos. Mes aptarė, kaip gauti iš kontrolės sistemos darbą ir kaip geriau konfigūruoti darbą dauguma mūsų savo biuro tinklo sistemos,. Norėdami baigti, pastraipą ar dvi Pateikdamos rezultatus atgal į darbo kontrolė serverio.
- Darbo kontrolė serverių valdo darbo vietas ir užtikrina, kad visi darbo vienetų
- Atsiribotų savo darbo select / rezultatų pateikimo, mes galime pakeisti serverio valdymo technologija, be didelių problemų
- Konfigūruoti savo darbo vietų, siekiant užtikrinti, kad jie vykdomi greitai ir veiksmingai nesukeliant per daug spaudimo dėl savo tinklo infrastruktūrą, ir vengiant kartojimo ir perdirbimo užduotis reguliariai.
- Užtikrinti, kad jums sukurti atsparumu gedimui ir klaidų checking į savo kasdienybe, darbuotojai gali sustabdyti ir vėl ir labiausiai nepatogu kartų. Nepamirškite patikrinti, jei rezultatai jau buvo pateiktas kito darbuotojo.
Kitą kartą
3 dalis , mes sukurti mūsų virtualios apdorojimo mašinos ir įsteigti mūsų langų mašinų tapti prastovos dieną dirbančių darbuotojų .