Въведение
Аз работя в компания, в която ще свършим много работни места за обработка на партидите милиони копия на данните, всеки ден и аз си мисля напоследък за всички машини, които седят около всеки ден правиш нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини да се засили процесорна мощ на нашите системи? В тази поредица от статии, аз ще разгледаме потенциалните ползи от наемането на офис мрежа използване виртуализирани среди.
В част 1, аз се прави преглед на системата и технологии ще се използват, както и обсъдени някои от възможните причини, поради които бихте искали да се създаде мрежа офис.
Работа контрол
Ако ще да се работи работни места след това започваш да имат нужда от някакъв начин да ги управляват. Вашата система контрол на работата (в работата си сървър) трябва да бъдат много добре обмислени, преди дори се опитват да стартирате мрежата офис. Така че, от една страна, какви са задачите за работа система за управление:
- Раздайте работни места по искане на работниците
- Кажете какъв тип работници на работните места да тече
- Проследяване на работни места
- Уверете се, че работните места се провеждат само веднъж
- Provide job data to workers, or at least tell them where to get it
The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.
Работа Server
We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).
The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.
There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.
Basic Setup
Основната настройка за нашата работа сървър ще се състои от онова, което наричам един от моите сървъри Limp (това е Li Nux, ySql м, P HP). Кодът работи на Теа работници ще работи в действителност какви работни места може да работи, като взаимодейства с работата с бази данни, системата за контрол. По-късно може да създаде уеб услуги и действително ръка работни места, а не като на работници свърши тежката работа сами, но за сега ще продължи да използва принципа KISS (Съхранявайте го просто, тъпако!).
Така че, нека направим три MySQL таблици, за да се справят с работни места. Те ще бъдат "работни места", "jobRecords", и "jobResults".
Тук съм с SQL Бъди много малко алтернатива на PHPMyAdmin , само защото си по-лесно да се инсталира на CentOS (за другите виж: 10 Големите алтернативи на PHPMyAdmin )
В тази таблица се състои от 5 прости полета,
- номер: уникална идентификация на работа
- име: Може да е клиент справка, или произволен брой други идентификатори
- Състояние: Трябва да знаете, когато работата е на, например
- 0: Не е стартирала
- 1: Качват
- 2: Завършен
- started_by: Кой е започнах да правя на работа? Това не е напълно задължително, но е хубаво да има. Бих предполагат, проследяване на работниците чрез IP адреса си в мрежата
- started_at: Кога работникът започне работа? Чрез проследяване на работни места, които не са завършени в рамките на сумата Х от време, ние знаем, че трябва да се вземат на работа отново и да започне преработката им от друго лице. Работниците могат да спрат обработката / да се публикуват за всеки ред причини прекъсване на електрозахранването, катастрофа, загуба на мрежова връзка и т.н.
Лесно е как тази таблица може да бъде разширен с няколко допълнителни полета, за да позволи статистическите данни за проследяване, колона край време, за да видите колко време работата взе, брояч, за да видите колко работници качват на работа (явно това трябва да са склонни да 1), работа приоритет, списъкът може да продължи и нататък. В по-сложни сценарии на работа би било възможно да се определи колко памет на работника ще се нуждаят от достъп до (и следователно да използват само подходящи работници), или дори какъв тип работник ще се изисква.
Да се добавят няколко работни места например:
В следващата таблица отново е доста лесен за разбиране, това са нашите работни записи. Те са свързани с основната маса работни места от една колона "jobs_id". В съставът на тази таблица, в голяма степен зависи от данните, които трябва да предоставят на работниците си, нека се направи много прост пример, когато имаме четири колони:
- номер: ID на записа
- име: Име на човек
- адрес: адрес на човек
- jobs_id: Работата ID, че този запис е свързано с
Третата и финална маса се състои от таблицата с резултати, то е почти същото като да се нашите данни таблица, както и с добавянето на някои колони може да бъде част от записите таблица:
- job_record_id: Връзка на резултата в таблицата за задания
- Резултатът: В резултат на данните
... И това е всичко необходимо за контрол на работата! (Макар и на много базово ниво) В моя случай аз съм посочи друга таблица, където е бил данните си за обработка, но това също така могат да са на файл, параметри да тече код симулация, ти име.
Избор на работа
Както вече бе посочено, работниците ще направим всичко за управление на работа за нас, за сега, така че всички ние трябва наистина да направите, е да си намерят работа, която трябва обработка и да получите информация. Как ще го направим? Ами вземете нашите критерии за подбор на работни места и търсят работа, в SQL направих следното:
- Вземете всички работни места, които не са маркирани като завършени от нашите работници и нулиране тях (заместител __ME__ с идентификатор, най-лесно ще бъде IP адрес):
UPDATE "работни места" SET "статут" = 0, когато "статут" = 1 и "started_by" = __ME__;
- С помощта на нашите критерии за работа за избор, изберете работа и да каже на система за контрол, че този работник се занимава с него:
UPDATE "работни места" SET "статут" = 1, "started_by" = __ME__, "started_at" = NOW () КОГАТО "статут" = 0 или
("Статут" = 1 и "started_at"> DATE_SUB (NOW (), период за X час)) ORDER BY "номер" ASC; Като вземат работните места, които не са се завърнали резултати в размер X от време ние гарантираме, че всички работни места се провеждат в случай на работник от срив или ще несигурен.
- Следваща вземете работни места Подробности, следвани от самите записи:
SELECT * FROM `работни места", когато "started_by" = __ME__ LIMIT 1;
SELECT * FROM `job_records", когато "номер" = __JOBID__;
След приключване на работа ние посочете ни резултат записа и маркирайте работа за пълно. Не забравяйте, тъй като работните места може да спре / възобнови по всяко време да позволи за някои стабилността в скрипта. Тя може да бъде, че задачата, спира по средата на актуализиране на системата за контрол на работата, така че проверка на броя на записите в работа и броя на резултатите, записани обратно към системата за управление на задачите би било мъдър ход.
В допълнение, като това показва, колко работни места могат да бъдат избрани и управлявани от SQL-заявка кадри, които трябва наистина да бъде абстрахиране работата си контрол, така че ако решите да преминете към използване на уеб услуги, файл, базирана система, XML или друг съвкупност от системи, това няма да повлияе на кода над него.
Работа за конфигурация
Следващият аспект е да се помисли работа размери и конфигурация. С играе с работа конфигурация може да удари отличен баланс между скорост, репликация процес, и надеждност. Вземете няколко OFA сценария:
- Работата отнема 1 ден всяка да текат: Това означава, че работниците трябва да 15 дни за обработка на всяко едно работно място (не забравяйте 10% от мощността за 2/3rds на време). Това очевидно не е мъдър конфигурация, вашата работа размер е твърде голям! Това ще отнеме поне два пъти повече време, за да си намеря работа преработени следва първоначалната работник отиде несигурен (време, за да вземем, че не се е върнал в резултат плюс преработка време). В един идеален ще трябва най-малко един пълен работен лесно премахнати до края на всеки продължителен период на престой, по този начин да поддържате работни места тиктака отново и в най-лошия случай, че работата ще отнеме два дни, за процеса, ако първият изчезнали.
- Работа по 1 минута, за да текат: Това означава, че работниците отнеме около 15 минути, за да тичам всяка работа. Въпреки че това може първоначално изглежда идеално, получавате допълнителна обработка работа по време на обяд, кафе паузи, срещи и т.н. този сценарий поставя натиск върху други области на вашата система и въвежда собствените си проблеми. Например, от една страна настройките съотношение между времето за обработка ще отиде чак, поради загуба на ефективността на системата. Вашата мрежа ще бъде непрекъснато стрийминг работа информация за различните работници разочароващ служители, които са оспорвани ден им работен ден. Вие също така ще положи повече натоварване на сървъра си работа на преработка, трябва да ястие на много и много малки части от работа на регулярна основа. На последно място, в тази ситуация, ако си работа сървър слиза ти започваш да се създаде огромен обратно регистър на недовършена работа има предвид, че по-големи работни места може да продължи обработката на блажено неведение, че работата сървър е в затруднено положение.
В действителност няма да има една идеална конфигурация за вашата мрежа настройка, много зависи от наличните средства, видовете работа, работа изисквания време за изпълнение, мрежови възможности, и така нататък. Все пак някои насоки ще бъдат:
- Размер на работни места, така че всеки работник може да получи чрез поне 3-4 работни места в срок от 15 часа (най-дългия период на престой вероятно време)
- Играйте с работа размер, така че време за настройка става доста незначителни в сравнение с времето на преработка (като се има предвид по-горе точка).
- Ако работата не завърши в двоен размер от време (може би по-малко), които се очаква то да приключи тя предположи, че го няма несигурен и да започнат да ги обработват с друг работник. Това означава, че се наложи да чака до три пъти повече от нормалната продължителност на работа, за да пълни (може би повече, ако последващата работа не успява). Вие може да искате да се намали този път, но внимавайте да не се намали прекалено много, колкото може да започне да дублират задачите за обработка на регулярна основа.
- Работата трябва да бъде независима от външни изисквания, доколкото е възможно. Работата сървър, например, трябва да се свържат в началото и в края на всяка работа.
- Да не се насити вашата мрежа, това ще има два негативни ефекта, Вашите служители през деня ще намерите използват мрежата разочароващо и проблеми могат да бъдат изпитани с времето връзките на проблем, който само ще се влоши, докато мащаба си мрежа.
- Осигуряване на работни места може да работи с вашите работници. Ако работните места да стане прекалено интензивно памет или дисково пространство интензивни работни места ще започне прекъсване и единственото нещо, което ще забележите, е намаляване на броя на работните места обработват без реална причина.
Подаване на резултати от работата
При представянето на резултатите от работата е важно да се провери дали резултатите не са били представени от друг работник, особено ако настоящият работникът е бил латентен за известно време.
Когато резултатите са предоставени гарантира, че броят на резултати, съответстват на броя на записите в тази работа.
Както бе посочено по-горе, и не може да бъде над подчерта, изграждане на устойчивост на откази в работата извличане и резултатите представяне. Работниците могат (и най-вероятно ще), отидете в режим за спиране на най-неудобно време и на това трябва да бъде взети под внимание. Също така за пореден път абстрахиране далеч резултатите си представяне ще се погрижат за бъдещи промени в системата за контрол върху работата много по-лесно да се справим.
Обобщение
В този section сме разглеждали какво е сървър контрол на работата трябва да се направи и как да се получи един много основен система, създадена. Ние обсъдихме как да извлечете от работата на системата за контрол и най-добрия начин за конфигуриране на работни места, за да получите най-ни на вашата система офис мрежа. За да се завърши, една или две точки при подаването на резултатите обратно на сървъра контрол върху работата беше представен.
- Сървърът контрол върху работата управлява работни места и гарантира, че цялата работа, единици са завършени
- Чрез абстрахиране работата си изберете / подаване резултати можем да променим технологията на сървъра за управление, без много проблеми
- Конфигуриране на работни места за да се гарантира, че те се провеждат бързо и ефективно, без въвеждането на твърде много натиск върху инфраструктурата на мрежата, и без да дублират задачите за обработка на регулярна основа.
- Уверете се, че изграждането на отказоустойчивост и checking грешка в съчетанието си, работниците могат да спре и да се започне и най-неудобен пъти. Не забравяйте да проверите дали резултатите са били представени от друг работник.
Следващия път
В част 3 ще създадем виртуална машина за обработка и създаване на прозорците ни машини да стане празен работно време.