Категория: PHP

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

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

С оглед на преките искания за / sitemap.xml потребителски контролер и действия в прилагане на Рамковата Zend просто добавете следното в application.ini или алтернативни конфигурационен файл (например I използва navigation.ini) :

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

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

 < PHP
 клас IndexController
     разширява Zend_Controller_Action
 {
     / **
      * Правят карта на сайта, на базата на Zend_Navigation настройка
      * /
     публична функция sitemapAction ()
     {
    	 ехо $ това-> View-> навигация () -> карта на сайта ();
    	 -> View-> оформление () -> disableLayout ();
    	 $ _helper-> ViewRenderer-> setNoRender (вярно);
     }
 }

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

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

От , петък 1 януари 2010 22:40

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

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

  / Приложение
     / Контролери
         ...
     / Модели
     / Модули
         / По подразбиране
             / Контролери
             / Оформление
                 / Скриптове
             / Изгледи
                 / Скриптове
         / 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 ();
    
    	     ако ($ Bootstrap = $ това-> getActionController ()
    	                        -> GetInvokeArg (Bootstrap ")) {
    
    	         $ Довереник = $ Bootstrap-> getOptions ();
    
    	         ако (isset ($ конфиг [$ модул] ['ресурси'] ['оформление'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Конфиг [модул] ['ресурси'] ['оформление'] ['layoutPath "];
    	             $ Това-> getActionController ()
    	                  -> GetHelper ("оформление")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. И накрая boostrap помощник за действие:
      ...
         / **
          * Задава оформлението скриптове на на модулен принцип
          * /
         Функция за защита _initLayoutHelper ()
    	 {
    	     $ Това-> Bootstrap ("frontController");
    	     $ Оформление = Zend_Controller_Action_HelperBroker: addHelper (
    	         ново Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Доктрината: подразбиране DATETIME NOW ()

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

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

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

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

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

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

PHP Design Patterns - Observer Pattern

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

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

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

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

Продължи четене "PHP Design Patterns - Observer Pattern" »

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

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

Въвеждане

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

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

Работещи последните код

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

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

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

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

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

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

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

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

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

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

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

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

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

Обобщение

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

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

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

Grid Computing Виртуалните среди - Част 3

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

Въвеждане

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  #! / Хамбар / SH
 Ако PS брадва | Впиши срещу Впиши | Впиши PHP> / Dev / нула
 след това
     ехо "Заетост в момента преработка, излизане"
 още
     ехо "работа не е стартиран, започнете сега"
     PHP yourJobProcessingScript.php
 FI 

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

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

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

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

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

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

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

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

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

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

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

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

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

разписание

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

Обобщение

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

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

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

Grid Computing Виртуалните среди - Част 1

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

Въвеждане

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

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

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

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

Защо да се мобилизират Grid Computing на Office?

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

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

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

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

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

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

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

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

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

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

Технологии

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

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

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

Видовете на работни места, че тази система е проектирана да работи е както следва:

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

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

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

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

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

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

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

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

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

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

Grid Computing Виртуалните среди - Част 2

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

Въвеждане

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

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

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

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

  • Раздайте работни места при поискване от работещите в
  • Кажете на работниците, какъв вид на работните места да тече
  • Track работни места
  • Уверете се, че работните места са се изпълнява само веднъж
  • 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.

Job 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

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

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

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

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

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

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

Job Configuration

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

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

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

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

Submitting Results of a Job

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

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

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

Обобщение

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

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

Next time

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

Grid Computing Виртуалните среди - част 5

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

Въвеждане

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

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

Разгръщането на Pre-

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

  • колко записи могат да се обработва в момента? На ден? В час?
  • Колко време обикновено се предприемат, за да се обърнеш на работа?
  • Колко по-голям капацитет да имате?

Има и допълнителни въпроси:

  • Ако вашият обработка на сървъра (или един от вашите обработка сървъри), как ще се отрази това на Вашите възможности, ще Ви бъде осакатен?
  • Какви предимства се надявате / очаквате да получите от мрежата?
  • Вашите офис машини може да работи на работни места?
  • Вашите (или може да бъдат превърнати ви работни места), за да работят в този стил на работа?

Последната голяма точка е да ви отнеме малко време, за всяка значителна промяна като тази. Актуализирайте код за обработка, за да работи отново с помощта на нова методика, БенчМарк. Възможно е да настроите вашия сървър за преработка, за да стартирате виртуална машина, след всички ваши обработка на сървъра ще бъде само работник (само един много мощен едно относително). Оставете на нов процес за уреждане.

Разгръщане

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

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

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

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.

Zend Framework: Основи - Общ преглед

От , събота 28 ноември 2009 22:42

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Фон

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

За състезанието

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Обобщение

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.












"Панорама" Тема чрез Themocracy

10 посетители онлайн
8 guests, 2 bots, 0 members
Макс посетители днес: 11 в 02:07 ч. UTC
Този месец: 47 най-10.3.2011 г. 14:47 UTC
Тази година: 130 в 28-03-2011 22:40 UTC
През цялото време: 130 в 28-03-2011 22:40 UTC