Динамички додају странице у Зенд_Навигатион контејнер у рунтиме-

Би и четвртак 7. јануар 2010 10:50 пм

У наставку на мој задњи пост о Зенд_Навигатион и руте захтева за ситемап.кмл на прилагођеном контролер / акција , овај пост је о димнамицалли додавање страница на Зенд_Навигатион контејнер у рунтиме / Сцрипт Екецутион.

Њена све добро и добро навести ваше странице у ини или кмл фајл, али у неком тренутку ћете да мењају странице на вашем сајту које желите као део менија, ситемап, или да се укљуци у Бреадцрумб траг. Зато оно што треба да урадите је да додате странице наше Зенд_Навигатион контејнер у рунтиме. Примери за ово би било у додавању вести, блог поруке или странице коментаре, итд

Наставити читање 'Динамички додају странице у Зенд_Навигатион контејнер у рунтиме' »

Роуте захтева за ситемап.кмл на прилагођеном контролер / Акција

Би , среда 6. јануар 2010 12:13 ам

Да би на директне захтеве за / ситемап.кмл на прилагођену контролера и деловања на вашем Зенд Оквирне апликације једноставно додајте следеце у васу апплицатион.ини или алтернативног цонфиг фајлу (нпр. ја користим навигатион.ини):

 ресоурцес.роутер.роутес.ситемап.роуте = "ситемап.кмл"
 ресоурцес.роутер.роутес.ситемап.дефаултс.цонтроллер = индекс
 ресоурцес.роутер.роутес.ситемап.дефаултс.ацтион = Ситемап

Пример кода за добијање може видети стварањем акција у одговарајућим контролером (нпр. мој Ситемап лежи у индексној контролер, ситемап акција):

 < ПХП
 класа ИндекЦонтроллер
     проширује Зенд_Цонтроллер_Ацтион
 {
     / **
      * Донесе мапа на основу Зенд_Навигатион подешавања
      * /
     јавну функцију ситемапАцтион ()
     {
    	 ецхо $ тхис-> Виев-> навигација () -> Ситемап ();
    	 $ Тхис-> Виев-> распоред () -> дисаблеЛаиоут ();
    	 $ Тхис-> _хелпер-> виевРендерер-> сетНоРендер (истина);
     }
 }

Ситемап могу брзо и лако се генерише помоћу Зенд_Навигатион , велики туторијал брзо (и генерално врло корисно за Зенд Фрамеворк туторијале) је Зенд одливци - Динамичко креирање Ситемап мени и презле .

Зенд Фрамеворк-Модуле по бази подешавања

Би , петак 1. јануар 2010 10:40 пм

Направио сам Фолловуп на овај пост који захтева мање конфигурацију, погледајте модула Басед Лаиоут - Зенд Фрамеворк .

Када користите Зенд оквир модула, са њеним очигледним да ако користите разне (под-) локације ван исте апликације си не нужно желе исте скрипте распоред за сваки део. Одлучио сам да идем са следећом структуром сајта:

  / Примена
     / Контролери
         ...
     / Модела
     / Модула
         / Дефаулт
             / Контролери
             / Распоред
                 / Скрипте
             / Виевс
                 / Скрипте
         / АнотхерМодуле
             ...
     / Скрипте

Проблем је постављање распореда скрипте на по-модула основи. Одговор је стигао кроз коришћењем Ацтион Хелпер. Подешавање се распореде на основу по-модула обухвата три корака:

  1. Апплицатион.ини (или слична конфигурација подешавање):
     админ.ресоурцес.лаиоут.лаиоутПатх АППЛИЦАТИОН_ПАТХ = "/ модулес / админ / распореди / писмо" дефаулт.ресоурцес.лаиоут.лаиоутПатх АППЛИЦАТИОН_ПАТХ = "/ модулес / дефаулт / распореди / писмо" мембер.ресоурцес.лаиоут.лаиоутПатх АППЛИЦАТИОН_ПАТХ = "/ модула / члан / распореди / писмо "аффилиате.ресоурцес.лаиоут.лаиоутПатх АППЛИЦАТИОН_ПАТХ =" / модулес / аффилиате / Лаиоутс / писмо " 
  2. Креирајте ваш помоћник Акциони:
      <ПХП?
     / **
      * Поставља распореда на путању модула по основу
      *
      * @ Аутор Лојд Ваткин <ллоид@евилпрофессор.цо.ук>
      * @ Јер 2010-01-01
      * /
     класа Про_Цонтроллер_Ацтион_Хелпер_СетЛаиоутПатх
         проширује Зенд_Цонтроллер_Ацтион_Хелпер_Абстрацт
     {
         / **
          * Сетови распоред пут заснован на модулу
          * /
         јавну функцију преДиспатцх ()
         {
        	 Модул $ = $ тхис-> гетРекуест () -> гетМодулеНаме ();
    
    	     иф ($ боотстрап = $ тхис-> гетАцтионЦонтроллер ()
    	                        -> ГетИнвокеАрг ('боотстрап')) {
    
    	         $ $ Модулес = дизања-> гетОптионс ();
    
    	         иф (иссет ($ цонфиг [$ модул] ['ресурси'] ['распоред'] ['лаиоутПатх'])) {
    	             $ = ЛаиоутПатх
    	                  $ Цонфиг [$ модул] ['ресурси'] ['распоред'] ['лаиоутПатх'];
    	             $ Тхис-> гетАцтионЦонтроллер ()
    	                  -> ГетХелпер ('распоред')
    	                  -> СетЛаиоутПатх ($ лаиоутПатх);
    	         }
        	 }
         }
     } 
  3. И на крају боострап помоћни акције:
      ...
         / **
          * Поставља се распоред скрипте на основу модула по
          * /
         заштићени функција _инитЛаиоутХелпер ()
    	 {
    	     $ Тхис-> боотстрап ('фронтЦонтроллер');
    	     Распоред $ = Зенд_Цонтроллер_Ацтион_ХелперБрокер :: аддХелпер (
    	         Нови Про_Цонтроллер_Ацтион_Хелпер_СетЛаиоутПатх ());
    	 }
     ... 

Доктрина: ДАТЕТИМЕ сада подразумевано ()

Би , среда 30. децембар 2009 6:30 ам

Ја сам се борила са постављање шеме базе података за нови Зенд оквирног пројекта. Ја сам коришћење покушавате да користите доктрину ОРМ за моје базе модела. Морам да подесите шему тако да ми дозволили да поставите подразумевани датум и време на `датетиме колони`, на пример, када додате нову поруку добијем тренутну временску ознаку. После много тражења и експериментисања сам нашао решење тако да сам га деле.

У вашој шеми ИАМЛ датотеке једноставно урадите следеће:

 Порука:
   Ацтас а:
     Тиместампабле:
       цреатед:
         Име: цреатед_ат
         Тип: тиместамп
         Формат: Имд Х: и: с
       упдатед:
         Име: ласт_упдатед
         Тип: тиместамп
         Формат: Имд Х: и: с
   колоне:
     ИД:
       Тип: цео број
       Примарни: истина
       аутоинцремент: истина
     Име: стринг (255)
     Е-маил: стринг (300)
     порука: стринг (2000)

Ако са друге стране не желите да се `упдатед_ат` колону можете користити следеће:

 Порука:
   Ацтас а:
     Тиместампабле:
       цреатед:
         Име: цреатед_ат
         Тип: тиместамп
         Формат: Имд Х: и: с
       упдатед:
         особе са инвалидитетом: истина
   колоне:
     ИД:
       Тип: цео број
       Примарни: истина
       аутоинцремент: истина
     Име: стринг (255)
     Е-маил: стринг (300)
     порука: стринг (2000)

ПХП Десигн Паттернс - Посматрач Паттерн

Би , уторак 29. децембар 2009 10:02 ам

Сам читао Хеад Фирст Десигн Паттернс и недавно су одлучили да напише неке од образаца као ПХП примера за моју личну корист. Први који сам одлучио да је до кода Обсервер паттерн . Формална дефиниција Посматрачке образац је:

Посматрач образац (подскуп асинхрони објавите / претплатити образац ) је софтверски дизајн образац у којем објекат , који се зове тема, одржава листу својих породица, које се називају посматрачи, и обавештава их аутоматски било каквих државних промена, обично позивањем један од њихових метода . Углавном се користи за спровођење дистрибуиране системе Обрада догађаја.

Као системи постају све лабаво удружена уверивши се да када се догађај деси све системе који захтевају познавање ових исправки се информишу. На пример, објава, након чувања пост можда ћемо морати да ажурирате енгине за претрагу (нпр. Луцене), ажурирајте наше мапа, ознака, претплаћена корисницима е-поште, итд посматрач образац омогућава програмерима да додају додатне слушаоце без измена своју уочљиво објекат . Убризгавањем посматраче (тј. претраживач исправка посматрач, ситемап генератор, итд) у теми (тј. блог пост уређивање систем) можемо дозволити да изврши све неопходне исправке без икаквих промена.

Наставити читање 'ПХП Десигн Паттернс - Обзервер Паттерн' »

Канцеларија Грид користећи виртуелна окружења - 4. део

Би и петак, 4. децембар 2009 11:59 ам

Увод

Радим у фирми где смо покренули многе серија Послови обраде милионе записа података сваког дана и ја сам недавно размишљао о свим машинама које седе око сваки дан не радећи ништа за неколико сати. Зар не би било добро ако бисмо могли да користимо ове машине да ојача моћ обраде наших система? У овом сету чланака ћу да се осврнемо на потенцијалне користи од запошљавања канцеларију мрежу користећи виртуелизованим окружењима.

У делу 3 направили смо нашу виртуелну машину за прераду и подесити Виндовс машине да постане неактиван-тиме радници.

Покретање најновију код

Неизбежно након што направите свој радника пословну логику ће се мењати, грешке ће се наћи, брже ефикасније код ће се производити чиме ваши радници седели обраду података помоћу стару смрдљиву кода . Како онда ми бисмо били сигурни да увек користите најновију верзију и највећи наших прераду скрипти?

Постоји неколико једноставних начина врло лако бисмо могли да урадите, трик је, међутим, да смањи потрошњу енергије за прераду и мрежни саобраћај у постизању тога. Омогућава почети са најједноставнији решења и унапредити их полако током неколико итерација.

Први метод би био да једноставно повежете на нашем серверу посао контроле (преко самбе, ФТП, или слично) и повуците надоле најновију верзију кода. Не веома ефикасан, али ће урадити посао. Омогућава да се нешто побољша, како о стварању рсинц скрипту и користе уместо да сваки пут? Алтернативно шта полажемо своју најновију прераду скрипту у субверзија проверу почетку код и онда само ажурирање нашег кода на сваком бекству ( СВН упдате )?

На крају смо могли завршити са басх скрипту (зову црон сваких 10 минута) који изгледа као једноставан као ово:

  # / Бин /! СХ
 ПС ако секира | греп-в греп | греп ПХП > / дев / нулл
 онда
     ецхо "Посао се тренутно обрађује, излаз"
 друго
     ецхо "Посао није покренут, покрените сада"
     цд / путања / до / раде / копију
     свн упдате
     ПХП иоурЈобПроцессингСцрипт.пхп
 Фи 

Сада можемо бити сигурни да са сваком стазе смо дефинитивно користите најновију кода. Ми обезбеђивање ово ажурирање базе нашег кода сваки пут смо извршили серију и смањује мрежни саобраћај је само пренос датотека разлике преко наше мреже.

У мом сетуп демонстрација, тачно онако како сам горе. Субверзија је инсталиран на мом серверу посла обраду и једноставно сам извукао последњи кода од 'радник "грана користећи свн упдате наслова'. Такође сам додао број верзије ознаку на моју обраду скрипту који је вратио у базу података као део вратити резултате. На овај начин сам могао да видим да је мој код је се ажурира сваки пут када сам ископирао мој труп, односно радник у филијали да сам дефинитивно је користите најновију обраду скрипту.

Користећи најновије податке

Ако ваш посао обрада користи изворе података онда у неком тренутку они ће бити превише ажуриран. Осим ако позовете своје изворе података на основу које само повремено веома идете да преплаве своју мрежу саобраћајем чим ваши радници почети да раде све што је довођење до застоја. На мом решењу одлучио сам да бих желео да преместите своје изворе података около са мојим ВМС.

Држите сте коњи тамо! Шта ако моји извори података су огромни? Па ово је заиста случај колико су подаци говоримо? То може бити више исплативо да инсталирате додатни чврсти диск већи у сваку машину него да купите додатни сервер за обраду. То је питање буџета и до посла да одлучи. Можда да су ваши извори података су толико велика да је просто неизводљиво да ту количину података у вашим машинама радника. У том случају, шта бисте урадили? Па могли бисмо да погледамо позивају локални сервер података, али то може изазвати проблеме са мрежом. У овом случају мрежа као што је овај систем може постати нереално да укључите у ваш канцеларијском окружењу. Такође може бити да можете погледати на алтернативне стратегије раде, на пример, само позивање ваших радника између 8 увече и 6 сати сваке ноћи и / или пригушивања извора података захтева.

Прелазак на рецимо нашу извори података износ 100ГБ података. Па да то је прилично мало података за кретање у мрежи на исправци. Како бисмо били сигурни да имамо најновију копију података у овом случају? Рсинц је могућност, али лично мислим да покренете свој последњи извор података на вашем серверу посао обраду и постављање ово горе као мастер у репликацији (са лепом дугом бин дневнику) може бити начин да се иде:

одговор Постављањем сваки од ваших радника се као роб за посао исправке контролних сервера на ваш изворима података ће се прелити лепо вашим радницима без огромног повећања мрежне активности (то јест ако вршите велику исправку података и сви ваши радници кицк у одједном). То има предности у односу на рсинц да не би имао дугу паузу пре сваког посла, као датабасе упдатес, мискл демон на ваш радник стално ће ажурирати своје податке, а обрада наставља.

Ово је како сам подесио демонстрацију сервера. Да бисте поставили репликацију Пратио сам упутство на МиСКЛ сајту ( Подешавање репликација ) и у року од 20 минута имао сам инитал радника реплике на посао сервере контроле датасет. За сваки додатни радник репликације подешавања и процеса радили сваки пут када ВМ је копирају.

Резиме

У овом делу чланка смо гледали како лако и безболно је да свој код за обраду до данас од стране усингА рсинц или субверион (СВН) да обави посао и смањују мрежни саобраћај на истом тиме.А Дискутовали смо ио томе да задржи своје податке извора информација до-дате дозвољавајући да прелити на сваку од ваших радника. Тако смо површина осигура да држимо корак са пословном логиком и информације у нашем систему канцеларијског мреже. Очигледно да ће бити безброј алтернатива за обављање ових послова, али овде су два једноставна примера да покаже колико лако решење је да дођу до.

Следећи пут

У завршном делу ове серије, пригодно названог Део 5 , ми ћемо разговарати о распоређивању за овај систем. Ја ћу укратко оно што је научио и шта сам успео да створи.

Канцеларија Грид користећи виртуелна окружења - 3. део

Би и петак, 4. децембар 2009 11:37 ам

Увод

Радим у фирми где смо покренули многе серија Послови обраде милионе записа података сваког дана и ја сам недавно размишљао о свим машинама које седе око сваки дан не радећи ништа за неколико сати. Зар не би било добро ако бисмо могли да користимо ове машине да ојача моћ обраде наших система? У овом сету чланака ћу да се осврнемо на потенцијалне користи од запошљавања канцеларију мрежу користећи виртуелизованим окружењима.

У делу 2 смо гледали на пословима сервера ће се приказивати и како треба да буде конфигурисан Послови у циљу постизања највеће количине прераде док обезбеди да сваки посао је обрађен без изузетка.

Подешавање радника - или Лимп сервер

Следећи корак у процесу је да бисте подесили виртуелне радника. За то ћу користити инсталацију ЦентОС користе ВиртуалБок. Идем да инсталирате МиСКЛ и ПХП на серверу, такође познат као Лимп (Ли нук, М иСКЛ, Д кс) Сервера (можда сам измислио то име).

  • Инсталирајте ВиртуалБок на Виндовс машини (пратите линк)
  • Преузмите и инсталирајте ЦентОС (актуелна верзија 5.3) у оквиру створеног виртуелној машини

Нема смисла да наставим да ово вероватно постоји 1.000 'с великих туторијале који постоје (ОК, ево један: Стварање и МанагингА ЦентОС виртуелна машина под ВиртуалБок ). Важно је напоменути Претпостављам да сам звао мој виртуелни машина ГридМацхине.

Што се тиче моје избори за виртуелизацију клијента и оперативног система идем тамо постоји велики убедљив разлог за сваки избор. ВиртуалБок је нешто што ја користим на мом кућном рачунару, а подржана од стране три главне оперативне системе. Изабрао сам ЦентОС као свог доброг стабилног оперативног система и сам га користим на мојој веб серверу. Ја сам велики верник у правим алатима за посао (мада сам применом 'користите најбржи и најлакши за тебе' менталитет овде), па ако оперативни систем Кс покреће свој код брже и ефикасније користити уместо тога :)

Важно је да проверите да ли ваш ВМ користи ДХЦП, иначе за сваку нову виртуелну машину би требало да се посебно конфигурисан је нешто што ми не вант.Би користите ДХЦП ми не треба да конфигуришете подешавања мреже појединачно за радника машине, ДХЦП-а ће предати од ИП адреса за вас. Зато можете да копирате своје виртуелне машине о канцеларији без бриге о постављању сваког од горе (ово побољшава скалабилност и смањује администрацију радника).

Процес би требало да имају за циљ да постигне да би добила нову физичку машина, инсталација ВиртуалБок, а затим прилично распореди виртуелну слику без много друго. Можда би било мудро да подесимо све раднике на другој подмрежи, тако да можете барем видети колико су машине раде. Такође ћете морати да подесите ваше машине на дуже закуп или неограниченом закупу ДХЦП.

Како покренути послова на радника

Ово је интересантно подручје и има неколико валидних метода за обраду радних места на радника. Ево ја ћу разговарати о две најочигледније:

  • Непрекидно ради скрипт: скрипта, било да је схелл скрипт, или ПХП скрипта се извршава на једном раднику и ради као део бесконачне петље. Дисконтована сам ја овај метод као један од краха сценарија и потенцијално ваши радници ће престати да ради без неке врсте интервенције.
  • Црон бази Сцрипт Екецутион: сваких к минута црон даемон почиње позив на вашем скрипту да се ствари крећу. Без неке провере то би могло да доведе до много више копија свог трчања радника сцрипт.

Моја одлука је била да се иде са црон који почиње у схелл скрипт сваких 10 минутес.А Мој схелл скрипт извршава следеће задатке:

  1. Набавите листу процеса и греп ово за 'ПХП'. Ако није пронађен онда наставите.
  2. Позовите свој код посао, у мом случају то би било нешто на ПХП-
  3. Радник писмо завршава своју трку
  4. Спреман да поново оде на следећем одговарајући позив

Моја скрипта басх изгледа нешто као следеће:

  # / Бин /! СХ
 ПС ако секира | греп-в греп | греп ПХП> / дев / нулл
 онда
     ецхо "Посао се тренутно обрађује, излаз"
 друго
     ецхо "Посао није покренут, покрените сада"
     ПХП иоурЈобПроцессингСцрипт.пхп
 Фи 

Напомена: ецхо-а су скоро потпуно бесмислено, али може да помогне следећу особу која долази заједно да покуша и измените их.

То закључује постављању на радничком виртуелне машине, брз, једноставан и лак начин копирате на сваки нови комад хардвера који се прима. "Памет" на грид систем стварно није у ОС замислио, њен све везе са кодом створена за обраду радних места, посао конфигурације, и уверивши се да у посао ради када је то примерено (нпр. када је домаћин мировања ).

Подешавање Виндовс да иницијализујете Радници

Први задатак је да разраде команду потребно да покренете виртуелну машину из прозора командне линије. Ако сте инсталирали ВиртуалБок на подразумеваној локацији, а ви сте своје име радника ГридМацхине онда команда захтева да се учита ваш раднику је:

  "Ц: \ Програм Филес \ Нед \ ВиртуалБок \ ВБокМанаге.еке" стартвм ГридМацхине 

Међутим, да покренете скрипту у 'без глава »држава треба да користите:

  "Ц: \ Програм Филес \ Нед \ ВиртуалБок \ ВБокХеадлесс.еке"-стартвм ГридМацхине - врдп = искључено 

Ово ће покренути виртуелну машину без ГУИ и пустите га да спасе државу грациозно. Други аргумент искључује РДП тако да не сукоб са виндоуз РДП, или дати вам поруку о слуша на порту 3389 Виртуал Мацхине име је мала и велика слова.

Даље, ми ћемо морати да подесите Виндовс до кицк офф нашу ВМ радника када је машина у стању мировања. Да бисте то урадили (Виндовс КСП) мораћете да идем Старт -> Алл Програмс -> Аццессориес -> Систем Тоолс -> Сцхедулед Таскс као испод:

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

Следеће кликните на "Додај планског задатка следи прелиставање да додате прилагођени програм. Дођите до свог ВБокМанаге скрипту и кликните ок. Испланирајте свој задатак за било коју од опција (ћемо променити ово у минуту) и наставити. Након прескакања следећи екран Виндовс ће вас питати који желите да покренете овај задатак, ја бих предлажемо приказани 'администратора' или креирајући нову привилеговану корисника. Запамти не желимо да се мешају са стандардним особља налог на машини у било ком тренутку. Кликните на дугме Нект и проверите Прикажи додатне опције за овај задатак.

На крају извршавања тектбок додате наш Стринг 'стартвм ГридМацхине' и обезбедити да раде само када је напустио пријављени унтицкед. Посетите распоред следећи задатак и промените распоред Спустите се на опцију "када је неактиван", изабрати колико времена желите да машина буде неактиван пре преласка на следећу картицу.

Коначно деселектуј опцију која стоји задатак зауставити ако је покренут Кс времена, али не обележите опцију да заустави задатак ако машина није више неактиван.

распоред

То је онда за Виндовс домаћина сетуп!

Резиме

У овом делу смо поставили виртуелну машину која ће служити као радник, као и начин на који ми зовемо и извршава своје скрипте посао обраде (за себе ПХП скрипт). Одатле гледамо како да подесите своје копије оперативног система Виндовс да покренете виртуелну машину у режиму без глава када рачунар постаје неактиван и да сачувате своју државу када корисник наставља коришћење машине. Надам се да у овом тренутку ви видите како је једноставно поставити такав систем и свраб да се неки експерименти се дешава!

Следећи пут

У Делу 4 ћемо бити хандсоме код помоћу алатке како би се осигурало да користите најновију верзију Кодекса и извора података, тако да добијени резултати су увек уп-то-дате са најновијим пословних информација и логике.

Канцеларија Грид користећи виртуелна окружења - Део 1

Би и петак, 4. децембар 2009 11:23 ам

Увод

Радим у фирми где смо покренули многе серија Послови обраде милионе записа података сваког дана и ја сам недавно размишљао о свим машинама које седе око сваки дан не радећи ништа за неколико сати. Зар не би било добро ако бисмо могли да користимо ове машине да ојача моћ обраде наших система? У овом сету чланака ћу да се осврнемо на потенцијалне користи од запошљавања канцеларију мрежу користећи виртуелизованим окружењима.

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

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

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

Why Deploy an Office Computing Grid?

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

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

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

Advantages of an Office Computing Grid

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

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

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

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

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

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

Технологије

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

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

Typical Jobs

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

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

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

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

What will we achieve?

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

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

I'll be building (ok I built, then wrote this) an example application to test the concepts on a local machine using windows XP and my 'GridMachine' virtual machine. My job control server will be my main machine which runs Fedora 11 .

This is in no way meant to demonstrate a fully working robust system, its meant more of a demonstration and discussing showing that these things can be achieved in a reasonably short space of time and at little cost. Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.

Next time

In part 2 I will start by looking at the job control system, and look into how jobs should be configured in order to achieve greatest amount of processing whilst ensuring that each job is processed without fail.

Канцеларија Грид користећи виртуелна окружења - Део 2

Би и петак, 4. децембар 2009 11:23 ам

Увод

Радим у фирми где смо покренули многе серија Послови обраде милионе записа података сваког дана и ја сам недавно размишљао о свим машинама које седе око сваки дан не радећи ништа за неколико сати. Зар не би било добро ако бисмо могли да користимо ове машине да ојача моћ обраде наших система? У овом сету чланака ћу да се осврнемо на потенцијалне користи од запошљавања канцеларију мрежу користећи виртуелизованим окружењима.

У Парт 1 сам дао преглед система и технологија ћу бити користећи као и разговарали су неки од могућих разлога због којих бисте желели да креирате мрежу канцеларије.

Контрола посао

Ако идете да се ради посао онда ћете морати да на неки начин да управљате њима. Ваш систем контроле посао (на радном серверу) треба да буде заиста добро промишљена, чак пре него што покушате да покренете мрежу канцеларије. Дакле, прво, шта су задаци за посао система контроле:

  • Предати послове на захтев радника
  • Реците радника који тип Послови за покретање
  • Трацк Послови
  • Уверите се да су послови изводити само једанпут
  • Обезбедите податке посао радника, или бар реците им где да га добијете

Систем такође треба да буде проширив, решење које за сада ради у једном случају може се продужити да ради неколико типова радних места, као на послу види вредност у грид решење. На пример, послови могу добити приоритете, више од једног посла типа може постојати (тј. неколико код базе), на крају мозда цак покренете више различитих машина радилице које су оптимизоване за сваку врсту посла (мада да се удаљавају из 'генерички радника 'идеја). Увек покушајте да размишљају о будућности када се развијају системе, краткорочни визија може довести до дугорочније фрустрације и повећаног развоја времена.

Посао сервер

Идемо негде да треба да контролише свој посао из, ово би требало да буде једини систем у координатној мрежи која има фиксну Ресоурце Лоцатор, бити да ИП адреса, име домаћина, УРЛ адреса (користећи интерни ДНС), итд То је зато што радници треба да знају где да потраже посао, радници треба да пронађу посао контролни систем (није посао систем контроле наћи радника).

Посао сервера се заиста не имати компликован задатак (у основном систему свакако), потребно је да сачувате листу радних места, од руке посла, добијају резултате, а потом их сачувате за касније прегледавање. Како су дефинисани ови делови (као што су "из руке посла ') може бити врло основни. Касније можемо да прошири систем да обухвати интерфејс управе да додајете, мењате, бришете, суспендује посао али то је ван ове вежбе.

Нема разлога онда да ваш сервер посао не може бити виртуелна машина ради у оквиру свог главног сервера за обраду под условом да не празни превише средстава из њега. Посао сервера међутим не треба високу доступност, ако иде доле на петак увече када имате да изгубите цео викенд обраде, потенцијално вам кошта неколико недеља у вредности од времена обраде (у односу на свог главног сервера за обраду алоне) . Можда ћете желети да размотрите свој посао стављањем сервер на оптерећења уравнотеженом окружењу за високу доступност.

Основна подешавања

Основна поставка за наш посао сервера ће се састојати од онога што ја зовем један од мојих Лимп сервера (који је Ли нук, иСкл м, п кс). Код ради на Тхеа радника ће заправо радити шта Послови може покренути по интеракцији са посла са базама података контролних система. Касније смо могли креирати веб сервис и заправо руку радних места уместо да радници раде напоран рад се, али за сада ћемо наставити користећи принцип КИСС (Кееп ит симпле, ступид!).

Дакле, омогућава креирање три МиСКЛ табеле да се баве пословима. То ће бити `Послови`, `јобРецордс`, `и` јобРесултс.

Послови у табели Ево ја користим СКЛ Будди велики мало алтернативу пхпМиАдмин само зато што њено лакше инсталирати на ЦентОС (за други виде: 10 Греат алтернатива пхпМиАдмин )

Ова табела се састоји од 5 једноставних поља,

  • ИД: јединствено идентификују посао
  • Назив: Могао би бити клијент референца, или било који број од осталих идентификатора
  • Статус: Ви треба да знате где је посао на, нпр
    • 0: није почео
    • 1: покупили
    • 2: Завршено
  • стартед_би: Ко је поцео да ради тај посао? Ово није у потпуности обавезно, али је лепо имати. Хтео предлажемо праћење радника од њихове ИП адресе на мрежи
  • стартед_ат: Када је радник започнете посао? Праћењем послове које нису попуњене у износу од Кс времена знамо да треба да покупи посао поново почети обраду и од стране другог радника. Радници могао зауставити обраду / го ту за било који број разлога, нестанка струје, пада система, губитка мреже, итд

Лако је како би ова табела може проширити са неколико додатних поља да би се омогућило праћење статистике и финиш време колоне да бисте видели колико је посао, бројач да бисте видели колико радници покупили посао (наравно ово треба да имају тенденцију да 1), приоритет посао, листа може да иде на и на. У сложенијим сценаријима за посао било би могуће да одредите колико меморије радник ће морати приступ (и зато користите само одговарајуце раднике), или чак и оно што тип радника бити потребно.

Хајде да додате неколико послове примере:

Послови пример

Наредна табела поново је прилично једноставан за разумевање, ово је наш посао записа. Они су повезане на главној табели радних места колони `јобс_ид`. Чине ове табеле веома много зависи од података који су вам потребни за снабдевање вашим радницима, омогућава да веома једноставан пример где имамо четири колоне:

  • ИД: ИД записа
  • Име: име особе
  • 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.

Као што је речено раније, и не може бити више нагласио, изгради толеранцију грешке у проналажењу посла и достављање резултата. Радници могу (и највероватније ће) ићи у суспенд режиму у већини незгодно пута и то треба да буде за цатеред. Такође, још једном апстрахујући своје резултате у гостима поднесак ће помоћи задовољава будуће промене у вашем систему контроле посао много лакше да се баве.

Резиме

У овом сецтионА смо посматрали шта посао контроле сервера треба да уради и како да се врло основни систем поставили. Разговарали смо о томе како да преузме посао од управљачког система и како најбоље да подесите да добијете посао највише наших вашег система канцеларијског мреже. Да завршим, став или две о достављању резултата натраг на серверу посао контроле је представљен.

  • Посао контроле сервера управља радних места и осигурава да су завршене све радне јединице
  • По свој посао апстраховања изаберите / Резултати подношење можемо да променимо технологију контролног сервера без много проблема
  • Конфигуришите своје послове како би се осигурало да су покренути брзо и ефикасно без стављања превише притисак на вашем мрежне инфраструктуре, и без умножавање обраду задатке на редовној основи.
  • Уверите се да изгради толеранцију грешке и грешке у цхецкингА ваше рутине, радници могу обуставити и наставити и већина незгодно пута. Не заборавите да проверите да ли су резултати већ поднет од стране другог радника.

Следећи пут

У делу 3 ми ћемо креирати нашу виртуелну машину за прераду и поставили наши прозори машине да постане неактиван-тиме радници.

Канцеларија Грид користећи виртуелна окружења - 5. део

Би и петак, 4. децембар 2009 11:03 ам

Увод

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

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

Pre-Deployment

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

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

There's also additional questions:

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

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

Развој

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

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

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

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

Стоп!

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

Demonstration System

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

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

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

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

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

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

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

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

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

Conclusions / Evaluation

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

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

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

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

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













Панорама Тхеме Тхемоцраци

6 visitors online now
3 guests, 3 bots, 0 members
Максималан број посетилаца данас: 22 ат 07:35 ам УТЦ
Овог месеца: 26 04-04-2012 у 10:27 пм УТЦ
Ове године: 69 27-02-2012 у 09:56 пм УТЦ
Све време: 130 на 28-03-2011 10:40 ПМ УТЦ