Введення
Я працюю в компанії, де ми запускаємо роботу пакетної обробки мільйонів записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цей набір статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованних середовищах.
У частині 1 я дав огляд системи і технології, я буду використовувати, а також обговорювалися деякі з потенційних причин, чому ви хотіли б створити офіс сітки.
Управління завданнями
Якщо ви збираєтеся бути запущений робочих місць, то ви будете мати потребу в якийсь спосіб керувати ними. Ваше завдання системи управління (на вашу роботу сервера) повинен бути дуже добре продумані, перш ніж навіть намагатися запустити офіс сітки. Так по-перше, які завдання для системи управління завданнями:
- Роздайте робочих місць на прохання працівників
- Скажіть, який тип працівників робочих місць для запуску
- Трек робочих місць
- Переконайтеся, що завдання виконуються тільки один раз
- Забезпечити роботу даних для працівників, або принаймні розповісти їм, де можна отримати її
Система також повинна бути розширюваної, рішення, яке працює зараз в одному випадку може бути збільшена до запуску кількох видів робіт, як бізнес бачить стоїть у сітці рішення. Наприклад, робочі місця можуть отримати пріоритети, більше ніж один тип завдання можуть існувати (тобто кілька баз код), в кінцевому підсумку ви навіть можете запустити кілька різних машин працівника, які оптимізовані для кожного типу завдання (хоча це ніяк відійти від "загального працівника "ідея). Завжди намагаюся думати про майбутнє при розробці системи, короткий перспективі може призвести до довгострокових розчарування і збільшення часу розвитку.
Робота сервера
Ми збираємося потрібно десь контролювати нашу роботу з, це має бути єдиною системою у сітку, яка має фіксовані локатор ресурсу, в тому, що адреса IP, ім'я хоста, адреса (з використанням внутрішнього DNS) і т.д. Це відбувається тому, працівники повинні знати, де шукати роботу, працівникам необхідно знайти роботу системи управління (не система управління завданнями знайти працівників).
Роботу самого сервера в дійсності не мають складну задачу (до основного або інакше система), він повинен зберігати список завдань, роздавати робочі місця, отримувати результати, а потім зберігати їх для подальшого використання. Як ці частини (наприклад, "руку Джобса) визначено може бути дуже простий. Пізніше ми можемо розширити системи включають адміністративний інтерфейс для додавання, редагування, видалення, призупинити роботу, але це виходить за цю роботу.
Існує ніяких підстав, то, що ваша робота сервера не може бути віртуальна машина працює у вашій основний сервер обробки за умови, що не зливає воду занадто багато ресурсів з нього. Роботу сервера проте потребує високої доступності, якщо вона йде вниз у п'ятницю ввечері ви будете втрачати все вихідні обробки, потенційно коштувати вам пару тижнів вартує часу обробки (в порівнянні з вашою основною сервер обробки поодинці) . Ви можете розглянути питання про створення роботу сервера з балансуванням навантаження середовища для забезпечення високої доступності.
Основна настройка
Основні установки для нашої роботи сервера буде складатися з того, що я дзвоню одному з моїх серверів LIMP (тобто Li NUX, м ySql, Р к.с.). Код, що виконується на Thea працівників дійсно працюватиме, які роботи він може працювати, взаємодіючи з роботою баз даних системи управління. Пізніше ми могли б створити веб-сервіс і фактично роздає робочі місця замість того, працівники робити важку роботу самі, але зараз ми будемо продовжувати використовувати принцип KISS (Keep It Simple, Stupid!).
Таким чином, дозволяє створити три MySQL таблиць для вирішення робочих місць. Це будуть робочі місця ``, `jobRecords`, і `jobResults`.
Тут я використовую SQL Buddy великий невеликий альтернатива PhpMyAdmin тільки тому, що її легше встановити на CentOS (для інших див.: 10 кращих альтернатив PhpMyAdmin )
Ця таблиця складається з 5 простих полів,
- ID: Унікально визначити роботу
- Назва: Чи може бути клієнтом посилання, або будь-яку кількість інших ідентифікаторів
- Статус: Ви повинні знати, де робота на, наприклад,
- 0: Не виконано
- 1: Взяв
- 2: Завершено
- started_by: Хто почав робити цю роботу? Це не зовсім потрібно, але приємно мати. Я пропоную відстеження робочих по їх IP-адреси в мережі
- started_at: Коли працівник почати роботу? За відстеження робочих місць, які ще не завершені протягом X кількість разів, коли ми знаємо, що необхідно підібрати роботу ще раз і почати обробку інший працівник. Робітники могли зупинити обробку / переходу в автономний режим для будь-якого числа причин, збій харчування, збій, втрата мережі і т.д.
Легко, як ця таблиця може бути розширена за рахунок кількох додаткових полів, щоб для відстеження статистики, колонки закінчити вчасно, щоб побачити, як довго роботу взяли, лічильник щоб дізнатися, скільки робочих взяв роботу (очевидно, це необхідно, як правило, 1), пріоритет завдання, список можна продовжувати і продовжувати. У більш складних сценаріїв роботи можна було б вказати, скільки пам'яті працівник буде необхідний доступ до (і, отже, використовувати тільки відповідні робочі), або навіть якийсь тип працівника не потрібно.
Давайте додамо кілька робочих місць, наприклад:
У наступній таблиці знову досить простий для розуміння, це наші записи роботу. Вони пов'язані з основною таблиці робочих місць колонки `jobs_id`. Зробити з цієї таблиці дуже багато що залежить від даних, які необхідно надати, щоб ваші працівники, дозволяє зробити дуже простий приклад, коли у нас є чотири стовпці:
- ID: ідентифікатор запису
- Назва: ім'я особи
- адреса: адреса особи
- jobs_id: ідентифікатор завдання, що цей запис пов'язана з
Третій і фінальний стіл складається з таблиці результатів, він так само становлять, як наші записи таблиці, а з додаванням деяких стовпців може бути частиною таблиці записів:
- job_record_id: Посилання результат роботи таблиці
- Результат: результат даних
... І це все, що потрібно для управління завданнями! (Хоча на самому базовому рівні) У моєму випадку я вказав на інший стіл, де мої дані, щоб процес був розташований, але це може так само легко було файлу, параметри для запуску моделювання коду, то ім'я його.
Вибір роботи
Як зазначалося раніше, робітники будуть робити свою роботу управління для нас зараз, так що все, що потрібно, щоб дійсно зробити, це знайти роботу, яка повинна обробки та отримання інформації. Як би ми це зробити? Ну забрати наші критерії вибору роботи і шукати роботу, в SQL я зробив наступні:
- Візьміть будь-яку роботу, які не позначені як повне, але від нашого працівника і скинути (замінити __ME__ з ідентифікатором, простий б IP-адреса):
UPDATE `роботу` SET `статус` = 0, де `статус` = 1 і `started_by` = __ME__;
- Використовуючи наші критерії вибору роботи, вибрати роботу і сказати системі управління, що цей працівник має справу з ним:
UPDATE `роботу` SET `статус` = 1, "started_by` = __ME__, `started_at` = NOW () WHERE `статус` = 0 або
(`Статус` = 1 і `started_at`> DATE_SUB (NOW (), інтервалі х ЧАС)) ORDER BY `ID` ASC;
За захвату робочих місць, які не повернулися результати в X кількість часу ми гарантуємо, що всі роботи виконуються у разі збою або працівник буде самоволку.
- Наступна захопити робочих місць подробиці слідують самі записи:
SELECT * FROM `роботу` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `ID` = __JOBID__;
Після завершення роботи ми вставляємо наш результат запису і Марк роботу в якості повною. Пам'ятаєте, як робота може призупинити / відновити в будь-який час забезпечити певну стійкість у сценарії. Цілком ймовірно, що завдання призупиняє на половині шляху оновлення системи управління завданнями, тому перевірка кількості записів в роботу і число результатів збережені в системі управління роботою буде мудрим кроком.
Крім того, в той час як це показано, як робочі місця можуть бути вибрані і управляється з SQL-запиту кадр, який ви повинні дійсно бути абстрагування вашій роботі управління, так що якщо ви вирішили перейти до використання веб-сервісів, файл на основі системи, XML , або будь-який інший кількість систем не вплине на код вище.
Робота конфігурації
Наступний аспект для розгляду є розмір робочих місць і конфігурації. Граючи з роботи конфігурації ми можемо вдарити чудовий баланс між швидкістю, процес реплікації, і надійність. Візьміть пару оператора А сценаріїв:
- Вакансії приймати по 1 день кожен для запуску: Це означає, що працівникам необхідно 15 днів для обробки кожного завдання (пам'ятаєте 10% потужності для 2/3rds часу). Це, очевидно, не мудрим конфігурації, ваша робота розмір занадто великий! Було б прийняти принаймні вдвічі більше часу, щоб отримати роботу повинні оброблятися початковій працівника піти самоволку (час, щоб забрати, що він не повернувся результаті переробки плюс час). В ідеалі потрібно мати хоча б один повний робочий легко очищаються від кінця кожного періоду тривалого простою, таким чином ви зберегти робочі місця цокання більше, а в гіршому випадку робота займе два дні, щоб процес повинен спочатку піти зниклими без вісті.
- Вакансії приймати від 1 хвилини до запуску: Це означає, що ваші працівники займе близько 15 хвилин для виконання кожного завдання. Хоча це може спочатку здатися ідеальною, ви отримуєте додаткову обробку роботи під час обіду, кава-брейки, нарад і т.д. цей сценарій ставить навантаження на інші галузі системи і вводить свої власні проблеми. Наприклад, в першу чергу Налаштуйте / час обробки співвідношення буде йти прямо, тому втрати ефективності системи. Ваша мережа буде постійно потокової роботи з інформацією різних робочих засмучує співробітників, які дон своїй повсякденній роботі. Ви також збирається приділяти більше навантаження на сервер обробки завдань, як він повинен блюдо з багато-багато маленьких шматочків роботи на регулярній основі. Нарешті, у цій ситуації, якщо ваша робота сервер недоступний ви збираєтеся створити величезний тому журнал незавершених робіт у той час як більше робочих місць може продовження обробки у блаженному невіданні, що робота сервера, що зазнають труднощі.
Насправді не буде одного ідеального конфігурація для установки сітки, багато що залежить від наявних ресурсів, типу роботи, роботи час обробки вимог, можливість роботи в мережі, і так далі. Однак деякі керівні принципи будуть:
- Розмір роботу так, щоб кожен працівник може отримати принаймні через 3-4 робочих місць протягом 15 годин (довга імовірність простою період часу)
- Грати з роботою розмір так, що час установки стає досить незначним в порівнянні з обробкою час (маючи на увазі вище точки).
- Якщо робота не завершується в два рази більше часу (може бути менше) ви очікуєте, що для завершення його вважати, що його пішли самоволку і почати його обробку з іншим працівником. Це означає, що ви, можливо, доведеться чекати до трьох разів нормальна довжина роботу для завершення (можливо, й довше, якщо наступна робота не вдається). Ви можете скоротити цей час, але будьте обережні, щоб не зменшити його занадто багато, як ви можете почати дублювання завдань обробки на регулярній основі.
- Вакансії повинні бути незалежні від зовнішніх вимог як можна більше. Роботу сервера, наприклад, повинні бути тільки зв'язалися на початку і в кінці кожного завдання.
- Не наситити вашої мережі, це буде мати два негативних ефектів, ваш денний персонал знайти використанням мережі розчарування і проблеми можуть виникнути з підключенням по тайм-ауту, що проблема буде тільки погіршуватися, як ви масштабування сітки.
- Забезпечити робочі місця можуть працювати на ваших працівників. Якщо роботи занадто великий обсяг пам'яті або дискового простору інтенсивної роботи почнуться переривання і тільки, що ви помітите це крапля в число робочих місць оброблені без реальних причин.
Представлення результатів роботи
При подачі результати роботи важливо, щоб перевірити, що результати не були представлені на іншого працівника, особливо якщо поточний робітник був заморожений протягом деякого часу.
Коли результати були забезпечити, щоб кількість результатів матчів кількість записів в роботу.
Як зазначалося раніше, і не може бути більш підкреслив, будувати відмовостійкості в пошуку роботи та результати подання. Працівники можуть (і швидше за все) переходять в режим очікування в самий невідповідний раз, і це повинно бути задовольняються за. Також ще раз абстрагування від ваших результатів подання допоможе задовольнити майбутні зміни в системі управління завданнями набагато легше мати справу з.
Резюме
У цьому section ми дивилися на те, що сервер управління завданнями потрібно зробити і як отримати дуже простою установкою системи. Ми обговорили, як отримати роботу з системою управління і як краще побудувати роботу, щоб отримати більшість наших вашої системи сітки офісу. Щоб закінчити, параграф або два щодо відправки результати назад на сервер управління завданнями була представлена.
- Сервер управління роботою керує робочих місць і гарантує, що всі роботи будуть завершені одиниць
- За абстрагування вашої роботи виберіть / результати подання ми можемо змінити технологію управління сервером без особливих проблеми
- Налаштування робочих місць для забезпечення того, щоб вони працюють швидко і ефективно, не піддаючи занадто багато тиску на мережеву інфраструктуру, і без дублювання завдань обробки на регулярній основі.
- Переконайтеся, що ви будуєте відмовостійкості і помилки checking у вашій процедури, працівники можуть призупинити і відновити і самий незручний разів. Не забудьте перевірити, якщо результати вже були представлені іншим працівником.
Наступний раз
У частині 3 ми створимо наш віртуальний машина для обробки і створення нашого вікна машини, щоб стати часу простою працівників.