Ievads
Es strādāju uzņēmumā, kurā mēs palaist daudzas partijas darba vietu apstrādes miljonu ierakstu datu katru dienu, un es esmu bijis domāt nesen par visām mašīnām, kas sēž apkārt katru dienu, neko nedarot, vairākas stundas. Vai tas nebūtu labi, ja mēs varētu izmantot šos mehānismus, lai atbalstītu pārstrādes jaudu no mūsu sistēmu? Ar šo komplektu raksti Es esmu, lai aplūkotu potenciālo ieguvumu nodarbina biroja tīklu , izmantojot virtualised vidēs.
In 1 daļā I sniedza pārskatu sistēmas un tehnoloģijas, man būs, izmantojot, kā arī apspriesti daži no iespējamiem iemesliem, kāpēc vēlaties izveidot biroju tīklu.
Job Control
Ja jūs būs ekspluatācijas darbu, tad jūs gatavojas ir nepieciešams zināms veids, lai pārvaldītu tos. Jūsu darbs kontroles sistēma (jūsu darbs serverī) ir jābūt ļoti labi pārdomāts līdz pat mēģināt palaist biroja tīklam. Tātad, pirmkārt, kādi ir darba kontroles sistēmas uzdevumi:
- Izkārt darbavietas kad to pieprasa darba ņēmēju
- Pastāstiet darbiniekiem, kāda veida darbavietas palaist
- Track darbu
- Nodrošināt, ka darba vietas ir rādītas tikai vienu reizi
- Nodrošina darbu datu darbiniekiem, vai vismaz pateikt, kur to iegūt
Sistēmai arī jābūt paplašināms, risinājums, kas strādā tagad vienā gadījumā var tikt pagarināts palaist vairākas darba veidiem, kā biznesa redz vērts režģa risinājumu. Piemēram, darba vietās, var iegūt prioritātes, vairāk nekā viena darba veids var pastāvēt (ti vairākas kods bāzēm), iespējams, jums var pat palaist vairākus atšķirīgus darba ņēmēju mašīnas, kas ir optimizētas katram darba veidam (kas gan nebija virzīties prom no "sugas strādnieks "ideja). Vienmēr mēģiniet domāt par nākotni, izstrādājot sistēmu, īstermiņa redzējums var izraisīt ilgtermiņa vilšanās un palielināt izstrādes laiku.
Darba Server
Mēs ejam uz nepieciešamību kaut kur, lai kontrolētu savu darbu no, tas ir tikai sistēma jūsu režģis, kas ir noteikta resursu vietrādis, ir tā IP adresi, resursdatora nosaukumu, URL (izmantojot iekšējo DNS), uc Tas ir tāpēc, ka darbiniekiem jāzina, kur meklēt darbu, darbiniekiem ir nepieciešams atrast darbu vadības sistēmu (ne darba kontroles sistēmu atrast darbiniekus).
Darbs serveris pats nav īsti ir sarežģīts uzdevums (jo pamata sistēmas tik un tā), tai ir nepieciešama, lai saglabātu vakanču sarakstu, neizvietot darbu, saņemt rezultātus, un pēc tam saglabājiet tos turpmākai atgūt. Cik šīs detaļas (piemēram, "rokas no darbavietām") ir definēti var būt ļoti vienkāršas. Vēlāk mēs varam paplašināt sistēmu, iekļaujot administrācijas saskarni pievienot, rediģēt, dzēst, pārtraukt darba vietas, bet tas pārsniedz šo procedūru.
Nav nekādu iemeslu tam, ka jūsu darbs Serveris nevarēja būt virtuālā mašīna darbojas jūsu galveno apstrādes servera, ja tas nav aizplūšanu pārāk daudz resursu no tā. Darbs serveris Tomēr nav nepieciešams augstas pieejamības, ja tā iet uz leju piektdienas vakarā, jūs gatavojas zaudēt visu nedēļas nogali apstrādes, iespējams, maksā jums pāris nedēļas vērts apstrādes laiku (salīdzinot ar jūsu galveno apstrādes servera vien) . Jūs varētu vēlēties apsvērt savu darbu serverī slodzes līdzsvarotu vidi augstu pieejamību.
Basic Setup
Pamata setup, lai mūsu darbs serveris veidos, ko es esmu aicinot vienu no saviem Limp serveriem (tas ir Li nux, m ySql, P HP). Kods darbojas uz Teu darbiniekiem būs faktiski strādā, kādas darbavietas to var palaist, mijiedarbojoties ar ar darba kontroles sistēmu datu bāzēm. 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
Kā norādīts iepriekš, darba ņēmējiem do mūsu darba vadība mums tagad, lai viss, kas mums nepieciešams, lai tiešām darīt, ir atrast darbu, kas nepieciešams pārstrādes un saņemt informāciju. Kā mēs to darām? Nu uzņemt mūsu darbu atlases kritērijiem un meklēt darba vietas, jo SQL man bija šādi:
- Veikt darbu, kas nav atzīmēti kā pabeigta, bet no mūsu darbinieku un atjaunotu tos (aizstāt __ME__ ar identifikatoru, vienkāršākais būtu IP adreses):
UPDATE `darbu` SET `status` = 0 WHERE `status` = 1 UN `started_by` = __ME__;
- Izmantojot mūsu darbu atlases kritērijiem, izvēlieties darbu un pateikt, ka šis darba ņēmējs ir ar to nodarbojas kontroles sistēma:
UPDATE `darbu` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 vai
(`Status` = 1 UN `started_at`> DATE_SUB (NOW (), Interval X stunda)) ORDER BY `id` ASC;
Ar satveršanas darba vietas, kas nav atgriezušies rezultātus X laiku mēs nodrošinām, ka visi darbi ir darboties gadījumā, ja darba ņēmēja crashing vai iet AWOL.
- Nākamais greifers darbavietas informāciju pēc ierakstus sevi:
SELECT * FROM `darbu` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Pabeidzot darbu, mēs ievietotu savu rezultātu uzskaiti un atzīmēt darbu kā pabeigtu. Atcerieties, jo darbus var pārtraukt / atjaunot jebkurā brīdī pieļautu zināmu stabilitāti, kas savu skriptu. Varētu būt, ka uzdevums atliek pusi veidā caur atjauninot darba kontroles sistēmas, lai pārbaudītu ierakstu skaits darbu un rezultātu atkal saglabātu darba kontroles sistēmu skaits varētu būt gudrs kustēties.
Turklāt, lai gan tas parāda, cik darba vietas var izvēlēties un pārvalda no SQL query rāmis jums patiešām ir, abstrahējoties Jūsu darba kontroli, lai, ja jūs nolemjat pāriet uz, izmantojot interneta pakalpojumu, failu balstītai sistēmai, XML , vai jebkuru citu vairākas sistēmas, tas neietekmē kods virs tā.
Darba konfigurācija
Nākamais aspekts, kas jāapsver, ir darba apjomu un konfigurāciju. Spēlējoties ar darbavietu konfigurācija mēs varam panākt lielisku līdzsvaru starp ātrumu, process replikāciju un uzticamību. Paņem pāris kādu teksta apstrādes scenāriji:
- Darbs jāveic 1 dienā katru rādīt: Tas nozīmē, ka jūsu darbinieki ir 15 dienas, lai apstrādātu katru darbu (atceros 10% no jaudas 2/3rds laika). Tas ir skaidri nav gudrs konfigurācija, jūsu darba apjomu, ir pārāk liels! Būtu nepieciešams vismaz divreiz laiku, lai iegūtu pārstrādātu darbu vajadzētu sākotnējos darbinieks aiziet AWOL (laiks uzņemt, ka tā nav atgriezies rezultāts plus pārstrādes laikā). Ir ideāla, jūs ir vismaz vienu pilnu darbu viegli noskaidroti līdz katra ilgs tukšgaitas periodu, tādā veidā jūs saglabāt darbavietas atzīmējot beidzies, un sliktākajā gadījumā darbu varētu ilgt divas dienas, lai process būtu vispirms iet missing.
- Darbs jāveic 1 minūti, lai palaistu: Tas nozīmē, ka jūsu darbinieki aizņems apmēram 15 minūtes, lai palaistu katru darbu. Kaut arī tas sākotnēji var likties ideāls, jūs iegūstat papildu darbs apstrādes laikā pusdienas laikā, kafijas pauzes, tikšanās, utt šis scenārijs rada spriedzi citiem jūsu sistēmas, un ievieš savas problēmas. Piemēram, vispirms jūsu setup / apstrādes laiks attiecība gatavojas iet pa labi uz leju, tādējādi saglabājot sistēmas darba efektivitāti. Jūsu tīkls būs pastāvīgi straumēšanas darba informāciju ar dažādiem darba ņēmējiem nomākta darbinieki, kas ir dong viņu ikdienas darbā. Jūs esat arī gatavojas likt lielāku spriedzi jūsu darbu apstrādes servera, jo tas ir ēdiens no partijām un partijām, mazos gabaliņos, kas strādā uz regulāri. Visbeidzot, šajā situācijā, ja jūsu darbs servera iet uz leju, jūs gatavojas izveidot milzīgu atpakaļ žurnālu nepabeigtajiem darbiem tā kā lielāka darbavietu varētu turpināt apstrādes blissfully neapzinās, ka darbs serveris bija nonākusi grūtībās.
Patiesībā nebūs neviena ideāla konfigurācija tīkla setup, daudz kas ir atkarīgs no pieejamajiem līdzekļiem, darbu veidiem, darba atgriešanas laiku prasībām, tīkla jaudu, un tā tālāk. Tomēr dažas vadlīnijas būtu:
- Izmērs darbu, lai katrs darba ņēmējs var iegūt, izmantojot vismaz 3-4 darba vietas uz 15 stundām (garākā iespējams dīkstāves laiku)
- Spēlē ar darba apjomu tā, ka uzstādīšanas laikā kļūst samērā nenozīmīga, salīdzinot ar apstrādes laiku (ņemot vērā iepriekšējo punktu).
- Ja darbs nav pilnīgs divreiz vairāk laika (varbūt mazāk) jūs gaidīt to, lai pabeigtu to pieņemt, ka tā gājusi AWOL un sākt tā tiek apstrādāta ar kādu citu darbinieku. Tas nozīmē, ka Jums var būt jāgaida līdz trīs reizes lielāka par parasto ilgumu darbs ir pabeigts (iespējams arī ilgāk, ja turpmāko darbu neizdodas). Jūs varat samazināt šo laiku, bet jābūt uzmanīgiem, lai samazinātu to pārāk daudz, kā jūs varat sākt dublējot apstrādes uzdevumus regulāri.
- Darbs būtu neatkarīga no ārpus prasībām, cik vien iespējams. Darbs serveri, piemēram, tikai sazināties sākumā un beigās katru darbu.
- Nelietojiet piesātinātās savu tīklu, tas ir divas negatīvas sekas, jūsu dienas darbinieki būs atrast, izmantojot tīklu, nomākta, un problēmas var būt pieredze ar savienojumiem laika out problēmu, ka būs tikai sliktāk, kā jūs skalu jūsu tīklam.
- Nodrošināt darba vietas var palaist uz jūsu darbiniekiem. Ja darba vietu kļuvusi pārāk atmiņietilpīga vai diskā intensīvu darbu sāks Pārtrauc un vienīgā lieta, jūs paziņojums ir piliens darbavietu skaits apstrādāti bez reālas iemesls, kāpēc.
Iesniegšana rezultāti Darbs
Iesniedzot rezultātus, darbs ir svarīgi pārbaudīt, vai rezultāti nav iesniedzis cits darbinieks, it īpaši, ja pašreizējā darba ņēmējs ir neaktivizētas kādu laiku.
Ja rezultāti tiek iesniegti nodrošina, ka rezultāti saskan ar skaitu ierakstu, kas darbu.
Kā norādīts iepriekš, un nav iespējams novērtēt par augstu, veidot defektu pielaidi par darbu izguves un rezultātu iesniegšanu. Darbinieki var (un, visticamāk, būs) iedziļināties apturēt režīmā pie visvairāk neērta reizes, un to nepieciešams aizrādījums. Arī vēlreiz abstrahējoties prom savus rezultātus iesniegumu palīdzēs rūpēties par turpmākām izmaiņām jūsu darba kontroles sistēma daudz vieglāk tikt galā ar.
Kopsavilkums
Šajā section mums ir aplūkots, kas darba kontroles servera jādara un kā iegūt ļoti pamata sistēma izveidota. Mēs apspriedām, kā iegūt no kontroles sistēmas darbu un to, kā vislabāk konfigurēt darba vietu, lai saņemtu lielāko daļu mūsu Jūsu biroja režģa sistēmu. Lai pabeigtu, punkts vai divi Iesniedzot rezultātus atpakaļ darba kontroli serveris tika iesniegts.
- Darba kontroli serveris pārvalda darbavietas un nodrošina, ka darba vienības ir pabeigti
- Ar abstrahējoties Jūsu darba izvēlaties / rezultātu iesniegšanas mēs varam mainīt tehnoloģiju kontroles servera bez daudz problēmu
- Konfigurējiet savu darbu, lai nodrošinātu, ka tie darbojas ātri un efektīvi, bez pārāk lielu spiedienu uz savu tīkla infrastruktūru, un nedublējot apstrādes uzdevumus regulāri.
- Pārliecinieties, ka jums veidot defektu pielaidēm un kļūdu checking savā rutīnu, darbinieki var apturēt un atsākt un visvairāk neērta reizes. Neaizmirstiet pārbaudīt, vai rezultāti jau ir iesniedzis cits darbinieks.
Nākošreiz
Ar 3 daļu mēs izveidot savu virtuālo apstrādes iekārta, un izveidot mūsu logiem mašīnas kļūt dīkstāves laika darba ņēmējiem.