Динамично добавяне на страници, за да Zend_Navigation контейнер по време на работа

От , четвъртък 7 януари 2010 г. 22:50

В продължение на последния ми пост за Zend_Navigation, маршрут искания за sitemap.xml обичай контролер / действие , този пост е за dymnamically добавяне на страници, за да Zend_Navigation контейнер при изпълнение по време на работа / скрипт.

Нейната добре, посочва на страниците си в една на INI или XML файл, но в един момент, че ще има смяна на страниците на вашия сайт, които искате като част от меню, карта на сайта, или да бъдат включени в галета пътека. Ето защо това, което ние трябва да направим, е да добавите страници, за да нашия Zend_Navigation контейнер по време на изпълнение. Примери за това би било в добавяне на елементи новини, блогове, или страница коментари и др.

Продължи четене "Динамично добавяне на страници, за да Zend_Navigation контейнер по време на изпълнение" »

На маршрутните искания за sitemap.xml за потребителски контролер / действие

От , сряда 6 януари 2010 12:13 ч.

За да преките искания / sitemap.xml към потребителски контролер и действия в прилагането на Рамковата Zend просто добавете следното в на вашата application.ini или алтернативен конфигурационен файл (например I използване 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 $ това-> View-> навигация () -> карта на сайта ();
    	 $ Това-> View-> Layout () -> disableLayout ();
    	 $ _helper-> ViewRenderer-> setNoRender (TRUE);
     }
 }

Sitemap за бързо и лесно може да се генерира, използвайки Zend_Navigation , е много бърза начинаещи (и като цяло много полезен за уроци Zend Framework) на Zend контейнерни - динамично създаване на меню карта на сайта и галета .

Zend Framework на модула базирани настройки

До , петък, 1 януари 2010 г. 22:40

Аз съм направил последващ този пост, който изисква по-малко конфигурация, моля, вижте модул базиран шаблон - Zend Framework .

Когато с помощта на Zend рамка с модули, е очевидно, че ако сте стартирали различни (под) сайтове извън същото заявление не непременно искате същите скриптове оформление, за всяка част. Реших да отида със следната структура на сайт:

  / Приложение
     / Контролери
         ...
     / Модели
     / Модули
         / По подразбиране
             / Контролери
             / Оформление
                 / Скриптове
             / Изгледи
                 / Скриптове
         / AnotherModule
             ...
     / Скриптове

Проблемът е създаването на оформлението скриптове на на модулен принцип. Отговорът дойде чрез използване на действие Helper. Създаване на структура на на модулен принцип, включва три стъпки:

  1. Application.ini (или подобна конфигурация, настройка):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ модули / admin / оформления / скриптове"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ модули / default / оформления / скриптове"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ модули / член / оформления / скриптове"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ модули / филиал / оформления / скриптове" 
  2. Създаване на вашия помощник за действие:
      <? PHP
     / **
      * Задава оформлението на пътя на на модулен принцип
      *
      * @ Автор Лойд Watkin <lloyd@evilprofessor.co.uk>
      * @ От 01.01.2010
      * /
     клас Pro_Controller_Action_Helper_SetLayoutPath
         разширява Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Комплекти за оформление път, на основата на модули
          * /
         публична функция preDispatch ()
         {
        	 $ Модул = $ това-> getRequest () -> getModuleName ();
    
    	     ако ($ Bootstrap = $ това-> getActionController ()
    	                        -> GetInvokeArg на (Bootstrap ")) {
    
    	         $ Довереник = $ Bootstrap-> getOptions ();
    
    	         ако (isset ($ довереник [модул] ['ресурси'] ['оформление'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Довереник [$ модул] ['ресурси'] ['оформление'] ['layoutPath "];
    	             $ Това-> getActionController ()
    	                  -> GetHelper на ("оформление")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. И накрая boostrap, помощник за действие:
      ...
         / **
          * Задава оформлението на скриптове на на модулен принцип
          * /
         защитена функция _initLayoutHelper ()
    	 {
    	     $ Това-> на Bootstrap ("frontController");
    	     $ Оформление = Zend_Controller_Action_HelperBroker :: addHelper (
    	         ново Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Учение: по подразбиране DATETIME NOW ()

До , сряда, 30 декември 2009 18:30

Съм се бори със създаването на схема на база данни за нов проект за рамкова Zend . Аз съм използване се опитват да използват доктрина ORM за моите модели бази данни. Имам нужда да се създаде схемата, така че това ми позволи да настроите по подразбиране дата и час за "DateTime" колона, например при добавяне на ново съобщение, което получите текущата клеймото. След много търсене и експериментиране намери решение, така че аз съм го споделят.

В схемата на YAML файла, просто направете следното:

 Съобщение:
   actAs:
     Timestampable:
       Създаден:
         име: created_at
         типово: клеймите на
         формат: Ymd H: I:
       Последна справка:
         име: last_updated
         типово: клеймите на
         формат: Ymd H: I:
   колони:
     ID:
       типово: цяло число
       първичен: истинска
       autoincrement: вярно
     име: низ (255)
     Email: низ (300)
     съобщение: низ (2000)

Ако от друга страна не искате "updated_at" колона, можете да използвате следното:

 Съобщение:
   actAs:
     Timestampable:
       Създаден:
         име: created_at
         типово: клеймите на
         формат: Ymd H: I:
       Последна справка:
         хората с увреждания: истинска
   колони:
     ID:
       типово: цяло число
       първичен: истинска
       autoincrement: вярно
     име: низ (255)
     Email: низ (300)
     съобщение: низ (2000)

PHP, дизайн модели - Наблюдател на образи

От , вторник, 29 декември 2009 г. 22:02

Аз бях четене Head First шаблони за дизайн в последно време и реших да напиша някои от моделите като PHP примери за моята собствена полза. Първият от тях, че реших да код е Observer Pattern . Формалното определение на наблюдателя модел е:

Наблюдателят модел (подмножество на асинхронен публикува / абонирате модел ) е софтуер за дизайн на модел, в които даден обект , наречен предмет, поддържа списък на издръжка от него, наречени наблюдатели и ги уведомява автоматично на всички държавни промени, обикновено като се обадите един от техните методи . Тя се използва главно за изпълнение на разпределени системи за обработка на събития.

Както системи стават по-свободно свързани като се уверите, че когато дадено събитие се случва на всички системи, които изискват познаване на тези актуализации да бъдат информирани. Например, един блог пост, след запазване на поста може да се наложи да актуализирате търсачки (напр. Lucene), актуализиране на нашите карта на сайта, етикети, имейл абонираните потребители и др. Наблюдател модел позволява на разработчиците да добавят допълнителни слушателите без да се редактира забележим обект . Чрез инжектиране на наблюдатели (т.е. търсачката актуализация наблюдател, генератор карта на сайта и др.) В обект (т.е. блог пост система за редактиране) можем да позволи на ИТ, за да извършва всички необходими актуализации без никакви промени.

Продължи четене "на PHP дизайн модели - Наблюдател на образи" »

Офис Grid Computing Виртуалните среди - част 4

От , петък 4 декември 2009 23:59

Въвеждане

Аз работя в компания, в която ще свършим много работни места за пакетна обработка на милиони записи на данни всеки ден и аз си мисля напоследък за всички машини, които седят около всеки ден правиш нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини, за да уплътнят процесорна мощ на нашите системи? В тази поредица от статии, аз ще разгледаме потенциалните ползи за наемане на офис мрежа с помощта на виртуализирани среди.

В част 3, ние създадохме нашата виртуална машина за обработка и настроите Windows машини, за да стане празен ход на непълно работно време.

Изпълнението на последното код

Неминуемо след създаването на бизнес логика работници ще се промени, бъгове, ще се намери по-бързо по-ефективно код ще се произвежда по този начин оставят работниците си седеше около обработка на данни с помощта на стари вонящ код . Как тогава да се уверим, че ние сме винаги да използвате най-новите и най-версия на нашите за обработка на скриптове?

Има няколко много лесно прости начини можем да направим това, трик, обаче, е да се намали процесорна мощ и мрежовия трафик за постигането на тази цел. Нека започнем с най-простите решения и да я подобрим бавно в продължение на няколко итерации.

Първият метод ще бъде просто да се свържете с нашия сървър за контрол на работата (чрез Samba, FTP или подобен) и дръпнете надолу най-новата версия на кода. Не е много ефективно, но ще си свършат работата. Да се ​​подобри от това, че до известна степен, какво ще кажеш за създаване на Rsync скрипт и използване, че всеки път, вместо? Като алтернатива, какво да кажем за пускането на най-новите ни обработка на скрипт в подривна дейност първоначално преглеждане на кода и след това просто актуализиране на нашите код на всеки цикъл ( SVN обновяване )?

В края на краищата можем да сложим край с скрипт Баш (наречена от Cron на всеки 10 минути), което изглежда толкова просто, тъй като това:

  #! / Хамбар / SH
 ако PS брадва | Впиши-V Впиши | Впиши PHP > / dev / нула
 след това
     Ехо "работа в момента преработка, излизане"
 още
     echo "работа не работи, да започне още сега"
     CD / път / до / работа / копие
     SVN актуализация
     PHP yourJobProcessingScript.php
 Fi 

Сега можем да бъдем сигурни, че с всеки цикъл Определено сме инсталирали последните код. Ние сме се погрижите това чрез актуализиране на нашия код база всеки път, когато се извършват план и намаляване на мрежовия трафик само с прехвърляне на файлове, различия в нашата мрежа.

В ми демонстрация настройка, аз направих точно както по-горе. Subversion е инсталирана на моя сървър за обработка на работа и аз просто издърпа последните кода от клон на "работник", с помощта на "SVN обновяване". Аз също добави етикет на номера на версията ми обработка на скрипт, който бе върнат в базата данни като част от резултатите от връщане. По този начин можех да видя, че моя код се актуализира всеки път, когато ми е копирала багажника на работник клон, т.е., че Определено бях инсталирали последните обработка скрипт.

Използване на най-новите данни

Ако вашата работа обработка прави използването на източници на данни след това в някакъв момент те ще да бъдат актуализирани. Освен ако не се обадите на вашия източници на данни върху много рядко, започваме да залеят мрежата с трафика, веднага след като вашите работници да започнат да се показват, постигането на всичко, за да застой. За моето решение аз реших, че бих искал да се движат около моите източници на данни с моите виртуални машини.

Задръжте сте коне там! Какво ще стане, ако моите източници на данни са огромни? Е, това наистина е случай на колко данни са говорим? То може да бъде по-рентабилно да инсталирате допълнителен по-голям твърд диск във всяка машина, не за закупуване на допълнителен сървър за обработка. Това е въпрос на бюджета и на бизнеса да реши. Това може би, че вашите източници на данни са толкова големи, че си просто невъзможно да се запази тази сума на данни във вашите работници машини. В такъв случай какво бихте направили? Ами ние може да изглежда да се обадите на локален сървър на данни, но това може да предизвика проблеми с мрежата. В този случай мрежата, тъй като това може да стане нереалистично да се включва във вашия офис среда. Той може да бъде, че можете да погледнете в областта на алтернативни стратегии, само за пример да се обадите на работници между 20:00 и 6 сутринта всяка вечер и / или Дроселиране искания източник на данни.

Преместване он ви позволява да кажем нашия източници на данни в размер на 100GB на данни. Ами да, това е доста малко на данни да се придвижват в мрежата на актуализация. Как бихме могли да сме сигурни, че имате последната версия на копие от данните в този случай? Rsync е възможност, но лично аз мисля, че като пуснете последното ви източник на данни на вашия сървър за обработка на работа и определяне на това като майстор в репликацията (с едно хубаво дълго дневник бин) може да бъде начин да отида:

копиране Чрез създаването на всеки един от работниците си като роб на работата актуализации на сървъра за управление на вашите източници на данни ще се стича добре на вашите работници без голямо увеличение на мрежова активност (това е, освен ако не изпълняват огромен актуализация на данни и всички ваши работници ритник в наведнъж). Това има предимства пред Rsync по това, че няма да получи дълга пауза преди всяка работа, като осъвременявания на базата данни MySQL демон на вашия работник постоянно ще актуализира своите данни, а обработването продължава.

Това е как да настроя моя демонстрация сървър. За да настроите до репликация Последвах ръководството на сайта на MySQL ( Създаване репликация ) и в рамките на 20 минути имахме inital работник, имитиране на контрол на работата на сървърите на набор от данни. За всеки допълнителен работник репликацията настройки и технологични работи всеки път, когато е преписан ВМ.

Обобщение

В този раздел на статията са се занимавали с колко лесно и безболезнено е да поддържате вашия код за обработка към днешна дата от using Rsync или subverion (SVN), за да вършат работа и да се намали мрежовия трафик по едно и също time. Ние също обсъждат как да поддържа данни за източник на информация в крак с времето, като позволява да достигнат до всеки един от вашите работници. По този начин ние област се гарантира, че ние продължаваме с бизнес логика и информацията в нашата система за офис мрежа. Има очевидно ще се безброй алтернативи на изпълнение на тези задачи, но тук са две прости примери, за да покаже колко лесно решение е да дойда.

Следващия път

В заключителната част на тази серия, уместно наречена част 5 , ние ще обсъдим внедряването на тази система. Ще обобщим, какво е научил и какво успя да създаде.

Офис Grid Computing Виртуалните среди - част 3

От , петък 4 декември 2009 23:37

Въвеждане

Аз работя в компания, в която ще свършим много работни места за пакетна обработка на милиони записи на данни всеки ден и аз си мисля напоследък за всички машини, които седят около всеки ден правиш нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини, за да уплътнят процесорна мощ на нашите системи? В тази поредица от статии, аз ще разгледаме потенциалните ползи за наемане на офис мрежа с помощта на виртуализирани среди.

В част 2 разгледахме работни места, сървър ще продължи, и колко работни места трябва да бъдат конфигурирани, за да се постигне най-голям размер на обработка, като същевременно се гарантира, че всяка работа се обработват без да се провалят.

Създаване на работник - или Limp сървър

Следващата стъпка в процеса е да се създаде виртуална работници. За това аз ще използвам едно инсталиране на CentOS, използващи VirtualBox. Отивам да инсталирате MySQL и PHP на сървъра, известен също като накуцване (Li Nux, ySQL m, P HP) на Server (I може да са направили това име нагоре).

  • Инсталирате VirtualBox на вашата машина с Windows (следвайте връзка)
  • Изтеглете и инсталирайте CentOS (текуща версия 5.3) в рамките на създадената виртуална машина

Няма смисъл да ме ще има вероятно и 1000 "от най-големите уроци там (ОК, ето едно: Създаване и Managing CentOS виртуална машина под VirtualBox ). Важното е да се отбележи, предполагам, че се обадих на моята виртуална машина GridMachine.

Що се отнася до избор на виртуализация клиент и операционна система отидете там не е голяма основателна причина, за всеки избор. VirtualBox е нещо, което аз използвам на моята домашна машина и се подкрепя от трите основни операционни системи. Избрах CentOS като добра стабилна операционна система и да го използвам на моя собствен уеб сървър. Аз съм голям вярващ в правилните инструменти за работа (въпреки че съм прилагане "се използва най-бързият и лесен за" манталитета тук), така че ако операционната система X работи кода си по-бързо и по-ефективно използване, че вместо да :)

Важно е да сте сигурни, че вашата VM използва DHCP, в противен случай за всяка нова виртуална машина, ще трябва да бъде конфигуриран отделно, което е нещо, което ние не want.By чрез DHCP, ние не трябва да конфигурирате мрежовите настройки поотделно за работник машини, DHCP ще предаде от IP адреси за вас. Затова можете да копирате вашата виртуална машина за офиса, без да се притеснявате за определяне на всеки един (това подобрява скалируемостта и намалява администрацията на работник).

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

Как да стартираме заетост на работника

Това е една интересна област и има няколко валидни методи за обработка на работни места на работниците. Тук аз просто ще обсъдят двете най-очевидно:

  • Вечно Сценарий: скрипт, било то скрипт или PHP скрипт се изпълнява веднъж на работника и работи като част от един безкраен цикъл. Аз съм дисконтирани този метод като една катастрофа на скрипта и потенциално вашите работници ще престане да работи без някаква намеса.
  • Cron базиран изпълнение на скрипта: на всеки x минути Cron демона започва на повикване към вашия скрипт, за да получите неща се случват. Без някаква проверка, това може да доведе до много, много копия на работника скрипт си работи.

Моето решение е да отидете с Cron която започва скрипт всеки 10 minutes.Â, ми скрипт изпълнява следните задачи:

  1. Получите списък на процеса и да използвате командата grep върху тази за "PHP". Ако не е намерена след това да продължи.
  2. Обадете се на вашия код за работа, в моя случай това ще бъде нещо PHP основава
  3. Работник скрипт завърши своя план
  4. Готови ли сте да отидете отново на следващата подходяща повикване

Баш скрипт ми изглежда нещо подобно на следното:

  #! / Хамбар / SH
 ако PS брадва | Впиши-V Впиши | Впиши PHP> / dev / нула
 след това
     Ехо "работа в момента преработка, излизане"
 още
     echo "работа не работи, да започне още сега"
     PHP yourJobProcessingScript.php
 Fi 

Забележка: ехо са почти напълно безсмислено, но може да помогне на следващия човек, който идва заедно да се опитаме да ги редактирате.

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

Създаване на Windows да се инициализира на работниците

Първата задача е да работи командата, която се изисква да се изпълнява на виртуална машина от командния ред на Windows. Ако сте инсталирали VirtualBox в местоположението по подразбиране и сте работник GridMachine след командата, която се изисква, за да заредите вашата работник е:

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

Въпреки това, за да стартирате скрипта в "обезглавена" ние трябва да използвате:

  "C: \ Program Files \ нд \ VirtualBox \ VBoxHeadless.exe" startvm GridMachine - VRDP = изключено 

Това ще започне на виртуалната машина без GUI и ще позволи да спаси състояние грациозно. Вторият аргумент се изключва ПРСР, така че не е конфликт с Windows ПРСР, или да ви даде съобщение за слушане на порт 3389. Името на виртуалния машина е чувствителна!

След това, ние ще трябва да настроите Windows да даде началото на нашия VM работник, след като машината е празен. За да направите това (на Windows XP), ще трябва да отидете на Start -> Всички програми -> Accessories -> System Tools -> планирани задачи, както е показано по-долу:

планирани задачи

След това кликнете върху "Добави планирана задача", последвана от Преглед, за да добавите потребителска програма. Навигирайте до скрипта ви VBoxManage и да щракнете върху OK. График вашата задача за някоя от опциите (ние ще промените това в минута) и да продължите. След като прескочи следващия екран Windows ще поиска от вас, които искате да стартирате тази задача, щях да предложа или "Администратор" или създаването на нови привилегировани потребител. Не забравяйте, ние не искаме да се намесва в стандартна сметка на персонала на машината във всяка точка. Натиснете Next и проверката покажат, разширени опции за тази задача.

До края на пистата виждаш добавите низ на "startvm GridMachine" и да се гарантира, които работят само ако сте се оставяли unticked. Посетете задачата график следващата и да променят графика падне до опцията "празен", изберете за колко време искате машината да бъде в покой преди да преминат към следващия раздел.

Накрая да развързваш на опция, която гласи, спиране на задачата, ако е бил работещ X период от време, но отбележете опцията да спре задача, ако машината вече не е празен.

график

Това е то тогава за домакин за настройка на Windows!

Обобщение

В тази част ние имаме създадена една виртуална машина да действа като работник, както и начина, по който ние наричаме и изпълнение на нашите скриптове за обработка на работни места (за себе си скрипт на PHP). От тук ние гледаме как да се създаде копия на Windows, за стартиране на виртуалната машина в обезглавен режим, когато компютърът не се използва, и спести си състояние, когато потребителят подновява използването на машината. Надяваме се в този момент виждаме колко просто е да се създаде такава система и са сърбеж, за да получите някои експерименти себе си ще!

Следващия път

В част 4, ние ще се търси в използването на инструменти за гарантиране, че сте най-новата версия на код и източници на данни, така че получените резултати са винаги в крак с времето с най-новите бизнес информация и логика.

Офис Grid Computing Виртуалните среди - част 1

От , петък 4 декември 2009 23:23

Въвеждане

Аз работя в компания, в която ще свършим много работни места за пакетна обработка на милиони записи на данни всеки ден и аз си мисля напоследък за всички машини, които седят около всеки ден правиш нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини, за да уплътнят процесорна мощ на нашите системи? В тази поредица от статии, аз ще разгледаме потенциалните ползи за наемане на офис мрежа с помощта на виртуализирани среди.

Като PHP разработчик Отивам да се използват инструменти, които използвам всеки ден, а именно, Linux, MySQL , PHP, VirtualBox и Subversion (SVN). Все пак аз се надявам това ръководство, ще се адаптира към други езици и технологии, също толкова добре.

Решението, което ще бъде много свободно основава на вида на обработката, за това ще трябват, за да се постигне обаче, това не може да е вярно през цялата статия, както аз ще променят нещата за простота, или за производство на по-интересни сценарии за употреба.

Тези виртуална среда, ще се проведе на машини с Windows, тъй като това е това, което по-голямата част на офиси продължава. Обработката, че Службата машини Не, не бива да се намесва с персонала, като се използват тези машини, следва да се изисква никаква поддръжка на машината, и лесно да разгръщат нови машини, тъй като те станат достъпни. Също така, новите виртуални машини не следва да се изисква допълнителна конфигурация, тъй като това значително намалява възможностите за надграждане и лекотата, с която на мрежата може да бъде удължен.

Защо да разположи Computing Grid служба?

На първо място може би си мислите, защо просто не използва ресурсите изчислителни облаци като Amazon EC2 платформа ? Ами причините биха могли да бъдат няколко, като например:

  • Вие няма да възложи определени данни за околната среда за клауд компютинг
  • Вие не може да постави определени данни в среда на изчислителни облаци поради правни причини (напр. данни напускане на страната), потенциално по юридически причини, например на NHS записи.
  • Вие искате да запазите вашите процесора отблизо и да имат пълен контрол над хардуера
  • Вие нямате по проекта средства, за да работят в облака случаи
  • Вашия офис не да има връзка с интернет и следователно не е възможно да се използва ресурс облак
  • Ти не обичаш дъжд, облаци показват, дъжд, затова държите далеч

Сигурен съм, че може да продължи списъка, но мисля, че това е достатъчно за сега.

Предимства на Office Computing Grid

Е, нека се направят някои математика (и в истинската физика стил позволява да се направят някои радикални предположения). Представете си, че имат голям мускулест сървъра за обработка с 100 работни места на ден. Във вашия офис има 50 машини, които са активни 16 часа в денонощието, всеки един от тези машини е 10%, както е мощен като мускулест обработка Север. (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.

Грид-решения не са само от полза за обработка на работни места от този тип. По принцип, всеки процес, който може да бъде разделена на самостоятелни единици могат да се стартират паралелно. Вижте тази Уикипедия за примери и повече информация: грид-технологията , но няколко от най-известните примери са SETI @ Home и BIONC . Има рамки за управление на компютърни мрежи, и те са добре си струва да търсите в.

Какво ще постигнем?

До края на тези членове, се надявам да покажа, че разполагането на офис мрежа не трябва да бъде много скъп или отнема време. Отивам да обсъдим:

  • Създаване на система за контрол на работата, работата на конфигурацията
  • Създаване на подходяща обработка на виртуална машина
  • Как да настроите системата на машина на Windows
  • Ви гарантира използвате последните код и данни
  • Внедряване и бенчмаркинг
  • В перспектива

Ще бъда сграда (OK аз построих, а след това е написал това) пример за приложение, за да тестват концепциите на локална машина, с помощта на Windows XP и моята "GridMachine" виртуална машина. Моя сървър за контрол на работата ще бъде моята основна машина, която работи с Fedora 11 .

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

Следващия път

В Част 2 ще започне от търсене в системата за контрол на работа и разгледа как работни места трябва да бъдат конфигурирани, за да се постигне най-голям размер на обработка, като същевременно се гарантира, че всяка работа се обработват без да се провалят.

Офис Grid Computing Виртуалните среди - част 2

От , петък 4 декември 2009 23:23

Въвеждане

Аз работя в компания, в която ще свършим много работни места за пакетна обработка на милиони записи на данни всеки ден и аз си мисля напоследък за всички машини, които седят около всеки ден правиш нищо в продължение на няколко часа. Не би ли било добре, ако можем да използваме тези машини, за да уплътнят процесорна мощ на нашите системи? В тази поредица от статии, аз ще разгледаме потенциалните ползи за наемане на офис мрежа с помощта на виртуализирани среди.

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

Контрол на работата

Ако ще да се работи на работни места, тогава започваш да се нуждаят от някакъв начин да ги управляват. Вашата система за контрол на работата (работата на вашия сървър) трябва да бъдат наистина добре обмислени, преди дори да се опитвате да стартирате офис мрежа. Така че на първо място, какви са задачите, за система за контрол на работата:

  • Раздават работни места при поискване от работещите
  • Кажете на работници, за какъв тип на работни места да тече
  • Проследяване на работни места
  • Уверете се, че работните места са се изпълнява само веднъж
  • Осигуряване на работа данни на работниците, или поне да им кажа къде да го получите

Системата също така трябва да бъде разширяем, едно решение, че работи за сега в един случай може да бъде удължен, за да стартирате няколко вида работни места, като бизнеса, вижда качества в мрежа разтвор. Например, работни места могат да получат приоритет, повече от един вид работа могат да съществуват (т.е. няколко код базите), в крайна сметка дори може да стартирате няколко различни машини работник, които са оптимизирани за всеки вид работа (въпреки че се движи далеч от "родово работник "идея). Винаги се опитваме да мислим за бъдещето, когато разработват системи, кратко визия план може да доведе до дългосрочен план разочарование и увеличаване на времето за развитие.

Работа на сървъра

Отиваме да имат нужда да контролират нашата работа от някъде, това трябва да бъде единствената система във вашата мрежа, който има постоянен указател на ресурс, е, че едно IP адрес, име на хост, URL (с помощта на вътрешен DNS) и т.н. Това е така, защото работници трябва да знаят къде да търсят работа, работниците трябва да се намери система за контрол на работата (не е система за контрол на работата на работниците).

Работата самия сървър не наистина да има сложна задача (в основната система, така или иначе), той трябва да съхранява списък с работни места, ръка работни места, получават резултати, и впоследствие да ги съхранява за по-късно извличане. Как се определят тези части (като например "ръка работни места") може да бъде основна. Късно на ние можем да разширим системата да включва интерфейс на администрацията, да добавяте, редактирате, изтривате, да спре на работни места, но това е извън това упражнение.

Налице е без видима причина, че работата на вашия сървър не може да бъде една виртуална машина в рамките на основната обработка на сървъра при условие да не се източва твърде много средства от него. Сървъра работа обаче се нуждае от висока надеждност, ако тя отива в петък вечер, ти започваш да губиш целия уикенд на обработка, потенциално ви струва няколко седмици стойността на времето за обработка (в сравнение с основната обработка на сървъра) . Вие може да искате да разгледа пускането на сървър на вашата работа натоварване балансирана среда за висока достъпност.

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:

например работни места

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.

Обобщение

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.

Следващия път

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

Office Grid Computing using Virtual environments – Part 5

By , Friday 4th December 2009 11:03 pm

Въвеждане

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

3 посетители онлайн сега
2 guests, 1 bots, 0 members
Max visitors today: 23 at 07:18 am UTC
This month: 26 at 04-04-2012 10:27 pm UTC
This year: 69 at 27-02-2012 09:56 am UTC
All time: 130 at 28-03-2011 10:40 pm UTC