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

С Стивън Лойд Watkin , четвъртък 7-ми януари, 2010 год. 22:50

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

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

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

Път искания за sitemap.xml по поръчка на клиента контролер / действие

С Стивън Лойд Watkin , сряда 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
 {
     / **
      * Renders карта на сайта въз основа на Zend_Navigation настройка
      * /
     публична функция sitemapAction ()
     {
    	 ехо $ това-> View-> навигация () -> карта на сайта ();
    	 $ Това-> View-> оформление () -> disableLayout ();
    	 $ Това-> _helper-> viewRenderer-> setNoRender (вярно);
     }
 }

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

Zend Framework Per-модул на настройки

С Стивън Лойд Watkin , петък 1-ви 1, 2010 22:40

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

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

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

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

  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. Създаване на действие Помощник:
      <? PHP
     / **
      * Задава оформлението пътя на на-модулен принцип
      *
      * @ Автор Лойд Watkin <lloyd@evilprofessor.co.uk>
      * @ От 01.01.2010
      * /
     клас Pro_Controller_Action_Helper_SetLayoutPath
         разширява Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Задава оформлението път на базата на модулите
          * /
         публична функция preDispatch ()
         {
        	 $ Модул = $ това-> getRequest () -> getModuleName ();
    
    	     ако ($ фърмуера = $ това-> getActionController ()
    	                        -> GetInvokeArg ("фърмуера")) {
    
    	         $ Довереник = $ фърмуера-> getOptions ();
    
    	         ако (isset ($ довереник ['layoutPath'] ['подредба'] [$ модул] ['ресурси'])) {
    	             $ LayoutPath =
    	                  $ Довереник [$ модул] ['layoutPath'] ['подредба'] ['ресурси'];
    	             $ Това-> getActionController ()
    	                  -> GetHelper ("оформление")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. И накрая boostrap действието помощник:
     ...  / ** * Задава се оформление скриптове на на-модулен принцип * / защитени _initLayoutHelper функция () {$ това-> фърмуера ("frontController"); $ оформление = Zend_Controller_Action_HelperBroker:: addHelper (ново Pro_Controller_Action_Helper_SetLayoutPath ());} .. . 

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

С Стивън Лойд Watkin , сряда 30 Декември 2009 18:30

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

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

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

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

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

PHP Design Patterns - наблюдател на образи

С Стивън Лойд Watkin , вторник, 29-ти Декември, 2009 година 22:02

Аз бях четене Head First Design Patterns неотдавна и реших да напиша някои от моделите като примери PHP за собствената си изгода. Първият от тях, че аз реших да се код е наблюдател на образи . Официалната дефиниция на наблюдател Модела е:

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

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

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

Службата грид-технологията използва Виртуалните среди - част 4

С Стивън Лойд Watkin , петък 4-ти Декември 2009 23:59

Въведение

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

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

Провеждане на последните код

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

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

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

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

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

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

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

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

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

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

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

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

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

Обобщение

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

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

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

Службата грид-технологията използва Виртуалните среди - Част 3

С Стивън Лойд Watkin , петък 4-ти Декември 2009 23:37

Въведение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Създаване на Windows може да бъде прочетен работници

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

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

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

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

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

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

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

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

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

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

разписание

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

Обобщение

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

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

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

Службата грид-технологията използва Виртуалните среди - част 1

С Стивън Лойд Watkin , петък 4-ти Декември 2009 23:23

Въведение

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

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

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

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

Защо да се мобилизират Grid Office Компютърни?

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

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

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

Предимства на мрежата на Office Компютърни

Ами, нека да се направят някои по математика (и по-вярно, физика стил дава възможност да направи някои предположения метене). Представете си, че имат голям мускулест сървър преработка работи 100 работни места на ден. В офиса ви има 50 машини, които не са активни 16 часа на ден, всяка една от тези машини е 10% толкова мощен, колкото си силен обработка на север. (Всички резултати тук са закръглени до подценяване увеличение на ефективността).

Така че, една машина * 10% мощност * 2 / 3 време = 0.067 т.е. 1 десктоп обработка в режим на времето могат да се обработват 6 пълни работни места на ден.

Ако сега степен, това се отнема 15 бездейства настолни компютри за обработка на колкото се може повече работни места на ден, както си главния сървър обработка прави.

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

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

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

Технологии

Какво ви трябва? (Или по-точно това, което съм употреба):

  • Готовност офис машини (в моя случай резервен старите прозорци лаптоп XP)
  • VirtualBox (или друг софтуер за виртуализация на клиента)
  • Виртуална машина с PHP, MySQL running пуснете отсече OS, което наричам тия мои Limp сървъри:)
  • Работа да тече
  • Работа сървъра (може да бъде друга виртуална машина някъде)

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

Видовете работа, която има за цел тази система да работи, както следва:

  • Системата получава списък на данните, на които трябва да отговарят и да се върнете резултати
  • Съвпадение включва проверка / търси няколко (доста статично) източници на данни
  • Резултати от източниците на данни може да изиска допълнителна проверка, сливане, проверка на допълнителни източници на данни в отговор на резултатите
  • Данните се връща със съвпадащи записи, напълно и преработени
  • Всеки запис в рамките на работа не зависи от останалите

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

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

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

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

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

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

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

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

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

Службата грид-технологията използва Виртуалните среди - част 2

С Стивън Лойд Watkin , петък 4-ти Декември 2009 23:23

Въведение

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

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

Работа контрол

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

  • Раздайте работни места по искане на работниците
  • Кажете какъв тип работници на работните места да тече
  • Проследяване на работни места
  • Уверете се, че работните места се провеждат само веднъж
  • Provide job data to workers, or at least tell them where to get it

The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Работа Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

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

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

  1. Вземете всички работни места, които не са маркирани като завършени от нашите работници и нулиране тях (заместител __ME__ с идентификатор, най-лесно ще бъде IP адрес):
      UPDATE "работни места" SET "статут" = 0, когато "статут" = 1 и "started_by" = __ME__; 
  2. С помощта на нашите критерии за работа за избор, изберете работа и да каже на система за контрол, че този работник се занимава с него:
      UPDATE "работни места" SET "статут" = 1, "started_by" = __ME__, "started_at" = NOW () КОГАТО "статут" = 0 или
     ("Статут" = 1 и "started_at"> DATE_SUB (NOW (), период за X час)) ORDER BY "номер" ASC; 

    Като вземат работните места, които не са се завърнали резултати в размер X от време ние гарантираме, че всички работни места се провеждат в случай на работник от срив или ще несигурен.

  3. Следваща вземете работни места Подробности, следвани от самите записи:
      SELECT * FROM `работни места", когато "started_by" = __ME__ LIMIT 1;
     SELECT * FROM `job_records", когато "номер" = __JOBID__; 

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

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

Работа за конфигурация

Следващият аспект е да се помисли работа размери и конфигурация. С играе с работа конфигурация може да удари отличен баланс между скорост, репликация процес, и надеждност. Вземете няколко OFA сценария:

  1. Работата отнема 1 ден всяка да текат: Това означава, че работниците трябва да 15 дни за обработка на всяко едно работно място (не забравяйте 10% от мощността за 2/3rds на време). Това очевидно не е мъдър конфигурация, вашата работа размер е твърде голям! Това ще отнеме поне два пъти повече време, за да си намеря работа преработени следва първоначалната работник отиде несигурен (време, за да вземем, че не се е върнал в резултат плюс преработка време). В един идеален ще трябва най-малко един пълен работен лесно премахнати до края на всеки продължителен период на престой, по този начин да поддържате работни места тиктака отново и в най-лошия случай, че работата ще отнеме два дни, за процеса, ако първият изчезнали.
  2. Работа по 1 минута, за да текат: Това означава, че работниците отнеме около 15 минути, за да тичам всяка работа. Въпреки че това може първоначално изглежда идеално, получавате допълнителна обработка работа по време на обяд, кафе паузи, срещи и т.н. този сценарий поставя натиск върху други области на вашата система и въвежда собствените си проблеми. Например, от една страна настройките съотношение между времето за обработка ще отиде чак, поради загуба на ефективността на системата. 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.

Службата грид-технологията използва Виртуалните среди - част 5

С Стивън Лойд Watkin , петък 4-ти Декември 2009 23: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.













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

9 посетители на линия
5 guests, 4 bots, 0 members
Max visitors today: 11 at 12:56 am UTC
This month: 22 at 08-06-2011 12:30 am UTC
Тази година: 130 на 28-03-2011 22:40 UTC
All time: 130 at 28-03-2011 10:40 pm UTC