Динамически добавлять страницы в 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 вечера

Введение

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

As a PHP developer I'm going to use tools that I use each day namely, Linux, mySQL , PHP, VirtualBox and subversion (SVN). However I hope this guide will adapt to other languages and technologies just as well.

The solution I provide will be very loosely based on the type of processing we'd need to achieve however this may not be true through the entire article as I'll change things for simplicity, or to produce more interesting usage scenarios.

These virtualised environments will run on windows machines since this is what the majority of offices run. The processing that the office machines do should not interfere with staff using those machines, should require no maintenance at the machine, and be easily deployable to new machines as they become available. Also, new virtual machines should not require any additional configuration as this greatly reduces the scalability and ease at which the grid system can be extended.

Why Deploy an Office Computing Grid?

Firstly you may be thinking,why not just use a cloud computing resource such as Amazon's EC2 platform ? Well the reasons could be several, for example:

  • You won't entrust certain data to a cloud computing environment
  • You can't put certain data into a cloud computing environment for legal reasons (eg data leaving the country), potentially for legal reasons, eg NHS records.
  • You want to keep your processing units close and have full control over the hardware too
  • You don't have the project funds to run cloud instances
  • Your office doesn't have a connection to the internet and therefore its not possible to use a cloud resource
  • You don't like rain, clouds suggest rain, therefore you keep well away

I'm sure the list could continue, but I think that's enough for now.

Advantages of an Office Computing Grid

Well, lets do some maths (and in true physics style lets make some sweeping assumptions). Imagine you have big beefy processing server running 100 jobs per day. In your office you have 50 machines which are idle 16 hours a day, each of these machines is 10% as powerful as your beefy processing sever. (All results here are rounded to underestimate performance increase).

So, 1 machine * 10% power * 2/3 time = 0.067 ie 1 desktop processing in idle time could process 6 full jobs per day .

If you now scale this up it takes 15 idle desktops to process as many jobs per day as your main processing server does.

So in our pretend office of 50 machines we could increase our processing power from 1 server up to 4 full processing servers , or we could be processing 400 jobs per day instead of 100.

Notice, for no investment in new hardware your company has just increased its batch processing capacity 4 times ! Potentially you're going to increase your power usage but from most office environments I've been to machines are generally left on overnight anyway, so you could see this as a green initiative.

Other advantages also mean that investment in new (or updated) processing servers can be delayed if your office machines are sufficient and that as you improve the power of your office machines your office grid becomes more powerful automatically.

Технологии

What you need? (or more correctly what did I use):

  • Idle office machines (in my case a spare old windows XP laptop)
  • VirtualBox (or another virtualisation client software)
  • A virtual machine with PHP, mySQL running running a cut down OS, I'm calling these my LiMP servers :)
  • Jobs to run
  • Job server (can be another virtual machine somewhere)

Typical Jobs

The types of jobs that this system is designed to run is as follows:

  • System receives a list of data upon which we need to match and return results
  • Matching involves checking/searching several (fairly static) data sources
  • Results from data sources may require further validation, merging, checking of additional data sources in response to results
  • Data is returned with matching records, fully validated and processed
  • Each record within a job is independent of the rest

So basically we're looking at running jobs which require a mixture of database lookups and some number crunching, a fairly typical scenario in a business environment.

Grid solutions are not only advantageous for processing jobs of this type. Basically, any process which can be split into independent units can be run in parallel. See this wikipedia for examples and more information: Grid Computing , but a couple of famous examples are Seti@Home and BIONC . There are frameworks for running computing grids, and these are well worth looking into.

What will we achieve?

By the end of these articles I hope to show that deploying an office grid need not be hugely expensive or time consuming. I'm going to discuss:

  • Setting up the job control system, job configuration
  • Creating an appropriate processing virtual machine
  • How to setup the system on a windows machine
  • Ensuring you are using the latest code and data
  • Deployment and benchmarking
  • Looking ahead

Я буду дома (хорошо, я построил, то написал) пример приложения для проверки концепции, на локальном компьютере в Windows XP и мой "GridMachine" виртуальной машины. Моя работа серверный элемент управления будет моей основной машиной, которая работает Fedora 11 .

Это никоим образом не означало, чтобы продемонстрировать полностью рабочий надежные системы, ее значило больше, демонстрации и обсуждения показывают, что эти вещи могут быть достигнуты в достаточно сжатые сроки и с минимальными затратами. Пожалуйста, не стесняйтесь, присылайте мне любые замечания, исправления и улучшения, и я сделаю все возможное, чтобы сохранить эту статью обновления, чтобы соответствовать.

Следующий раз

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

Управление Grid Computing с помощью Virtual среды - Часть 2

По , в пятницу 4 декабря 2009 11:23 вечера

Введение

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

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

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

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

  • Раздайте работу по просьбе рабочих
  • Скажите рабочим, какой тип запуска заданий
  • Трек рабочих мест
  • Убедитесь, что задания выполняются только один раз
  • Обеспечить работу данных работников, или по крайней мере, сказать им, где его получить

Кроме того, система должна быть расширяемой, решение, которое работает сейчас в одном случае может быть продлен до запуска нескольких видов работ, как бизнес видит себя в сетке решение. Например, работа может получить приоритеты, более чем одного типа задания может существовать (то есть несколько баз кода), в конце концов вы даже можете запускать несколько разных машин работника, которые оптимизированы для каждого вида работы (хотя это никак отойти от "общего работника "Идея). Всегда стараюсь думать о будущем, при разработке системы, короткое видение термина может привести к долгосрочной фрустрации и увеличение времени разработки.

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

Мы собираемся где-то нужно контролировать нашу работу с, это должна быть единственная система в вашей сети, которая имеет фиксированный локатор ресурса, будь то IP-адрес, имя хоста, адрес (с использованием внутреннего DNS) и т.д. Это происходит потому, что рабочие должны знать, где искать работу, работникам необходимо найти систему управления заданиями (не система управления заданиями найти работников).

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

Basic Setup

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table 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:

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. Вакансии занять от 1 минуты до запуска: Это означает, что ваши работники займет около 15 минут для выполнения каждого задания. Хотя это может поначалу показаться идеальной, вы получаете дополнительную обработку работе во время обеда, кофе-брейки, встречи и т.д. этот сценарий ставит нагрузку на другие области системы и вводит свои собственные проблемы. Например, в первую очередь ваши настройки / время обработки соотношение будет идти прямо, поэтому потери эффективности системы. Ваша сеть будет постоянно потокового работы информации различных рабочих расстраивает сотрудников, которые дон их повседневной работе. Вы также собирается уделять больше нагрузка на сервера обработки заданий, как он должен блюдо из много-много маленьких кусочков работу на регулярной основе. Наконец, в этой ситуации, если ваша работа сервер выходит из строя, вы собираетесь создать огромное бревно обратно незавершенного работы в то время как больше рабочих мест могли бы, продолжали обработку в блаженном неведении о том, что работа сервера, испытывающих трудности.

На самом деле там будет некому идеальной конфигурации для настройки сети, многое зависит от имеющихся ресурсов, видов работы, должностных требований затрат времени, возможность работы в сети, и так далее. Тем не менее некоторые рекомендации будут:

  • Размер работу так, чтобы каждый работник может пройти как минимум 3-4 рабочих мест в течение 15 часов (вероятно, самый длинный период простоя времени)
  • Играть с работой размер так, чтобы настройка времени становится незначительным по сравнению с обработкой времени (с учетом выше точки).
  • Если работа не была завершена в два раза больше времени (может быть меньше), Вы ожидаете, чтобы завершить его предполагается, что его ушли в самоволку и начать ее обработку с другим работником. Это означает, что вы, возможно, придется ждать до трех раз нормальная продолжительность работы его завершения (возможно, и дольше, если последующая работа не удается). Вы можете сократить это время, но будьте осторожны, чтобы не уменьшить его слишком много, как вы можете начать дублирование задач обработки на регулярной основе.
  • Вакансии должны быть независимы от внешних требований, насколько это возможно. Работа сервера, например, должны быть контакты в начале и в конце каждой работы.
  • Не насытить вашей сети, это будет иметь два отрицательных эффекта, ваш дневной персонал найти с помощью сети разочарование и проблемы могут возникнуть с подключением время ожидания, что проблема будет только хуже, как вы масштабирования сети.
  • Обеспечить рабочие места могут работать на ваших работников. Если работа стала слишком большой объем памяти или дискового пространства интенсивная работа начнется прерывание и единственное, что вы заметите это капля в число рабочих мест, обрабатываются никакой реальной причины, почему.

Представление результатов работы

При подаче результатов работы важно, чтобы убедиться, что результаты не были представлены на другого работника, особенно если текущий рабочий был заморожен на некоторое время.

Когда результаты представлены убедиться, что ряд результатов, совпадает с количеством записей в работу.

Как отмечалось ранее, и не может быть переоценить, построить отказоустойчивости в поиск работы и результаты представления. Работники могут (и, скорее всего, будет) переходят в режим ожидания в самый неподходящий раз, и это должно быть обслужены. Также еще раз абстрагируясь от ваших результатов представление поможет удовлетворить будущие изменения в работу системы управления гораздо проще иметь дело.

Резюме

В этом section мы смотрели на то, что сервер управления заданиями нужно сделать и как получить очень простой системой настройки. Мы обсуждали, как получить работу в системе управления, и как лучше настроить рабочие места, чтобы получить большинство наших вашей системы сетки офиса. Чтобы закончить, один-два абзаца о представлении результатов на сервер управления заданиями была представлена.

  • Сервер управления работой управляет заданиями и гарантирует, что все работы будут завершены единиц
  • Абстрагируясь работу выбрать / результаты представления, мы можем изменить технологию управления сервером без особых проблемы
  • Настройка рабочих мест, чтобы они работают быстро и эффективно, не подвергая слишком много давления на сетевую инфраструктуру, и без дублирования задач обработки на регулярной основе.
  • 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 вечера

Введение

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. Таким образом,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Развертывание

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Стоп!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













Panorama Theme by Themocracy

7 visitors online now
5 guests, 2 bots, 0 members
Max visitors today: 11 at 06:30 am UTC
This month: 16 at 01-05-2012 01:02 pm UTC
This year: 69 at 27-02-2012 09:56 am UTC
All time: 130 at 28-03-2011 10:40 pm UTC