Въвеждане
Аз работя в компания, където ще свършим много работни места за пакетна обработка на милиони записи на данни всеки ден и съм мислене наскоро за всички машини, които седят около всеки и всеки ден да прави нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини, за да уплътнят процесорна мощ на нашите системи? В тази поредица от статии, аз отивам да разгледаме потенциалните ползи от наемането на офис мрежа с помощта на виртуализирани среди.
В част 1 , дадох на преглед на системата и технологии, ще се използва, както и обсъдени някои от потенциалните причини, поради които бихте искали да се създаде мрежа в офиса.
Контрол на работата
Ако ти започваш да се работи работни места след това ти започваш да се нуждаят от някакъв начин да ги управляват. Вашата система за контрол на работата на вашия сървър за работа трябва да бъдат наистина добре обмислени, преди дори да се опитват да тече офис мрежа. Така че на първо място, какви са задачите, за система за контрол на работата:
- Раздайте работни места при поискване от работещите в
- Кажете на работниците, какъв вид на работните места да тече
- Track работни места
- Уверете се, че работните места са се изпълнява само веднъж
- Осигуряване на работа данни за работниците, или най-малкото да им кажа къде да го получите
Системата също така трябва да бъде разширяем, решение, което работи за сега в един случай може да бъде удължен, за да стартирате няколко вида на работни места, тъй като бизнес вижда стойност в мрежа разтвор. Например, създаването на работни места могат да получат на приоритети, може да съществува повече от един вид работа (т.е. няколко бази код), в крайна сметка дори може да стартирате няколко различни машини работник, които са оптимизирани за всеки вид работа (въпреки, че се движи далеч от "генерично работник "идеята). Винаги се опитваме да мислим за бъдещето, когато разработват системи, кратко визия план може да доведе до дългосрочен план чувство на неудовлетвореност и увеличаване на времето за развитие.
Работа Сървър
Ние ще трябва някъде да контролират нашата работа от това трябва да бъде единствената система във вашата мрежа, който има постоянен Resource Locator, е, че милион IP адрес, името на хоста, URL (с помощта на вътрешен DNS) и т.н. Това е така, защото работниците трябва да знаете къде да търсите за работни места, работниците трябва да се намери работа на системата за контрол (не е система за контрол на работа намеря работниците).
Работата самия сървър не наистина сложна задача (в основната система, така или иначе), тя трябва да съхранява списък на работни места, раздават работни места, получаване на резултати, и впоследствие да ги съхранява за по-късно извличане. Как се определят тези части (като "страна, работни места") може да бъде най-основните. Късно нататък можем да се разшири системата да включва интерфейс за администрация, да добавяте, редактирате, изтривате, да спре работни места, но това е извън това упражнение.
Няма причина, каквато и след това, че работата на вашия сървър не може да бъде виртуална машина в рамките на основната обработка на сървъра, при условие че не се източва твърде много ресурси от него. Сървъра работа обаче се нуждае от висока достъпност, ако тя отива надолу в петък вечер, ти започваш да се загуби цял уикенд на обработка, потенциално ви струва няколко седмици, стойността на времето за обработка (в сравнение с основната си преработка сървър сам) . Може да искате да разгледа пускането си на работа сървър на натоварване балансирана среда за висока достъпност.
Basic Setup
Основните настройки за нашата работа сървър ще се състои от какво Обаждам се на един от моите Limp сървъри (която е Li Nux, M ySql, P HP) . Код, работещ върху работниците на Теа, действително ще работи, какви работни места може да работи, като взаимодейства с бази данни за работа на системата за контрол. Късно бихме могли да създаде уеб услуги и всъщност раздават работни места, отколкото работниците твърдия себе си работа, но за сега ние ще продължим с помощта на KISS принцип (Дръжте го прости, глупави!) .
Така че, нека създаде три MySQL таблици, за да се справят с работни места. 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
Както бе посочено по-рано, работниците ще направим всичко управление на работа за нас, за сега, така че всички ние наистина трябва да направите, е да намерите работа, която се нуждае за обработка и да получите информация. Как ще правим това? Ами вземете нашите критерии за подбор на работа и търсят работа в SQL направих следното:
- Вземете всички работни места, които не са маркирани като завършен, но от нашите работник и да ги възстановите (заместител __ME__ с идентификатор, най-лесният ще бъде IP адрес):
UPDATE "работни места" SET "статут" = 0, където "статут" = 1 и "started_by" = __ME__;
- Използването на нашите критерии за избор на работа, изберете работа и кажете на системата за контрол, че този работник се занимава с него:
UPDATE "работни места", "статут" = 1, "started_by" = __ME__: started_at "= NOW () КЪДЕ" статут "= 0 или
("Статут" = 1 и "started_at"> DATE_SUB (NOW (), интервал X час)) ORDER BY `ID ASC; Като вземете работни места, които не са се върнали резултати в размер X на време, ние гарантираме, че всички работни места се изпълняват в случай на работник, който след срив или ще несигурен.
- След това взимаме детайли работни места, последвани от самите записи:
SELECT * ОТ "работни места", когато "started_by" = __ME__ LIMIT 1;
SELECT * ОТ "job_records" КЪДЕ "ID" = __JOBID__;
След приключване на работа ние вмъквате резултат нашите записи и маркирате работа като пълно. Не забравяйте, като заетостта може да доведе до преустановяване / възобновяване по всяко време да се даде възможност за някои стабилността в скрипта ви. То може да бъде, че задачата спира половина начин, чрез осъвременяване на системата за контрол на работата, така че проверка на броя на записите в работа и броя на резултатите, записани на система за контрол на работата ще бъде мъдър ход.
В допълнение, а това показва, колко работни места могат да бъдат избрани и управлявани от една SQL заявка рамка, ти трябва наистина да бъде абстрахиране контрол на работата, така че ако сте решили да преминат към използване на уеб услуги, базирана система файл, XML , или всяка друга брой на инсталациите няма да повлияе на кода по-горе.
Работа Конфигурация
Следващият аспект е да се помисли работа размери и конфигурация. Играейки с конфигурация на работа, ние можем да постигнат отличен баланс между скорост, процеса на репликация, и надеждност. Вземете OFA няколко сценарии
- Работа 1 ден всеки да тече: Това означава, че вашите работници се нуждаят от 15 дни за обработка на всяко едно работно място (не забравяйте 10% от мощността за 2/3rds на време ). Това очевидно не е мъдър конфигурация, вашата работа размер е твърде голям! Това ще отнеме най-малко двойно време, за да получите преработен работа първоначалната работник трябва да отиде несигурен време да вземете, че не е върнал резултат плюс време за преработка на отработено гориво. В един идеален искате да има поне един пълен работа, лесно се изчиства от края на всеки един продължителен период на престой, по този начин да запази работни места, тиктака и в най-лошия случай работа ще отнеме два дни на процес, трябва първо да отида липсва.
- Работа вземат 1 минута, за да се изпълнява: Това означава, че работниците си да отнеме около 15 минути, за да стартирате всяка работа. Въпреки това първоначално може да изглежда идеално, да получат допълнителна обработка работа по време на обяд път, кафе-паузи, срещи и др.., Този сценарий поставя натиск върху други области на вашата система и въвежда собствените си проблеми. Например, на първо място настройка / коефициент на времето за обработка ще отиде чак, поради загуба на ефективността на системата. Вашата мрежа ще бъде постоянно стрийминг работа информация за различните работници разочароващ персонал, които са донг им ден на ден работа. Вие също така ще се сложи повече щам на вашия сървър за обработка на работа, тъй като трябва да ястие много и много малки парчета на работа на регулярна основа. На последно място, в тази ситуация, ако работата ви сървър върви надолу, започваш да се създаде огромен влезете обратно на недовършена работа като има предвид, по-големи работни места може да продължи обработка на блажено неведение, че работата сървър изпитва трудности.
В действителност няма да има никой идеалната конфигурация за настройка на вашата мрежа, много зависи от наличните ресурси, видове работа, изисквания за работа, време за изпълнение, мрежови възможности, и така нататък. Въпреки това някои насоки ще бъдат:
- Размер на работни места, така че всеки работник може да получи чрез поне 3-4 работни места в период от 15 часа (най-дългата вероятно празен период от време)
- Играйте с размер на работа, така че време за настройка става сравнително незначителни в сравнение с времето за обработка (като се има предвид горната точка).
- Ако работата не завърши в двоен размер на време (може би по-малко), които очакват да завършат приемем, че си отиде несигурен и започнете да го обработка с друг работник. Това означава, че може да се наложи да изчакате до три пъти нормалната продължителност на работа за нея, за да завърши (вероятно по-дълъг, ако последващата работа се провали). Може да искате да се намали това време, но бъдете внимателни да не го намали прекалено много, тъй като може да започне дублиране на задачи за обработка на регулярна основа.
- Работни места трябва да са независими от външни изисквания, колкото е възможно повече. Работата сървър, например, трябва да се свърже в началото и края на всяка работа.
- Да не се насити вашата мрежа, това ще има две отрицателни реакции през деня, вашият персонал ще откриете, че използването на мрежата разочароващ и проблеми може да бъде опит с връзки, времето проблем, че само ще се влоши, тъй като мащабирате вашата мрежа.
- Осигуряване на работни места може да работи на вашия работници. Ако работни места стават твърде памет интензивно или дисково пространство интензивни работни места ще започне да се прекъсват, и единственото нещо,, което ще забележите е спад в броя на работните места, които се обработват без реална причина, защо.
Подаване Резултати на работа
При представянето на резултатите от работа, е важно да се провери, че резултатите не са били подадени от друг работник, особено ако работникът е бил в латентно състояние за известно време.
Когато резултатите са представили се гарантира, че броят на резултатите съвпада с броя на записите в рамките на работа.
Както е посочено по-рано, и не може да бъде над подчерта, изграждане на толерантност към грешки в работата извличане и представяне на резултатите. На работниците (и най-вероятно ще) в режим за спиране на най-неудобната пъти и това трябва да се обслужват. Също така отново абстрахиране далеч резултатите си представяне ще се погрижат за бъдещи промени вашата система за контрол на работата много по-лесно да се справят с.
Обобщение
В това section ние сме разглеждали какво трябва да направи сървър за контрол на работа и как да се получи един много основен система, създадена. Ние обсъдихме как да извлечете работа от системата за контрол и най-добрия начин за конфигуриране на работни места, за да получите най-ни за вашата система офис мрежа. За да приключите, параграф или два за подаване на резултатите обратно към сървъра за контрол на работа.
- А сървър за контрол на работата управлява работни места и гарантира, че всички работни единици са завършени
- Чрез абстрахиране работата си изберете / резултати подаване можем да променим технологията на сървъра за управление без много проблеми
- Конфигуриране на вашите работни места, за да се гарантира, че те се стартират бързо и ефективно, без да излагат на твърде голям натиск върху мрежовата си инфраструктура, и без дублиране на задачи за обработка на регулярна основа.
- Уверете се, че изграждането на отказоустойчивост и checking грешка във вашите рутинни, работниците могат да спира и възобновява и най-неудобната пъти. Не забравяйте да проверите, ако резултатите вече са подадени от друг работник.
Следващия път
В част 3 ние ще създадем виртуална машина за обработка и нашите прозорци машини, за да стане празен работно време.