Uvod
Radim u tvrtki gdje smo pokrenuti mnoge skupne poslove obrade milijune zapisa podataka svaki dan i Razmišljao sam nedavno o svim strojevima koji sjede oko svaki dan radiš ništa za nekoliko sati. Ne bi li bilo dobro ako bismo mogli koristiti one strojeva za poticanje obrade snagu naših sustava? U taj skup članaka idem gledati na potencijalne koristi od zapošljavanja ureda mrežu koristeći virtualiziranog okruženja.
U 1. dio sam dao pregled sustava i tehnologija ću koristiti kao i objašnjeno neke od potencijalnih razloga zašto bi želite napraviti ureda mrežu.
Upravljanje poslom
Ako tvoj 'idući u biti pokrenut radnih mjesta onda idete da je potrebno na neki način upravljati njima. Vaš posao sustav upravljanja (na svom poslu poslužitelj) treba se stvarno dobro osmišljenog prije nego pokušate pokrenuti ureda mrežu. Dakle prvo, što su zadaci za sustav upravljanja posao:
- Podijelite posao na zahtjev radnika
- Recite radnici koju vrstu radnih mjesta za pokretanje
- Praćenje radnih mjesta
- Osigurati da radna mjesta samo pokrenuti jednom
- Osigurati posao podatke radnika, ili ih barem reći gdje da biste dobili Internet
Sustav također mora biti proširiv, rješenje koje radi za sada u jednom slučaju može se produljiti za pokretanje nekoliko tipova radnih mjesta kao poslovni vidi vrijednost u mrežu rješenje. Na primjer, radna mjesta mogu dobiti prioritete, više od jednog posla vrste mogu postojati (tj. više kod baze), na kraju vi svibanj čak i pokrenuti nekoliko različitih radnik strojeve koji su optimizirani za svaku vrstu posla (iako to ne odmaknuti od "generičkih radnika 'ideju). Uvijek pokušajte razmišljati o budućnosti, kada razvoja sustava, kratak viziju pojam može dovesti do dugoročno frustracije i povećanje vremena razvoja.
Posao poslužitelja
Idemo na potrebu negdje kontrolirati poslove iz, to bi trebao biti jedini sustav u mrežu koja ima fiksni Resource Locator, biti da se IP adresa, ime hosta, URL (koristeći interni DNS), itd. To je zato što radnici moraju znati gdje se mogu pogledati za radna mjesta, radnici moraju pronaći sustav za kontrolu (ne sustav za upravljanje naći radnika).
Posao poslužitelju koji se ne stvarno imati komplicirano zadatak (u svakom slučaju osnovni sustav), to treba pohraniti popis radnih mjesta, iz ruke posla, dobiti rezultate, i nakon toga ih spremiti za kasnije pretraživanje. Kako tih dijelova (kao što je "iz ruke posla ') su definirane može biti vrlo osnovni. Kasnije možemo proširiti sustav uključuje administracijsko sučelje za dodavanje, uređivanje, brisanje, obustaviti radnih mjesta ali to je izvan ove vježbe.
Nema razloga onda da vaš posao poslužitelj ne može biti virtualni stroj radi u svoju glavnu obradu poslužitelj pod uvjetom da ne odvoditi previše sredstava iz njega. Poslužitelj posao, međutim ne treba visoku dostupnost, ako se ide dolje u petak navečer ćete izgubiti cijeli vikend obrade, potencijalno troška vam nekoliko tjedana u vrijednosti od procesorskog vremena (u odnosu na svoje glavne obradu server sami) . Vi svibanj ištanje to uzeti u obzir stavljajući svoj posao poslužitelj na teret uravnoteženom okruženje za visoku dostupnost.
Basic Setup
Osnovne postavke za svoj posao poslužitelj će se sastojati od onoga što sam poziv jedan od mojih Limp poslužitelja (koja je Li Nux, m ySql, P KS). 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
Kao što je navedeno ranije, radnici će raditi svoj posao upravljanja za nas, za sada, tako da svi trebamo stvarno učiniti je pronaći posao koji treba obrada i dobiti informacije. Kako bismo to učinili? Pa pokupiti naše kriterije za odabir posao i tražiti poslove, u SQL sam sljedeće:
- Uzmite bilo koje poslove koji nisu označeni kao potpuni, ali od naših radnika i resetiranje ih (zamjena __ME__ s identifikatorom, najlakše bi se IP adresa):
UPDATE `radnih mjesta` SET 'status' = 0 gdje 'status' = 1 i `started_by '= __ME__;
- Koristeći naše kriterije odabira posla, odaberite posla i reći da je ovaj sustav kontrole radnik bavi se:
UPDATE `radnih mjesta` SET 'status' = 1, 'started_by' = __ME__, `started_at '= NOW (), gdje' status '= 0 ili
('Status' = 1 i `started_at`> DATE_SUB (sada (), interval X HOUR)) ORDER BY `id` ASC; Do grabbing radna mjesta koja nisu vratili rezultate u X količinu vremena koju bi se osiguralo da su svi poslovi izvoditi u slučaju radnika pad ili ide IZBEZUMILA.
- Sljedeća zgrabite posao detalja slijedi zapisa sami:
SELECT * FROM `radnih mjesta 'gdje' started_by '= __ME__ LIMIT 1;
SELECT * FROM `job_records 'Gdje' id '= __JOBID__;
Po završetku posla mi umetnuti naš rezultat bilježi i označite posao završi. Sjetite se kao poslovi može obustaviti / nastaviti u bilo koje vrijeme dopustiti neke robusnosti u svom pismu. To bi moglo biti da je zadatak obustavlja pola puta kroz ažuriranje sustav za kontrolu, tako da provjere broj zapisa u posao i broj rezultata spremljene natrag u sustav za upravljanje bi mudar potez.
Osim toga, dok ovo pokazuje kako radna mjesta mogu se odabrati i upravlja iz SQL upita okvira te bi trebao stvarno biti sažetaka svoj posao kontrole, tako da ako se odlučite prebaciti na korištenje web-usluge, datotečni sustav temeljen XML , ili bilo koje druge broj sustava neće utjecati na broj iznad njega.
Posao konfiguracije
Sljedeći aspekt razmotriti je posao veličine i konfiguracije. By igranje s posla konfiguracije možemo štrajk izvrsnu ravnotežu između brzine, proces replikacije i pouzdanost. Uzmi scenarija ofa par:
- Poslovi uzeti 1 dan svaki pokrenuti: To znači da radnici trebaju 15 dana za obradu svaki posao (sjetite se 10% snage za 2/3rds vremena). To očito nije mudar konfiguraciju, vaš posao je veličina način prevelika! To bi se barem dvostruko vrijeme da biste dobili posao obrađen treba početni radnik ide IZBEZUMILA (vrijeme pokupiti da ga nije vratio rezultat plus preradu vrijeme). U idealnom biste imati barem jedan puni posao jednostavno izbrisani do kraja svakog dugog mirovanja razdoblje, na taj način zadržite posao navlake preko au najgorem slučaju posao bi se dva dana postupak bi trebao ići prvi nedostaje.
- Poslovi uzeti 1 minutu za pokretanje: To znači da radnici potrajati oko 15 minuta pokrenuti svaki posao. Dok to u početku može činiti idealnim, dobit ćete dodatni posao za obradu vrijeme ručka, pauze za kavu, sastanci, itd. ovaj scenarij stavlja pritisak na drugim područjima vašeg sustava i uvodi svoje probleme. Na primjer, prvo svoj setup / vrijeme obrade omjer je ići desno dolje, dakle gubitka učinkovitosti sustava. Vaša mreža će biti stalno struji posao informacije raznih radnika frustrirajuće osoblje koji su dong svoje svakodnevnom radu. Također ćete uložiti više pritisak na vaš poslužitelj posao obrade kao što je na jelo na puno i puno malih komada rada na regularnoj osnovi. Na kraju, u ovoj situaciji ako je vaš posao poslužitelj odlazi dolje ćete stvoriti ogroman leđa dnevnik nedovršenog posla, dok veći radnih mjesta moglo bi za nastavak obrade blaženo nesvjestan da je posao poslužitelj poteškoća.
U stvarnosti neće biti nitko idealna konfiguracija za grid postava, puno ovisi o raspoloživim sredstvima, vrste posla, posao vrijeme obrta zahtjeve, mreže sposobnost, i tako dalje. No neke smjernice će biti:
- Veličina radnih mjesta tako da svaki radnik može dobiti preko najmanje 3-4 novih radnih mjesta u roku od 15 sati (najduže vjerojatno mirovanja vremenskom razdoblju)
- Igrajte se s posla veličine, tako da postava vrijeme postaje prilično beznačajan u odnosu na vrijeme obrade (imajući u vidu gore navedene točke).
- Ako posao ne dovrši u dvokrevetnoj iznos od vrijeme (možda manje), možete očekivati da će završiti to pretpostaviti da je njegov nestali IZBEZUMILA i početi obradu s drugim radnik. To znači da ćete možda morati pričekati i do tri puta normalne dužine posao za to dovršiti (moguće više, ako naknadno posao ne uspije). Vi svibanj želite smanjiti ovaj put, ali budite oprezni da ne previše smanjiti kao što svibanj početi umnožavanje prilagodbom na regularnoj osnovi.
- Poslovi treba biti neovisna od vanjskih uvjeta koliko je god moguće. Posao poslužitelja, na primjer, samo treba kontaktirati na početku i na kraju svaki posao.
- Ne prožeti vaše mreže, to će imati dvije negativne posljedice, vaše dnevne osoblje će pronaći putem mreže frustrirajuće i problemi mogu biti iskusni sa vezama iz vremena problem koji će se samo pogoršavati kao što skali vaše mreže.
- Osigurati radna mjesta mogu se izvoditi na svojim radnicima. Ako poslovi postaju previše memorije intenzivne, odnosno prostor na disku intenzivne poslove će početi prekidanja i jedina stvar koju ćete primijetiti je pad broja radnih mjesta obrađuju bez pravi razlog zašto.
Podnošenje Rezultati posao
Prilikom podnošenja rezultate posao važno je da provjerite da rezultati nisu poslali drugi radnik, pogotovo ako je trenutna radnik je bio uspavan za neko vrijeme.
Kada se rezultati dostavljaju se osiguralo da se broj rezultata utakmica broj zapisa u posao.
Kao što je navedeno ranije, i ne može se više istaknuo, graditi tolerancija kvarova u posao pretraživanja i rezultati podnošenje. Radnici mogu (i najvjerojatnije će se) otići u suspend modu u većini nezgodno puta i to treba biti catered za. Također još jednom sažetaka daleko rezultata podnošenje pomoći će razonoditi za buduće promjene u sustavu kontrole posao puno lakše da se bave.
Rezime
U ovom section smo gledali na ono što poslužitelju posao kontrole treba učiniti i kako da biste dobili vrlo osnovni sustav postavljen. Razgovarali smo o tome kako da biste preuzeli posao iz sustava kontrole i kako najbolje konfigurirati radnih mjesta da biste dobili najviše naš vašeg sustava Office mrežu. Da biste završili, odlomak ili dva o podnošenju rezultata natrag poslužitelju posao nadzora je predstavljena.
- Poslužitelj posao kontrole upravlja radna mjesta i osigurava da su sve radne jedinice dovršen
- Do sažetaka odaberite svoj posao / rezultat podnošenje možemo promijeniti tehnologiju kontrole poslužitelja bez puno problema
- Konfigurirajte svoj posao kako bi se osiguralo da su pokrenuti brzo i učinkovito, bez stavljanjem previše pritisak na svoje mrežne infrastrukture, a bez umnožavanje prilagodbom na regularnoj osnovi.
- Uvjerite se da ste izgraditi tolerancija kvarova i pogreške checking u svoje rutine, radnici mogu suspendirati i nastaviti, a najviše nezgodne puta. Ne zaboravite da provjerite je li rezultati već podnio drugi radnik.
Sljedeći put
U dijelu 3 ćemo stvoriti naš virtualni stroj za obradu i postavljanje naših prozora strojevi postati mirovanja radnog vremena radnika.