Динамічно додавати сторінки в Zend_Navigation контейнер під час виконання

За , четвер 7 січня 2010 10:50 вечора

У продовження на мій останній пост про Zend_Navigation, направляти запити на sitemap.xml звичаєм контролер / дію , цей пост про dymnamically додавання сторінки Zend_Navigation контейнер під час виконання / виконання скрипта.

Його все добре зазначенням сторінок в INI або XML- файл, але в якийсь момент вам доведеться зміни сторінок на вашому сайті, що ви хочете включити в меню, карти сайту, або бути включені в ваш пройденого шляху. Тому те, що нам потрібно зробити, це додати сторінках нашого Zend_Navigation контейнер під час виконання. Приклади для цього було б в додавання новин, блогів або сторінок коментарів, і т.д.

Продовжити читання "динамічно додавати сторінки в Zend_Navigation контейнер під час виконання" »

Маршрут запитів для sitemap.xml звичаєм контролер / дію

За , в середу 6 січня 2010 12:13 ранку

Для того, щоб прямі запити / sitemap.xml для користувацьких контролера і дії в Zend Framework, додаток просто додайте наступне в вашому application.ini або альтернативного конфігураційного файлу (наприклад, я використовую navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = індекс
 resources.router.routes.sitemap.defaults.action = Карта сайту

Приклад коду для виводу можна побачити, створюючи дій у відповідних контролерів (наприклад, моя карта знаходиться в індексі контролер, карта дії):

 < PHP
 Клас IndexController
     розширює Zend_Controller_Action
 {
     / **
      * Надає карта сайту на основі Zend_Navigation установки
      * /
     громадських sitemapAction функції ()
     {
    	 echo $ це-> Вид-> навігація () -> Карта сайту ();
    	 $ Це-> Вид-> розкладка () -> disableLayout ();
    	 $ Це-> _helper-> ViewRenderer-> setNoRender (правда);
     }
 }

Sitemaps може швидко і легко бути створений за допомогою Zend_Navigation , великий інструкція (і взагалі дуже корисна для Zend Framework підручники) є Zend виливки - Динамічне створення меню сайту і панірувальні сухарі .

Zend Framework для кожного модуля на основі параметрів

За , в п'ятницю 1 січня 2010 10:40 вечора

Я створив наступних на цей пост, який вимагає менше конфігурації, див модуль на основі макета - Zend Framework .

При використанні Zend Framework, за допомогою модуля, його очевидним, що якщо ви працюєте з різними (суб-) сайти з однієї програми не обов'язково хочуть того ж, сценарії розкладка для кожної частини. Я вирішив піти з наступною структурою сайту:

  / Застосування
     / Контролери
         ...
     / Моделі
     / Модулів
         / По замовчуванню
             / Контролери
             / Розташування
                 / Скрипти
             / Переглядів
                 / Скрипти
         / AnotherModule
             ...
     / Скрипти

Проблема створення макета скрипти для кожного модуля. Відповідь прийшла через використання дій помічника. Налаштування розкладки на кожного модуля включає в себе три етапи:

  1. Application.ini (або аналогічні налаштування конфігурації):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / адміністратор / макети / скрипти"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / за замовчуванням / макети / скрипти"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ модулів / учасників / макети / скрипти"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ модулі / філії / макети / скрипти" 
  2. Створіть дії Helper:
      <? PHP
     / **
      * Встановлює розташування на шляху кожного модуля
      *
      * @ Автор Ллойд Уоткін <lloyd@evilprofessor.co.uk>
      * @ С 2010-01-01
      * /
     Клас Pro_Controller_Action_Helper_SetLayoutPath
         розширює Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Набори розташування шлях, заснований на модулі
          * /
         громадських preDispatch функції ()
         {
        	 Модуль $ = $ це-> GetRequest () -> getModuleName ();
    
    	     якщо ($ завантаження = $ це-> getActionController ()
    	                        -> GetInvokeArg ('завантаження')) {
    
    	         $ = $ Конфігурації завантаження-> getOptions ();
    
    	         якщо (Ісеть ($ CONFIG [$ модуль] ['ресурси'] ['схема'] ['layoutPath'])) {
    	             $ = LayoutPath
    	                  $ CONFIG [$ модуль] ['ресурси'] ['схема'] ['layoutPath'];
    	             $ Це-> getActionController ()
    	                  -> GetHelper («розташування»)
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. І, нарешті boostrap помічник дії:
      ...
         / **
          * Встановлює розташування скриптів на кожного модуля
          * /
         захищена функція _initLayoutHelper ()
    	 {
    	     $ Це-> завантаження ('FrontController');
    	     $ = Розташування Zend_Controller_Action_HelperBroker :: addHelper (
    	         новий Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Доктрина: DATETIME за замовчуванням NOW ()

За , в середу 30 грудня 2009 6:30 вечора

Я боровся зі створення схеми бази даних для нової Zend Framework, проект. Я використання намагаються використовувати доктрину ОРЗ для моєї моделі бази даних. Мені потрібно, щоб створити схему так, щоб він дозволив мені встановити дату і час за умовчанням для `` дати стовпця, наприклад, при додаванні нового повідомлення я отримую поточний час. Після довгих пошуків та експериментів я знайшов рішення, тому я ділю її.

У вашій схемі YAML файл, просто виконайте наступні дії:

 Повідомлення:
   ActAs:
     Timestampable:
       створено:
         Назва: created_at
         Тип: мітки
         Формат: Ymd H: I: S
       оновлення:
         Назва: last_updated
         Тип: мітки
         Формат: Ymd H: I: S
   стовпців:
     ID:
       Тип: ціле
       первинна: ​​істинний
       автоінкремент: істинний
     Назва: рядок (255)
     електронна пошта: рядок (300)
     повідомлення: рядок (2000)

Якщо, з іншого боку, ви не хочете `` updated_at колонки можна використовувати наступні:

 Повідомлення:
   ActAs:
     Timestampable:
       створено:
         Назва: created_at
         Тип: мітки
         Формат: Ymd H: I: S
       оновлення:
         інвалідів: істинний
   стовпців:
     ID:
       Тип: ціле
       первинна: ​​істинний
       автоінкремент: істинний
     Назва: рядок (255)
     електронна пошта: рядок (300)
     повідомлення: рядок (2000)

PHP Design Patterns - спостерігач шаблон

За , вівторка 29 грудня 2009 10:02 вечора

Я читав Head First Design Patterns недавно і вирішили написати кілька моделей, як PHP, приклади для мого власного блага. Перше, що я вирішив код на це спостерігач шаблон . Формальне визначення шаблону спостерігача є:

Спостерігач шаблоном (підмножина асинхронних публікації / підписки модель ) є програмним забезпеченням шаблон дизайну , в якому об'єкт , званий предмет, зберігає список своїх утриманців, називається спостерігачами, і повідомляє їх автоматично будь-яких змін стану, як правило, по телефону один з їх методів . Він в основному використовується для реалізації розподілених систем обробки подій.

Як системи стають все більш слабо пов'язані переконавшись, що, коли подія відбувається у всіх системах, які вимагають знання про ці оновлення повідомляється. Наприклад, в блозі, після збереження поста ми, можливо, буде потрібно оновлення пошукової системи (наприклад Lucene), оновити нашу карту сайту, теги, по електронній пошті підписки користувачів, і т.д. спостерігача картина дозволяє розробникам додавати слухачів, не редагуючи їх спостережуваного об'єкта . Вводячи спостерігачів (наприклад, пошукової системи оновлення спостерігача, генератор карти сайту і т.д.) в предмет (наприклад, повідомлення в блозі редагування системи) ми можемо дозволити, щоб виконати всі необхідні оновлення без будь-яких змін.

Продовжити читання "PHP Design Patterns - Observer Pattern '»

Управління Grid Computing за допомогою Virtual середовища - Частина 4

За , в п'ятницю 4 грудня 2009 11:59 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетну обробку мільйонів записів даних кожен день, і я думав останнім часом про всіх машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованих середовищах.

У частині 3 ми створили віртуальну машину обробки та налаштування вікна машини, щоб стати часу простою працівників.

Запуск останньої версії коду

Неминуче після створення робочих бізнес-логіка не зміниться, помилки будуть знайдені швидше, більш ефективний код буде проводитися в результаті чого ваші працівники сиділи обробки даних, використовуючи старі смердючі код . Як же ми гарантуємо, що ми завжди використовували новітня і найкраща версія нашого сценарії обробки?

Є кілька дуже простих способів легко ми могли б це зробити, як треба, однак, полягає в скороченні потужностей та мережевого трафіку в досягненні цієї мети. Почнемо з найпростіших рішень і покращити її повільно, протягом пари ітерацій.

Перший метод був би просто підключитися до нашої роботи серверних елементів управління (через Samba, FTP, або аналогічні) і опустіть останню версію коду. Не дуже ефективний, але він буде робити цю роботу. Дозволяє поліпшити, що декілька, як про створення Rsync сценарій і використанні, що кожен раз, а? Крім того, що про введення наших останніх обробка сценарію в підривній перевірити код спочатку, а потім просто оновлюємо наш код при кожному запуску ( запускали )?

Зрештою, ми могли б у кінцевому підсумку за допомогою сценарію Баш (викликається крон кожні 10 хвилин), який виглядає так просто, як це:

  #! / Бен / ш
 PS якщо сокира | Grep-V Grep | Grep PHP > / Dev / нуль
 потім
     відлуння "Робота в даний час обробки, вихід"
 ще
     echo "Робота не працює, почніть прямо зараз"
     кд / шлях / до / робітник / копія
     запускали
     PHP yourJobProcessingScript.php
 Fi 

Тепер ми можемо бути впевнені, що з кожним запуском ми безумовно встановлена ​​остання версія коду. Ми забезпечення цього, оновлення нашої бази коду кожного разу, коли ми виконуємо перспективі і зниження мережевого трафіку тільки передачі файлу відмінностей між нашою мережі.

У моїй демонстраційної установки, я зробив саме так, як вище. Subversion був встановлений на моєму сервері обробки роботу, і я просто натиснув на останній код від "працівника філії з допомогою" запускали ". Я також додав тег версії в моїй обробці сценарію, який був повернутий в базу даних як частини на результат. Таким чином, я міг бачити, що мій код оновлюється кожного разу, коли я скопіював мій стовбур в те відділення працівника, що я точно встановлена ​​остання обробка сценарію.

Використовуючи останні дані

Якщо ваша робота обробка дозволяє використовувати джерела даних, то в якийсь момент вони будуть оновлені. Якщо ви називаєте джерел даних на основі дуже рідко ви збираєтеся затопити мережі з трафіком, як тільки ваші працівники почнуть виконуватися чого все в глухий кут. Для мого рішення, я вирішив, що я хотів би перенести джерел даних приблизно з мою віртуальних машин.

Тримайте ви коні там! Що робити, якщо джерела даних величезно? Ну це насправді йде про те, скільки даних може йти мова? Це може бути більш економічно ефективним, щоб встановити додатковий жорсткий диск більшого в кожній машині, ніж покупка додаткового сервера обробки. Це питання бюджету і до бізнес-рішення. Це, може бути, джерела даних настільки великий, що його просто неможливим зберегти цей обсяг даних в ваших машинах працівника. В такому разі, що б ви зробили? Ну, ми могли дивитися на виклик локальний сервер дані, але це може викликати проблеми з мережею. В цьому випадку сітка системи, так як це може стати нереальним включити в офісі. Він також може бути те, що ви можете подивитися в альтернативних стратегій роботи, наприклад, тільки зателефонувавши в робочі між 8 вечора і 6 ранку щоночі і / або регулювання джерела даних запитів.

Переходячи дозволяє сказати, що наші джерела даних складає 100 ГБ даних. Ну та це зовсім небагато даних, щоб переміщатися по мережі на оновлення. Як би ми гарантуємо, що у нас є остання копія даних в цьому випадку? Rsync можливість, але особисто я думаю, що, запустивши останнє джерело даних на сервері обробки завдань та налаштування, як майстер реплікації (з приємним довгим журналу бін), може бути шлях:

Реплікація При установці кожного з ваших робочих в якості рабів для роботи поновлення серверних елементів керування до джерел даних буде сочитися вниз красиво ваших працівників без величезного збільшення мережевої активності (тобто, якщо ви виконуєте величезну оновлення даних, і всі ваші робочі удар в відразу). Це має переваги в порівнянні з Rsync в тому, що ви не отримаєте довгу паузу перед кожній роботі; як оновлення бази даних, MySQL демона на ваш працівник буде постійно оновлювати свої дані, а обробка триває.

Це, як мені налаштувати сервер демонстрації. Щоб налаштувати реплікацію я дотримувався керівництво на сайті MySQL ( настройка реплікації ) і протягом 20 хвилин у мене був робочий Початкове тиражування управління роботою серверів даних. Для кожного додаткового працівника налаштування реплікації і процес працює кожен раз, коли VM була скопійована.

Резюме

У цій частині статті ми розглянули, як легко і безболісно це зберегти ваш код обробки до теперішнього часу using Rsync або subverion (SVN), щоб зробити роботу і зменшити мережевий трафік, в той же time. Ми також обговорили, яким чином зберегти ваші дані у джерелі інформації до сучасних, дозволяючи їй стекти, щоб кожен з ваших працівників. Таким чином, площа забезпечення, що ми в ногу з бізнес-логікою та інформації в нашій системі, мережі офісу. Там, очевидно, буде незліченні альтернативи виконанню цих завдань, але ось два простих прикладу, щоб показати, наскільки легко це рішення знайти.

Наступний раз

У заключній частині цієї серії, влучно назвав Частина 5 , ми будемо обговорювати розгортання цієї системи. Я буду резюмувати, що було вивчено і те, що мені вдалося створити.

Управління Grid Computing за допомогою Virtual середовища - Частина 3

За , в п'ятницю 4 грудня 2009 11:37 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетну обробку мільйонів записів даних кожен день, і я думав останнім часом про всіх машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованих середовищах.

У частині 2 ми розглянули роботу сервер буде працювати, як і робочі місця повинні бути налаштовані для досягнення найбільшої кількості обробки в той час як забезпечення кожного завдання обробляються в обов'язковому порядку.

Налаштування робочого - чи LIMP сервер

Наступним кроком у цьому процесі полягає в налагодженні віртуальних робітників. Для цього я буду використовувати установки CentOS використанням VirtualBox. Я збираюся встановити MySQL і PHP на сервері, також відомий як LIMP (Li ммк, м ySQL, P л.с.) Сервера (я, можливо, зробили це ім'я вгору).

  • Установка VirtualBox на комп'ютері Windows (слід посилання)
  • Завантажити та встановити CentOS (поточна версія 5.3) в межах створюваних віртуальних машин

Там немає сенсу мені буде це там, напевно, 1000-х велика підручників там (ну гаразд, ось ще один: створення та Managing CentOS віртуальній машині під VirtualBox ). Важливо зазначити, я думаю, що я назвав свою віртуальну машину GridMachine.

Що стосується мого вибору віртуалізації клієнтів і операційною системою туди не таке вже велике вагомих причин для кожного варіанту. VirtualBox є те, що я використовую на моєму домашньому комп'ютері і за підтримки трьох основних операційних систем. Я вибрав CentOS як його добре стабільна ОС, і я використовую його на своєму власному веб-сервері. Я дуже вірю в правильні інструменти для роботи (хоча я подаю заяву "використовувати найшвидший і простий для вас менталітет тут), тому, якщо операційна система X працює ваш код швидше і більш ефективно використовувати його :)

Важливо переконатися, що ваша VM використовує DHCP, в іншому випадку для кожної нової віртуальної машини повинні бути налаштовані окремо, то, що ми не want.By за допомогою DHCP нам не потрібні налаштування мережевих параметрів індивідуально для робочих машин, DHCP вручить з IP-адрес для вас. Тому ви можете скопіювати ваші віртуальні машини по кабінету, не піклуючись про встановлення кожного вгору (це покращує масштабованість і знижує працівник адміністрації).

Процес, який ви повинні прагнути до досягнення б отримати нові фізичні машини, установки VirtualBox, а потім в значній мірі розгорнути віртуальний образ, не більш того. Це може бути мудрим, щоб налаштувати всі ваші працівники в іншій підмережі, щоб можна було по крайней мере, дізнатися, скільки машин працює. Вам також необхідно налаштувати машини на довгострокову оренду або необмежену оренди DHCP.

Як запустити завдання на робочий

Це цікавий напрям, і є кілька обгрунтованих методів для обробки завдань на працівника. Тут я просто обговорити два найбільш очевидних:

  • Постійно працює сценарій: сценарій, будь то скрипт або скрипт PHP виконується один раз на працівника і працює як частина нескінченного циклу. Я цей метод дисконтованих як один крах сценарію і, можливо, ваші працівники перестануть працювати без якогось втручання.
  • Cron на основі виконання скрипта: кожні х хвилин крон демон стартує дзвінок на ваш сценарій, щоб отримати речі, що йдуть. Без будь-якого контролю це може привести до багато багато копій хід сценарію працівника.

Моє рішення було піти з хрон який стартує скрипт кожні 10 minutes.Â Мій скрипт виконує наступні задачі:

  1. Отримати список процесів і grep, це для "PHP". Якщо не знайдений, то продовжити.
  2. Зверніться до роботи коду, в моєму випадку це було б щось PHP заснований
  3. Працівник скрипт завершує свій біг
  4. Готові йти знову на наступний відповідний виклик

Моє Баш скрипт виглядає приблизно так:

  #! / Бен / ш
 PS якщо сокира | Grep-V GREP | GREP PHP> / Dev / нуль
 потім
     відлуння "Робота в даний час обробки, вихід"
 ще
     echo "Робота не працює, почніть прямо зараз"
     PHP yourJobProcessingScript.php
 Fi 

Примітка: відлуння майже повністю безглуздим, але може допомогти наступний людина, яка приходить, щоб спробувати змінити їх.

На цьому ми завершуємо настройки робочого віртуальної машини, швидко, просто і легко копіювати в кожну нову частину обладнання, яке отримано. "Розум" в підвісній системі насправді не візуалізується ОС, її все робити з кодом, створений, щоб процес роботи, роботи конфігурації, а в тому, щоб завдання виконується в разі необхідності (наприклад, коли господар знаходиться в режимі очікування ).

Налаштування Windows, для ініціалізації робочих

Першим завданням є вироблення команди, необхідні для запуску віртуальної машини з командного рядка Windows. Якщо ви встановили VirtualBox в папку за замовчуванням, і ви назвали ваш робочий GridMachine то команда вимагає, щоб завантажити ваш працівник:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Однак, щоб запустити сценарій в "обезголовлений" держави ми повинні використовувати:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe» startvm GridMachine - VRDP = викл 

Це призведе до запуску віртуальної машини без графічного інтерфейсу і дозволяє йому зберігати стан витончено. Другий аргумент вимикається RDP, так що не суперечить вікна RDP, або дати вам повідомлення про те, слухає порт 3389. Ім'я віртуальної машини з урахуванням регістру!

Далі, нам потрібно встановити вікна до стартує наш працівник В.М. раз машина була простою. Для цього (на Windows XP) вам необхідно перейти Пуск -> Всі програми -> Стандартні -> Службові -> Призначені завдання, як показано нижче:

запланованих завдань

Потім натисніть на "Додати завдання" слід переглянути додати користувальницькі програми. Перейдіть до VBoxManage сценарій і натисніть кнопку ОК. Розклад вашим завданням для будь-якого з варіантів (ми змінимо це в хвилину) і продовжити. Після пропуску наступному екрані вікна будуть просити вас, хто ви хочете запустити цю задачу, я пропоную або "Адміністратор" або створення нового привілейованого користувача. Пам'ятайте, що ми не хочемо втручатися у стандартній облікового запису співробітників на машині в будь-який момент. Натисніть кнопку Далі, щоб перевірити шоу додаткові опції для цього завдання.

До кінця виконання текстового додамо рядок 'startvm GridMachine і забезпечення, які працюють тільки тоді, коли увійшли в систему залишається дану опцію. Відвідайте наступний графік завдання і змінити графік опуститися до опцію "в режимі очікування, вибрати кількість часу, ви хочете машину сидіти склавши руки, перш ніж перейти до наступного закладці.

Нарешті прибрати галочку опції в якому говориться, зупинити задачу, якщо вона вже працює певна кількість часу, але не відзначте опцію, щоб зупинити задачу, якщо машина не простоює.

розклад

Ось тоді для установки вікон господар!

Резюме

У цій частині ми створили віртуальну машину для роботи в якості працівника, а також те, як ми називаємо, і виконувати наші сценарії обробки завдань (для себе сценарій PHP). Тут ми розглянемо, як налаштувати наші копії вікна для запуску віртуальної машини в обезголовлений режим, коли комп'ютер стає вільною, і зберегти свій стан, коли користувач відновлює використання машини. Сподіваюся, в цей момент ви бачите, як просто створити таку систему і сверблять, щоб отримати деякі експерименти збираєтеся самі!

Наступний раз

В частині 4 ми розглянемо, як використовувати інструменти, щоб переконатися, що ви використовуєте останню версію коду і джерела даних, так що отримані результати є завжди сучасними з останніми бізнес-інформації і логіку.

Управління Grid Computing за допомогою Virtual середовища - Частина 1

За , у п'ятницю 4 грудня 2009 11:23 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетну обробку мільйонів записів даних кожен день, і я думав останнім часом про всіх машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованих середовищах.

В PHP розробник я збираюся використовувати інструменти, які я використовую кожен день, а саме, Linux, MySQL , PHP, VirtualBox та Subversion (SVN). Однак я сподіваюся, що це керівництво буде адаптуватися до інших мов і технологій так само добре.

Рішення, яке я інформація буде дуже слабо в залежності від типу обробки ми повинні досягти, проте це не може бути правдою по всій статті, я щось змінити, для простоти, або для отримання більш цікавих варіантів використання.

Ці віртуалізованих середовищах, працюватиме на комп'ютерах з Windows, це те, що більшість офісів бігти. Обробки, офісної техніки, не повинні заважати співробітникам використовувати ці машини, повинні не вимагають обслуговування в машину, і бути легко адаптується до нових машин, оскільки вони стають доступними. Крім того, нові віртуальні машини не вимагає яких-небудь додаткових налаштувань, так як це значно знижує масштабованість і легкість, з якою підвісна система може бути розширена.

Чому Розгортання Грід бюро обчислювальної?

По-перше, ви можете подумати, чому б не використовувати ресурси хмарних обчислень, таких як платформи EC2 від Amazon ? Ну, причин може бути декілька, наприклад:

  • Ви не будете довіряти деяким даними в середовищі хмарних обчислень
  • Ви не можете помістити певні дані в середовищі хмарних обчислень з юридичних причин (наприклад, дані з країни), що може з юридичних причин, наприклад, NHS записів.
  • Ви хочете, щоб ваша апаратура обробки закрити і мати повний контроль над апаратним занадто
  • У вас немає коштів проекту для запуску хмара випадках
  • Ваш офіс не має підключення до Інтернету, і тому його не можна використовувати хмара ресурсів
  • Ви не любите дощ, хмари запропонувати дощ, тому ви тримаєте подалі

Я впевнений, що цей список можна продовжувати, але я думаю, що це достатньо.

Переваги Grid Computing офісу

Ну, давайте робити деякі математики (і в істинному стилі фізики дозволяє зробити кілька широких припущеннях). Уявіть, у вас є великий м'ясистий сервер обробки працює 100 робочих місць на день. В офісі у вас є 50 машин, які простоюють по 16 годин на день, кожна з цих машин становить 10%, як потужний, як ваш міцний розірвати обробки. (Усі результати тут округлюються до недооцінювати збільшення продуктивності).

Так, 1 машина * 10% потужності * 2/3 часу = 0,067 тобто 1 робочий стіл обробка в режимі часу може обробляти 6 повних робочих місць на день.

Якщо ви тепер масштабуються до цього він займає 15 простоюють робочі станції для обробки, як багато робочих місць в день в якості основного сервера обробки робить.

Таким чином, в нашому офісі роблять вигляд 50 машин ми можемо збільшити наші потужності процесора від 1 сервера до 4 повних серверів обробки, або ми могли б обробки 400 робочих місць в день замість 100.

Зауважте, не для інвестицій в нове обладнання Ваша компанія тільки збільшив свій пакет переробних потужностей в 4 рази! Потенційно ви збираєтеся збільшити споживання енергії, але в більшості офісів Я був на машинах, як правило, залишається на ніч у будь-якому випадку, щоб ви могли бачити це як зелений ініціативу.

Інші переваги також означає, що інвестиції в новий (або оновлений) серверів обробки може бути відкладено, якщо ваша машина офісу достатньо, і як поліпшити харчування вашої машини офіс офіс мережі стає все більш потужним автоматично.

Технології

Що вам потрібно? (Або, вірніше те, що я використовував):

  • Idle офісне обладнання (в моєму випадку запасний старі вікна XP ноутбук)
  • VirtualBox (або іншого програмного забезпечення для віртуалізації клієнтів)
  • Віртуальна машина з PHP, MySQL running працює урізана ОС, я називаю це моєю LIMP серверів :)
  • Вакансії для запуску
  • Робота сервера (може бути інший віртуальній машині десь)

Типові Вакансії

Видів робіт, що ця система призначена для роботи виглядає наступним чином:

  • Система отримує список даних, на яких ми повинні відповідати і повертати результати
  • Відповідні включає перевірку / пошуку декілька (досить статичний) джерел даних
  • Результати з джерел даних можуть знадобитися додаткові перевірки, зливаючись, перевірка додаткових джерел даних у відповідь на результати
  • Дані повертаються з відповідними записами, повністю перевірені і оброблені
  • Кожен запис в роботі не залежить від інших

Тому в основному ми дивимося на виконуваних завдань, які вимагають суміш пошук в базі даних і деякого числа хрускіт, досить типовий сценарій в бізнес-середовищі.

Сітка рішення не тільки вигідно для обробки робочих місць такого типу. В принципі, будь-який процес, який може бути розділений на незалежні блоки можуть виконуватися паралельно. Див цей Вікіпедії приклади і більш детальну інформацію: Grid Computing , але пару відомих прикладів Seti @ Home і BIONC . Є рамки для виконання обчислювальних мереж, і це також заслуговує вивчення.

Що ж ми досягли?

До кінця цих статтях я сподіваюся показати, що розгортання мережі офісу не повинні бути дуже дорогими, або часу. Я збираюся обговорити наступні питання:

  • Налаштування системи управління завданнями, робота конфігурації
  • Створення відповідної обробки віртуальної машини
  • Як налаштувати систему на машині вікна
  • Забезпечення ви використовуєте останню версію коду і даних
  • Розгортання та тестування
  • Заглядаючи вперед

Я буду вдома (добре, я збудував, то написав) приклад програми для перевірки концепції, на локальному комп'ютері в Windows XP і мій "GridMachine" віртуальної машини. Моя робота серверний елемент управління буде моєю основною машиною, яка працює Fedora 11 .

Це жодним чином не означало, щоб продемонструвати повністю робочий надійні системи, її означало більше, демонстрації та обговорення показують, що ці речі можуть бути досягнуті в досить стислі терміни і з мінімальними витратами. Будь ласка, не соромтеся, надсилайте мені будь-які зауваження, виправлення і поліпшення, і я зроблю все можливе, щоб зберегти цю статтю оновлення, щоб відповідати.

Наступний раз

У частині 2 я почну, дивлячись на системи управління роботою, і вивчити, як робочі місця повинні бути налаштовані для досягнення найбільшої кількості обробки в той час як забезпечення кожного завдання обробляються в обов'язковому порядку.

Управління Grid Computing за допомогою Virtual середовища - Частина 2

За , у п'ятницю 4 грудня 2009 11:23 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетну обробку мільйонів записів даних кожен день, і я думав останнім часом про всіх машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованих середовищах.

В частині 1 я дав огляд системи та технології, я буду використовувати, а також обговорили деякі з можливих причин, чому ви хочете створити офіс мережі.

Управління завданнями

Якщо ви збираєтеся бути запущена робота, то ви будете мати потребу в якійсь мірі керувати ними. Ваша задача системи управління (на роботу сервера) повинен бути дуже добре продумана ще до спроби запуску офісу сітки. Отже, по-перше, які завдання для системи управління завданнями:

  • Роздайте роботу на прохання робочих
  • Скажіть робочим, який тип запуску завдань
  • Трек робочих місць
  • Переконайтеся, що завдання виконуються тільки один раз
  • Забезпечити роботу цих працівників, або принаймні, сказати їм, де його отримати

Крім того, система повинна бути розширюваною, рішення, яке працює зараз в одному випадку може бути продовжений до запуску декількох видів робіт, як бізнес бачить себе в сітці рішення. Наприклад, робота може отримати пріоритети, більш ніж одного типу завдання може існувати (тобто кілька баз коду), в кінці кінців ви навіть можете запускати кілька різних машин працівника, які оптимізовані для кожного виду роботи (хоча це ніяк відійти від "загального працівника "Ідея). Завжди намагаюся думати про майбутнє, при розробці системи, коротке бачення терміна може привести до довгострокової фрустрації і збільшення часу розробки.

Робота сервера

Ми збираємося десь потрібно контролювати нашу роботу с, це повинна бути єдина система у вашій мережі, яка має фіксований локатор ресурсу, будь то IP-адресу, ім'я хоста, адреса (з використанням внутрішнього DNS) і т.д. Це відбувається тому, що робітники повинні знати, де шукати роботу, працівникам необхідно знайти систему управління завданнями (не система управління завданнями знайти працівників).

Робота самого сервера насправді не є складним завданням (у базовій системі так чи інакше), він повинен зберігати список завдань, роздають роботу, отримати результати, а потім зберігати їх для подальшого використання. Як ці частини (наприклад, "роздавати робочі місця) визначаються може бути дуже простий. Надалі ми можемо розширити системи включають адміністративний інтерфейс для додавання, редагування, видалення, призупинити роботу, але це виходить за рамки цієї роботи.

Існує ніяких підстав, то, що ваша робота сервера не може бути віртуальна машина працює у вашій основний сервер обробки умови, що він не зливає воду занадто багато ресурсів з нього. Робота сервера однак це потрібна висока доступність, якщо вона йде вниз у п'ятницю ввечері ви будете втрачати всі вихідні обробки, потенційно варто Вам пару тижнів варто часу обробки (у порівнянні з вашою основною сервер обробки поодинці) . Ви можете розглянути питання про створення роботу сервера з балансуванням навантаження навколишнього середовища для забезпечення високої доступності.

Основні налаштування

Основні параметри для нашої роботи сервера буде складатися з того, що я дзвоню одному з моїх LIMP серверів (тобто Li ммк, м ySql, P л.с.). Код працює на робочих Теї дійсно буде працювати, які роботи він може працювати, взаємодіючи з роботою баз даних системи управління. Надалі ми могли б створити веб-сервіс і фактично роздавати робочі місця замість того, робочі роблять важку роботу самі, але зараз ми будемо продовжувати використовувати принцип KISS, (Keep It Simple, Stupid!).

Таким чином, дозволяє створити три MySQL таблиць для вирішення робочих місць. Це будуть робочі місця ``, `jobRecords` і `jobResults`.

робочі місця таблиці Тут я використовую SQL Buddy великий невеликий альтернатива PhpMyAdmin тільки тому, що її легше встановити на CentOS (для інших см.: 10 кращих альтернатив для PhpMyAdmin )

Ця таблиця складається з 5 простих полях,

  • ID: Унікально ідентифікувати роботу
  • Назва: Чи може бути номер клієнта, або будь-яку кількість інших ідентифікаторів
  • Статус: Ви повинні знати, де робота на, наприклад,
    • 0: Не почався
    • 1: Підібрав
    • 2: Завершено
  • started_by: Хто почав робити цю роботу? Це не зовсім обов'язково, але це добре, коли є. Я пропоную відстеження робочих по їх IP-адреса в мережі
  • started_at: Коли працівник почати роботу? Відстежуючи вакансії, які не завершені протягом певну кількість разів, коли ми знаємо, що потрібно підібрати роботу ще раз і почати обробку іншим працівником. 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:

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

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  1. Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
  2. Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.

In reality there will be no one ideal configuration for your grid setup, much depends on the available resources, types of job, job turnaround time requirements, network capability, and so on. However some guidelines would be:

  • Size jobs so that each worker can get through at least 3-4 jobs in a period of 15 hours (the longest likely idle time period)
  • Play with the job size so that setup time becomes fairly insignificant compared to the processing time (bearing in mind the above point).
  • If a job doesn't complete in double the amount of time (maybe less) you expect it to complete it assume that its gone AWOL and start processing it with another worker. This means you may have to wait up to three times the normal length of a job for it to complete (possibly longer if the subsequent job fails). You may want to reduce this time, but be careful not to reduce it too much as you may start duplicating processing tasks on a regular basis.
  • Jobs should be independent of outside requirements as much as possible. The job server, for example, should only be contacted at the start and end of every job.
  • Don't saturate your network, this will have two negative effects, your daytime staff will find using the network frustrating and problems may be experienced with connections timing out a problem that will only get worse as you scale your grid.
  • Ensure jobs can run on your workers. If jobs become too memory intensive or disk space intensive jobs will start aborting and the only thing you'll notice is a drop in number of jobs processed with no real reason why.

Submitting Results of a Job

When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.

When results are submitted ensure that the number of results matches the number of records within the job.

As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.

Summary

In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.

  • A job control server manages jobs and ensures that all work units are completed
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

Next time

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

Управління Grid Computing за допомогою Virtual середовища - Частина 5

За , в п'ятницю 4 грудня 2009 11:03 вечора

Введення

Я працюю в компанії, де ми запускаємо багато робочих місць, пакетну обробку мільйонів записів даних кожен день, і я думав останнім часом про всіх машинах, які сидять кожен день нічого не робити протягом декількох годин. Не було б добре, якщо ми могли б використовувати ці машини для зміцнення обчислювальної потужності наших систем? У цій серії статей я буду дивитися на потенційні вигоди від використання офісу сітки використанням віртуалізованих середовищах.

В частині 4 ми розглядали за допомогою інструментів, щоб гарантувати, що ми біжимо останню версію коду і джерела даних, так що отримані результати є завжди сучасними з останніми бізнес-інформації і логіку.

Перед розгортанням

До розгортання мережі системи, якщо є одна річ, ви робите, і одне тільки це тест поточної системи! Неважливо, що ви говорите колегам про те, скільки додаткової роботи вашої системи буде робити, якщо у вас є числа, щоб підтримати це ваш гарантії нічого. Таким чином,

  • скільки записів ви можете обробляти в даний час? У день? В годину?
  • Скільки часу зазвичай потрібно, щоб розвернутися на роботу?
  • Наскільки більше можливостей у вас є?

Там також додаткові питання:

  • Якщо ваш сервер обробки (або один із серверів обробки) падає як це вплине на ваші можливості, ви будете каліками?
  • Які переваги ви сподіваєтеся / очікуєте отримати від підвісної системи?
  • Ваші офісне обладнання може працювати робочі місця?
  • Ваші (або ви можете бути перетворені робочих місць) в wrok в цьому стилі працює?

Останнє велике діло в тому, щоб провести час будь-яких серйозних змін, як це. Оновлення обробки коду для роботи з використанням нової методології, тест знову. Можливо налаштувати обробку сервер для запуску віртуальної машини, в кінці кінців сервер обробки вашого буде просто ще один робітник (тільки дуже потужний відносно). Дайте новий процес врегулювання.

Розгортання

Моя пропозиція була б з'явитися в офісі один з вихідних днів виконувати всі установки і налаштування. Робіть це перед святом два тижні і піти, щоб інші бідолаха, щоб мати справу з наслідками ... може бути, не ...

Розгортання системи, як це має бути повільним. Незважаючи на цей час відносно простий в установці цієї системи вплине на всю інфраструктуру офісу (і цифровий). По-перше, розкачати на кілька машин одночасно, моніторинг мережевого трафіку, як працівник виконує хостів на день, в день основі. Можливо, вам доведеться змінити конфігурацію вашої роботи у відповідь на ваші висновки.

Після того як система оселився з декількома машинами (скажімо 10% всіх офісних машин, тобто 5) вести моніторинг мережевого трафіку і машині performance. Далі тест ще раз, тепер ви повинні бути обробки 33% більше робочих місць, ніж ваш перший тестів. Перевірте це так, або, що ви по крайней мере, в цьому футбольному полі. Якщо ні, з'ясувати, що відбувається, перш ніж рухатися далі. Повторіть цей цикл, поки ви з радістю все офісної техніки працює без вбивства індивідуальної роботи машини або подрібнення мережі в глухий кут.

У всі часи тримати порівняння, навіть після розгортання зроблені. Перевірте, як нові оновлення коду впливає на швидкість вашої системи, перевірте, всі працівники повідомляють в обробці і робочих місць. Поступово (дуже повільно) збільшує вашу роботу конфігурації, щоб отримати найкраще з ваших працівників та мережі.

Стоп!

Що робити, якщо ви хочете зупинити робітники працюють на деякий час? Вони всі там працює, регенеруючу, і з усіх сил намагаються обробляти дані, як голодні комахи. Відповідь може здатися очевидним, але його варто додати тільки у випадку, якщо його ігнорувати. Просто редагувати свої обробки сценаріїв з виходом (0) або die () або інші заяви, щоб вбити вашого завдання обробки. Однією з важливих причин, чому ми завжди намагаємося оновити до останньої обробки сценарію до того, як бігти!

Демонстрація системи

Для того, щоб написати це безліч коротких статей, які я створив дуже невелику мережу для демонстрації технологій та методологій. Я читав багато статей, навчальних посібників і використовувати різні інструменти для налаштування і моніторингу, що відбувається. Ні в якому разі я пішов і насичений цілий офіс з трафіком і при цьому я не мав доступ до регулярних співробітники PC бачити, як господар виконання яких вплинули.

Моя демонстраційна система була дійсно дуже скромний. Я використав свій звичайний робочий стіл налаштований як сервер управління завданнями. На цьому я встановив MySQL сервер встановлена ​​налаштований як майстер реплікації, PHP , а, SVN пов'язані через Apache (для доступу через робочий VM).

Потім я створив машину CentOS працівника на VirtualBox на 6-річний ноутбук Windows XP. Я налаштувати заплановані завдання, зазначені після копіювання віртуальної машини на машину і відпустити її.

Віртуальна машина була створена з PHP, підривної діяльності, і MySQL. Я перевірив філія під назвою «робочий» від моєї роботи репозиторія сервера управління і переконалися, що він може бути оновлений за допомогою "запускали". Потім я установка MySQL в якості раба і перевірити, що реплікація даних з MySQL на сервері керування роботою до робочого VM. Після всього цього мені встановити скрипт Баш і хрон.

Мій сценарій обробки в основному йшли по лінії цього (дуже прості речі):

  • Читайте в поле імені
  • Підраховували кількість подібних імен в таблицю з джерела даних проводиться на VM
  • Підраховували кількість імен, як і вище, але розщеплення ім'я простору (наприклад, ім'я, середній, прізвище)
  • Повторний процес в 1000 раз

Кожне завдання пішло близько 20 хвилин, щоб бігти. В один момент я відкрив кілька копій робочих VM на ноутбуці вікна і дивився на роботу перевіряти у кожного з адрес IP працівника. В цей момент я також підтвердив, що реплікація автоматично перезавантажений.

Залишивши ноутбук на холостому ходу в результаті працівник починає обробляти завдання з сервера управління завданнями. При поновленні використання ноутбука була затримка близько 30-60 секунд, це багато часу та персонал повинні бути обізнані, що їх машина може призупинити на деякий час, повертаючись до машини. Нові машини можуть не мати паузу так довго. Перевага обсяг обробки виконуються ці машини під час простою буде більше, ніж переважують співробітників чекаючи короткий термін (скажімо, 1 хвилину), прибувши на свої машини вранці (я часто чекати довше, ніж це для Windows Defender оновлення пройде), якщо вони були повідомлені про це (корисний час, щоб захопити ранкова кава!).

В цілому, я впевнений, що я продемонстрував технології, які можуть бути використані для створення такої системи. Я показав, що така система працює на (дуже) невеликих масштабах і ще кілька експериментів може бути розширений використовувати ресурси машини офісу. Якщо я не отримую до точки цьому я був би дуже цікаво знати / бачити, коли хтось інший.

Висновки / Оцінка

Наступним очевидним кроком було б насправді отримати реальний приклад і почати розгортання такої системи, як це в офісі і подивитися, що відбувається. Запитувана бізнесу до скоєння цього без сліду палаючого компанії, щоб довести ефективність технології і може бути трохи складніше. Сітка / Розподілені обчислення дуже популярна певних колах і має деякі великі додатки (BIONC, SETI @ Home, Folding @ Home і т.д.). Я, однак, не знайти і в менших масштабах і проста система, як це в моїх пошуках, які могли б бути розгорнута в офісі.

Я створив в основному вільні системи, використовуючи головним чином з відкритим вихідним кодом і інструменти, доступні практично в будь-якому офісі. Технології в основному показали і показують виступати і працювати, як очікувалося. Сподіваюся, у мене показує, що з не так багато роботи і дуже простий установки можна розгорнути обчислювальної мережі офісу система, потужний, дешевий, а і масштабованої все в той же час.

Після того, як система встановлена ​​і працює майже немає кінця на суму настройки та покращення, які ви можете зробити. Наприклад, статистика / тестування можуть бути легко додані показує цінність такій системі кожен день. Нові машини можуть бути додані швидко і легко, як і коли вони приходять з модернізації існуючого обладнання зміцнення вашої обчислювальної потужності.

Я сподіваюся, вам сподобалося читати цю серію статей і дав вам їжу для роздумів про запуск системи офісу сітки. Рішення, представлене тут, не обов'язково будуть працювати у всіх ситуаціях, але вони повинні бути адаптовані, щоб дозволити вам отримати обробка даних здійснюється за допомогою власного рішення.

Будь ласка, не соромтеся, надсилайте мені будь-які зауваження, виправлення і поліпшення, і я зроблю все можливе, щоб зберегти цю статтю оновлення, щоб відповідати.













Панорама Тема Themocracy

6 відвідувачів онлайн
3 guests, 3 bots, 0 members
Макс відвідувачів сьогодні: 11 в 12:22 ранку UTC
В цьому місяці: 45 в 24-04-2012 5:22 вечора UTC
У цьому році: 69 в 27-02-2012 9:56 UTC
За весь час: 130 в 28-03-2011 10:40 вечора UTC