Введення
Я працюю в компанії, де ми запускаємо багато робочих місць, пакетна обробка мільйони записів даних кожен день, і я думав недавно про всі машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей, я буду дивитися на потенційні вигоди від використання офісу сітки використання віртуалізованих середовищах.
У частині 1 я дав огляд системи і технології, я буду використовувати, а також обговорили деякі з потенційних причин, чому ви хотіли б створити офіс сітки.
Керування завданнями
Якщо ви збираєтеся бути запущений робочі місця, то ви будете мати потребу, якимось чином управляти ними. Ваше завдання системи управління (на вашу роботу сервера) повинен бути дуже добре продумані, перш ніж навіть намагатися запустити офіс сітки. Так по-перше, які завдання для системи управління завданнями:
- Роздайте робочих місць на вимогу робітників
- Скажіть робочим, який тип запуску завдань
- Трек робочих місць
- Переконайтеся, що робочі місця запускати тільки один раз
- Забезпечити роботу цих працівників, або хоча б сказати їм, де його отримати
Крім того, система повинна бути розширюваної, який діє на даний момент в рамках однієї справи може бути продовжений до запуску кількох типів робочих місць, як бізнес бачить себе в сітці рішення. Наприклад, робочі місця можуть отримати пріоритети, більше ніж один тип завдання можуть існувати (тобто кілька баз код), у результаті ви можете навіть запустити кілька різних машин працівника, які оптимізовані для кожного типу завдання (хоча це ніяк відійти від "загального працівника "ідея). Завжди прагніть думати про майбутнє, при розробці системи, коротке бачення строк може призвести до довгостроковій перспективі розчарування і збільшення часу розвитку.
Робота сервера
Ми збираємося потрібно десь контролювати свої робочі місця з, це повинна бути єдина система у вашій сітці, яка має фіксовану локатор ресурсу, будь то IP-адресу, ім'я хоста, URL-адреса (з використанням внутрішнього DNS) і т.д. Це відбувається тому, що робітники повинні знати, де шукати роботу, працівникам необхідно знайти систему управління завданнями (не система управління завданнями знайти працівників).
Роботи самого сервера насправді не складне завдання (у базовій системі чи інакше), він повинен зберігати список завдань, роздавати робочі місця, отримувати результати, а потім зберігати їх для подальшого використання. Як ці частини (наприклад, "роздавати робочі місця") визначаються може бути дуже простий. Пізніше ми можемо розширити системи включають адміністративний інтерфейс для додавання, редагування, видалення, призупинити роботу, але це виходить за цю вправу.
Існує ніяких підстав, те, що ваша робота сервера не може бути віртуальна машина працює протягом вашого основного сервера обробки умови, що вона не зливає воду занадто багато ресурсів з нього. Роботу сервера однак потребує високої доступності, якщо він йде вниз, у п'ятницю ввечері ви будете втрачати всі вихідні обробки, потенційно варто Вам пару тижнів вартує часу обробки (в порівнянні з вашою основною сервер обробки поодинці) . Ви можете хотіти розглянути питання про створення вашій роботі сервера з балансуванням навантаження середовища для забезпечення високої доступності.
Основні налаштування
Базові налаштування для нашої роботи сервера буде складатися з того, що я дзвоню одному з моїх LIMP серверів (тобто Li ммк, м ySql, Р л.с.). Код, що виконується на працівників Теа дійсно працюватиме, які роботи він може працювати, взаємодіючи з роботою баз даних системи управління. Пізніше ми могли б створити веб-сервіс і фактично роздавати робочі місця замість того, робочі роблять важку роботу самі, але зараз ми будемо продовжувати використовувати 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 WHERE `статус` = 1 AND `started_by` = __ME__;
- Використовуючи наші критерії роботи вибору, виберіть роботу і сказати системі управління, що цей працівник має справу з ним:
UPDATE `роботи` SET `статус` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `статус` = 0 АБО
(`Статус` = 1 AND `started_at`> DATE_SUB (NOW (), інтервал X ЧАС)) 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 ми створимо нашу віртуальну машину обробки і створили наші вікна машини, щоб стати часу простою працівників.