Dynamicznie dodawać strony do pojemnika Zend_Navigation przy starcie

Przez , czwartek 07 stycznia 2010 22:50

W kontynuacji na mój ostatni post o Zend_Navigation, żądań do sitemap.xml do niestandardowych kontroler / akcja , ten post jest o dymnamically dodawania stron do pojemnika Zend_Navigation przy starcie / script wykonania.

To wszystko dobre i określając swoje strony w ini lub xml pliku, ale w pewnym momencie będziemy mieli zmianę stron witryny, która ma być częścią menu, mapa strony, lub które zostaną włączone w breadcrumb szlaku. W związku z tym, co musimy zrobić, to dodać strony do naszego kontenera Zend_Navigation przy starcie. Przykłady byłoby to w pozycji dodanie wiadomości, blogach, lub stronę z komentarzami, itp.

Kontynuuj czytanie "Dynamicznie dodawać strony do pojemnika Zend_Navigation przy starcie" »

Żądań do sitemap.xml do niestandardowych kontrolera / akcji

Przez , środa 06 styczeń 2010 00:13

W celu bezpośredniego żądania / sitemap.xml do niestandardowego kontrolera i akcji w Zend Framework aplikacji wystarczy dodać następujące w application.ini lub alternatywny plik konfiguracyjny (np. używam navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = index
 resources.router.routes.sitemap.defaults.action = mapa

Przykładowy kod do wyświetlania widać, tworząc działania odpowiedniego kontrolera (np. mój mapa leży w kontroler indeksu działania mapa):

 < php
 Klasa IndexController
     rozszerza Zend_Controller_Action
 {
     / **
      * Renders mapa strony na podstawie ustawień Zend_Navigation
      * /
     publicznych sitemapAction function ()
     {
    	 echo $ this-> view-> nawigacji () -> Mapa strony ();
    	 $ This-> view-> układ () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps można szybko i łatwo być generowane przy użyciu Zend_Navigation , wielki szybkie kursu (i ogólnie bardzo przydatne dla Zend Framework samouczki) jest Zend Odlewy - Dynamiczne tworzenie menu mapa i bułce tartej .

Zend Framework za moduł placówkach

Przez , piątek 01 stycznia 2010 22:40

Stworzyłem nawiązaniu do tego postu, która wymaga mniej konfiguracji, patrz Moduł podstawie układu - Zend Framework .

Przy użyciu Zend Framework z modułów, że jeśli używasz różnych (pod) strony od samej aplikacji nie koniecznie chcą tego samego oczywistych skrypty układ dla każdej części. Postanowiłem pójść z następującą strukturę strony:

  / Application
     / Controllers
         ...
     / Modeli
     / Modules
         / Default
             / Controllers
             / Układ
                 / Scripts
             / Views
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Problem polegał na tworzeniu skryptów układ na zasadzie per-moduł. Odpowiedź przyszła za pomocą Helper działania. Konfigurowanie układów na zasadzie per-moduł z trzech etapów:

  1. Application.ini (lub podobnych ustawień konfiguracyjnych):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouts / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layouts / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / member / layouts / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layouts / scripts" 
  2. Tworzenie Helper działania:
      <? Php
     / **
      * Ustawia ścieżkę układ na zasadzie per-moduł
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Od 01.01.2010
      * /
     klasy Pro_Controller_Action_Helper_SetLayoutPath
         rozciąga Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Ustawia ścieżkę układ oparty na module
          * /
         publicznych preDispatch function ()
         {
        	 $ Module = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ("bootstrap")) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ module] ['zasobów'] ['układ'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ module] ['zasobów'] ['układ'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ("układ")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. I wreszcie boostrap pomocnika działania:
      ...
         / **
          * Ustawia skrypty układ na zasadzie per-moduł
          * /
         Funkcja ochrony _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ("frontController ');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         nowych Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doktryna: default DATETIME NOW ()

Przez , środa 30 grudnia 2009 18:30

Byłem zmaga się z utworzenia schematu bazy danych na nowy Zend Framework projektu. Jestem za pomocą próbuje używać Doctrine ORM dla moich modeli, bazy danych. I potrzeba utworzenia schematu tak, że pozwolił mi ustawić domyślną datę i czas na `datetime` kolumny, np. po dodaniu nowej wiadomości pojawia się aktualny timestamp. Po długich poszukiwaniach i eksperymentowanie znalazłem rozwiązanie, więc jestem jego udostępniania.

W schemacie YAML plik, wykonaj następujące czynności:

 Wiadomość:
   actAs:
     Timestampable:
       utworzony:
         Imię: created_at
         Typ: timestamp
         format: Ymd H: i: s
       aktualizacja:
         Imię: last_updated
         Typ: timestamp
         format: Ymd H: i: s
   kolumny:
     id:
       typ: integer
       podstawowej: true
       autoincrement: true
     nazwa: string (255)
     email: string (300)
     wiadomości: smyczkowy (2000)

Jeśli natomiast nie chcesz `updated_at` kolumnie można użyć następujących czynności:

 Wiadomość:
   actAs:
     Timestampable:
       utworzony:
         Imię: created_at
         Typ: timestamp
         format: Ymd H: i: s
       aktualizacja:
         osób niepełnosprawnych: prawda
   kolumny:
     id:
       typ: integer
       podstawowej: true
       autoincrement: true
     nazwa: string (255)
     email: string (300)
     wiadomości: smyczkowy (2000)

Wzory PHP Design - Wzorzec Obserwator

Przez , wtorek 29 grudnia 2009 22:02

Czytałem Head First Design Patterns niedawno i postanowiłem napisać kilka wzorów jak PHP przykłady dla własnej korzyści. Pierwszy z nich, że zdecydowałem się kod jest Wzorzec Obserwator . Formalna definicja Wzorzec Obserwator jest:

Wzorzec obserwator (podzbiór asynchroniczne publikacji / subskrypcji wzór ) jest oprogramowanie wzorca projektowego , w którym obiekt , zwany temat, utrzymuje listę jego utrzymaniu, zwany obserwatorów, i powiadamia je automatycznie o wszelkich zmianach stanu, zazwyczaj przez wywołanie jeden z ich metod . Stosowany jest głównie do realizacji rozproszonych systemów obsługi zdarzeń.

Ponieważ systemy bardziej luźno upewniając się, że gdy zdarzenie dzieje się we wszystkich systemach, które wymagają wiedzy na temat tych aktualizacji są informowani. Na przykład, na blogu, po zapisaniu postu możemy być zmuszeni do aktualizacji wyszukiwarki (np. Lucene), aktualizacja naszej sitemap, tagi, e-mail subskrypcji użytkowników, itp. wzorzec obserwatora pozwala programistom na dodatkowe słuchaczy bez edycji ich obserwacji obiektu . Poprzez wstrzyknięcie obserwatorów (tj. wyszukiwarki aktualizacja obserwatora, sitemap generator, itp.) do podmiotu (blog tj. po edycji systemu) możemy pozwolić mu wykonać wszystkie niezbędne aktualizacje bez zmian.

Kontynuuj czytanie 'Desenie PHP Design - Wzorzec Obserwator "»

Grid Computing Office przy użyciu wirtualnych środowiskach - część 4

Przez , piątek 04 grudzień 2009 23:59

Wprowadzenie

Pracuję w firmie, w której prowadzimy wiele zadań przetwarzania wsadowego milionów rekordów danych każdego dnia i Myślałam ostatnio o wszystkie maszyny, które siedzą w każdy dzień nic nie robi przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn do wzmocnienia mocy obliczeniowej naszego systemu? W ten zbiór artykułów będę patrzeć na potencjalne korzyści z zatrudniania biura sieci za pomocą środowisk wirtualnych.

W części 3 stworzyliśmy maszynę wirtualną przetwarzania i skonfigurować Windows na bezczynność wymiarze czasu pracy.

Z najnowszej kod

Nieuchronnie po utworzeniu firmy pracowników logiki zmieni, błędy będzie można znaleźć, szybszy bardziej wydajnego kodu będą produkowane w ten sposób pozostawiając pracowników siedzieli przetwarzania danych przy użyciu starych śmierdzących kod . Jak więc mamy pewność, że zawsze jesteśmy z wykorzystaniem najnowszych i najlepszych wersji skrypty przetwarzania?

Istnieje kilka prostych sposobów, bardzo łatwo możemy to zrobić, sztuczka, jednak jest ograniczenie mocy przetwarzania i ruchu sieciowego w realizacji tego celu. Zacznijmy od najprostszych rozwiązań i udoskonalamy je powoli przez kilka iteracji.

Pierwsza metoda byłoby po prostu podłączyć do naszego serwera kontroli pracy (poprzez samba, FTP, lub podobne) i pociągnij w dół najnowszą wersję kodu. Nie bardzo wydajny, ale będzie to robić w pracy. Pozwala poprawić, że trochę, jak na temat tworzenia i korzystania z rsync skrypt, że za każdym razem zamiast? Ewentualnie co o wprowadzenie naszych najnowszych skrypt przetwarzania na subversion przeglądając kod na początku, a potem po prostu aktualizacji naszego kodu na każdym biegu ( svn update )?

W końcu mogliśmy skończyć z skrypt (uruchamiane przez cron co 10 minut), który wygląda tak proste, jak to:

  #! / Bin / sh
 jeśli ps ax | grep-v grep | grep php > / dev / null
 następnie
     echo "Praca jest przetwarzanie, zjazd"
 więcej
     echo "Praca nie jest uruchomiony, już teraz"
     cd / ścieżka / do / pracy / kopiowania
     svn update
     php yourJobProcessingScript.php
 fi 

Teraz możemy być pewni, że z każdego biegu jesteśmy zdecydowanie zainstalowany najnowszy kod. Mamy zapewnienie, to przez aktualizację naszej bazy kodu za każdym razem wykonujemy uruchomić i zmniejszenie ruchu w sieci tylko przez przeniesienie różnice pliku w naszej sieci.

W mojej instalacji demonstracyjnych, zrobiłem dokładnie tak jak powyżej. Subversion został zainstalowany na moim serwerze realizacja zadań i po prostu wyciągnął ostatni kod z "pracownik" oddziału przy "svn update". Dodałem też tag numer wersji do przetwarzania skryptu, który został zwrócony do bazy danych jako część przychodów z wyników. W ten sposób mogłem zobaczyć, że mój kod był aktualizowany za każdym razem kopiowane moim pniu do oddziału tj. pracownika, że ​​jestem zdecydowanie z najnowszej skrypt przetwarzania.

Korzystając z najnowszych danych

Jeśli realizacja zadań sprawia, że ​​wykorzystanie źródeł danych, a następnie w pewnym momencie te będą aktualizowane zbyt. Chyba zadzwonić do źródeł danych na podstawie bardzo rzadko będziesz powodzi sieci z ruchu jak tylko pracownicy zaczną przynosząc wszystko do zatrzymania. Na moje rozwiązanie zdecydowałem, że chciałbym przenieść źródeł danych wokół z moich maszyn wirtualnych.

Trzymaj jesteś konie tam! Co zrobić, jeśli źródła danych są OGROMNE? No to naprawdę przypadku, jak dużo danych mówimy? Może to być bardziej opłacalne zainstalować dodatkowy większy dysk na każdym komputerze, niż na zakup dodatkowego serwera przetwarzania. To jest kwestia budżetu i do działalności na decyzję. To może, że źródła danych są tak duże, że jej po prostu niemożliwe do utrzymania, że ilość danych w maszynach pracownika. W takim przypadku co byś zrobił? Cóż możemy spojrzeć na powołanie lokalnego serwera danych, ale może to powodować problemy z siecią. W tym przypadku system sieci, takich jak ten może stać się nierealny umieścić w swoim biurze. Może być również, że można spojrzeć na alternatywnych strategii działa, na przykład tylko dzwoniąc do pracowników między 8pm i 6 rano każdej nocy i / lub ograniczanie żądań danych źródłowych.

Przechodząc powiedzmy, że nasze dane ilość źródeł do 100GB danych. No tak to trochę danych do poruszania się po sieci aktualizacji. W jaki sposób mamy pewność, że mamy najnowszą kopię danych w tym przypadku? Rsync jest możliwość, ale osobiście uważam, uruchamiając źródłem najnowszych danych na serwerze realizacja zadań i konfigurowania tej funkcji jako mistrz w replikacji (z ładnym log długo bin) może być droga:

replikacji Przez ustawienie każdego z pracowników się jako niewolnik do aktualizacji kontroli pracy serwera do źródeł danych będzie ładnie spływa do pracowników bez ogromny wzrost aktywności sieciowej (która jest chyba wykonać duże uaktualnienie danych i wszystkich pracowników kopa na raz). To ma przewagę nad rsync tym, że nie dostanie długiej przerwie przed każdym zadaniem, jako aktualizacje bazy danych, mysql demona na Twój pracownik będzie stale aktualizować swoje dane a przetwarzanie kontynuowane.

W ten sposób mogę skonfigurować serwer demonstracji. Aby skonfigurować replikację I tego poradnika na stronie MySQL ( Konfigurowanie replikacji ) iw ciągu 20 minut miałem początkową pracownika replikacji serwerów pracy kontrola zestawu danych. Dla każdego dodatkowego pracownika ustawienia replikacji i procesu pracował każdym razem, gdy VM został skopiowany.

Streszczenie

W tej części artykułu przyjrzeliśmy się, jak łatwo i bezboleśnie to by utrzymać swój kod przetwarzania na bieżąco przez using rsync lub subverion (SVN) do pracy i zmniejszyć ruch w sieci w tym samym time. także zastanawiali się, jak zachować źródła danych informacji up-to-date, pozwalając mu spływa do każdego z pracowników. W ten sposób obszar zapewnienie, że my na bieżąco z logiki biznesowej i informacji w systemie sieci biurowych. Nie będzie oczywiście niezliczone alternatywy dla wykonywania tych zadań, ale tu były dwa proste przykłady, aby pokazać, jak łatwo jest rozwiązaniem do zdobycia.

Następnym razem

W końcowej części tej serii, nazwanej Część 5 , omówimy wdrażania tego systemu. Ja podsumować to, co już się nauczyliśmy i co udało mi się stworzyć.

Grid Computing Office przy użyciu Wirtualne środowiska - Część 3

Przez , piątek 04 grudzień 2009 23:37

Wprowadzenie

Pracuję w firmie, w której prowadzimy wiele zadań przetwarzania wsadowego milionów rekordów danych każdego dnia i Myślałam ostatnio o wszystkie maszyny, które siedzą w każdy dzień nic nie robi przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn do wzmocnienia mocy obliczeniowej naszego systemu? W ten zbiór artykułów będę patrzeć na potencjalne korzyści z zatrudniania biura sieci za pomocą środowisk wirtualnych.

W części 2 przyjrzeliśmy się pracy serwer będzie działał, a jak miejsca pracy powinny być skonfigurowane w celu osiągnięcia największej ilości przetwarzania przy jednoczesnym zapewnieniu, że każde zadanie jest przetwarzane bez przerwy.

Konfigurowanie pracownika - czy Limp serwer

Kolejnym krokiem w procesie jest utworzenie wirtualnego pracowników. Do tego mam zamiar używać instalacji CentOS pomocą VirtualBox. Mam zamiar zainstalować MySQL i PHP na serwerze, znany również jako Limp (NUX Li, m ySQL, P HP) Servera (może zrobiłem, że nazwa góry).

  • Instalacja VirtualBox na maszynie z Windows (zgodnie link)
  • Pobierz i zainstaluj CentOS (aktualna wersja 5.3) w utworzonych maszyn wirtualnych

Nie ma sensu mnie będzie to tam prawdopodobnie 1000 's wielkie samouczki tam (ok, jest jeden: Tworzenie i Managing CentOS maszyny wirtualnej pod virtualbox ). Najważniejsze, aby pamiętać Przypuszczam, że zadzwoniłem do mojej maszyny wirtualnej GridMachine.

Jeśli chodzi o moje wybory klienta wirtualizacji i system operacyjny go nie ma duży powód, dla każdego wyboru. VirtualBox jest coś używam na moim domowym komputerze i jest obsługiwany przez trzech głównych systemach operacyjnych. Wybrałem CentOS jak jego dobry OS stabilny i używam go na własnym serwerze WWW. Jestem wielkim zwolennikiem odpowiednie narzędzia do pracy (chociaż jestem stosowania "użyć najszybszy i najłatwiejszy dla Ciebie" mentalności tutaj), więc jeśli system operacyjny X działa kod szybciej i efektywniej wykorzystać, że zamiast:)

Ważne jest upewnić się, że VM używa serwera DHCP, w przeciwnym razie za każdy nowej maszynie wirtualnej musiałby być konfigurowane oddzielnie, która jest czymś, czego nie want.By za pomocą DHCP nie musimy konfigurować ustawienia sieci indywidualnie dla maszyn pracownika, DHCP strony IP dla ciebie. Dlatego można skopiować maszynę wirtualną o biurze nie martwiąc się o ustawienia każdy egzemplarz (poprawia skalowalność i zmniejsza administracji pracownika).

Proces należy dążyć do osiągnięcia byłoby uzyskać nowe maszyny fizycznej, zainstalować VirtualBox, a następnie prawie uruchomienie wirtualnego obrazu bez wielu innych rzeczy. To może być mądry, aby ustawić wszystkich pracowników w innej podsieci, tak aby można przynajmniej zobaczyć, jak wiele maszyn są uruchomione. Trzeba także skonfigurować komputery w długoterminową dzierżawę lub nieograniczone dzierżawy DHCP.

Jak uruchomić Praca na pracownika

Jest to interesujący obszar i istnieje kilka ważnych metod przetwarzania pracy na pracownika. Tu po prostu omówić dwie najbardziej oczywiste:

  • Wiecznie uruchamianie skryptów: Skrypt, jest to skrypt powłoki lub skryptu PHP jest wykonywana raz na pracownika i działa jako część nieskończoną pętlę. I już zdyskontowana tej metody jako jeden błąd w skrypcie i potencjalnie Twoi pracownicy przestaną działać bez jakiejś interwencji.
  • Cron na wykonanie skryptu: co X minut demona cron rozpoczyna się wezwaniem do skryptu, aby rzeczy się dzieje. Bez pewnej kontroli może to prowadzić do wielu, wielu kopii uruchamianie skryptów pracownika.

Moja decyzja była iść z cron, który rozpoczyna się skrypt co 10 minutes. Mój skrypt wykonuje następujące zadania:

  1. Pobierz listę procesów i grep to dla "php". Jeśli nie zostanie znaleziona następnie kontynuować.
  2. Wywołać kod pracy, w moim przypadku byłoby to coś na PHP
  3. Skrypt pracownik kończy swój bieg
  4. Gotowa do pracy ponownie na kolejne wywołanie odpowiedniego

Mój skrypt wygląda tak:

  #! / Bin / sh
 jeśli ps ax | grep-v grep | grep php> / dev / null
 następnie
     echo "Praca jest przetwarzanie, zjazd"
 więcej
     echo "Praca nie jest uruchomiony, już teraz"
     php yourJobProcessingScript.php
 fi 

Uwaga: echo są niemal całkowicie pozbawione sensu, ale może pomóc kolejna osoba, która przychodzi, aby spróbować ich edycji.

, Który kończy skonfigurować pracownika maszynie wirtualnej, szybkie, proste i łatwe do skopiowania do każdego elementu sprzętu, który jest odbierany. "Spryt" systemu sieci naprawdę nie jest w wizualizowane OS, to wszystko zrobić z kod stworzony do procesu pracy, konfiguracji pracy, a w upewniając się, że zadanie jest uruchamiane w razie potrzeby (np. gdy komputer jest bezczynny ).

Konfigurowanie systemu Windows do Initialise pracowników

Pierwszym zadaniem jest wypracowanie polecenia konieczne do uruchomienia maszyny wirtualnej z linii poleceń Windows. Jeśli zainstalowałeś VirtualBox w domyślnej lokalizacji, a ty o nazwie Twój pracownik GridMachine to polecenie musi doładować pracownik jest:

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

Jednak, aby uruchomić skrypt w "głowy" państwa musimy użyć:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Spowoduje to uruchomienie maszyny wirtualnej bez GUI i pozwalają na zapisanie stanu wdziękiem. Drugi argument wyłącza PROW więc nie jest to sprzeczne z okna RDP, lub przekazać wiadomość o nasłuchuje na porcie 3389. Nazwę maszyny wirtualnej jest wielkość liter!

Następnie musimy ustawić okien do inauguracją naszej VM pracownika, gdy maszyna jest w stanie bezczynności. Aby to zrobić (w Windows XP) musisz iść Start -> Wszystkie Programy -> Akcesoria -> Narzędzia systemowe -> Zaplanowane zadania jak poniżej:

zaplanowanych zadań

Następnie kliknij na "Dodaj zaplanowane zadanie", a następnie przeglądać, aby dodać własny program. Przejdź do skryptu VBoxManage i kliknij OK. Zaplanuj zadanie dla każdej z opcji (my to zmienić w ciągu minuty) i kontynuować. Po pominięciem następnego ekranu Windows zapyta Cię, który chcesz uruchomić to zadanie, to proponuję albo "Administrator" lub tworzenia nowego uprzywilejowanego użytkownika. Pamiętaj, że nie chcemy ingerować w standardowe konto pracowników na maszynie w dowolnym momencie. Kliknij przycisk Dalej i zaznacz Pokaż zaawansowane opcje do tego zadania.

Do końca pola tekstowego uruchomić dodać nasz string 'startvm GridMachine "i zapewniają, że działają tylko po zalogowaniu się w lewo Brak zaznaczenia. Odwiedź harmonogramu zadań obok i zmienić harmonogram rozwijanej do opcji "stanie bezczynności", wybierz czas, chcesz, aby komputer był bezczynny przed przejściem do następnej karty.

Na koniec usuń zaznaczenie opcji, który stanowi zakończyć zadanie, jeśli prowadzi kwotę X czasu, ale zaznacz opcję, aby zatrzymać zadanie, jeśli urządzenie nie jest bezczynny.

harmonogram

To wszystko to dla instalacji systemu Windows gospodarzem!

Streszczenie

W tej części musimy ustawić maszynę wirtualną do działania jako pracownik, jak i sposób, w jaki nazywamy i wykonywać skrypty przetwarzanie zadania (dla siebie skrypt PHP). Stąd przyjrzymy się, jak skonfigurować nasze kopie systemu Windows do uruchomienia maszyny wirtualnej w trybie bez głowy, gdy komputer staje się w stanie spoczynku, i zapisać swój stan, gdy użytkownik wznawia użytkowania urządzenia. Mam nadzieję, że w tym momencie widzisz, jak łatwo jest stworzenie takiego systemu i rwą się pewne eksperymenty dzieje się!

Następnym razem

W części 4 zajmiemy się korzystać z narzędzi, aby zapewnić, że korzystasz z najnowszej wersji kodu i źródeł danych, tak aby uzyskane wyniki są zawsze na bieżąco z najnowszymi informacjami i logiki biznesowej.

Grid Computing Office przy użyciu Wirtualne środowiska - Część 1

Przez , piątek 04 grudzień 2009 23:23

Wprowadzenie

Pracuję w firmie, w której prowadzimy wiele zadań przetwarzania wsadowego milionów rekordów danych każdego dnia i Myślałam ostatnio o wszystkie maszyny, które siedzą w każdy dzień nic nie robi przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn do wzmocnienia mocy obliczeniowej naszego systemu? W ten zbiór artykułów będę patrzeć na potencjalne korzyści z zatrudniania biura sieci za pomocą środowisk wirtualnych.

W PHP developer będę używać narzędzi, które używam codziennie a mianowicie, Linux, MySQL , PHP, VirtualBox i Subversion (SVN). Jednak mam nadzieję, że ten przewodnik będzie dostosować się do innych języków i technologii tak samo dobrze.

Rozwiązanie, dostarcza będzie bardzo luźno oparty na rodzaj obróbki musielibyśmy osiągnąć jednak nie może być prawda cały artykuł, jak będę coś zmienić dla uproszczenia, lub do produkcji bardziej interesujące scenariusze użycia.

Tych środowisk wirtualnych będzie działać na komputerach z systemami Windows, ponieważ jest to, co większość z biura prowadzone. Przetwarzanie, że urządzeń biurowych nie powinny kolidować z pracowników przy użyciu tych maszyn, konieczne jest nie wymagają konserwacji na maszynie, i być łatwo rozmieszczenia nowych urządzeń w miarę ich udostępniania. Ponadto, nowe maszyny wirtualne nie powinny wymagać żadnej dodatkowej konfiguracji, ponieważ znacznie zmniejsza skalowalność i łatwość, z jaką systemu sieci może zostać przedłużona.

Dlaczego Wdrażanie Grid Computing Office?

Po pierwsze może być myślenie, dlaczego nie korzystać z zasobów cloud computing, takie jak platformy Amazon EC2 jest ? Cóż, powodów może być kilka, na przykład:

  • Nie będzie powierzyć niektóre dane do środowiska cloud computing
  • Nie można podawać niektórych danych do środowiska cloud computing z powodów prawnych (np. dane opuszczania kraju), co może ze względów prawnych, np. rekordy NHS.
  • Chcesz zachować swoje jednostki przetwarzania blisko i mieć pełną kontrolę nad sprzętem za
  • Nie masz funduszy projektu w celu uruchamiania wystąpień chmury
  • Twoje biuro nie ma połączenia z internetem i dlatego jej nie można skorzystać z zasobów cloud
  • Nie lubisz deszcz, chmury sugerują, deszcz, więc trzymać z dala

Jestem pewien, że na liście mogą trwać nadal, ale myślę, że to na razie wystarczyło.

Zalety Grid Computing Urzędu

Cóż, pozwala zrobić kilka matematyki (i fizyki w prawdziwym stylu pozwala poczynić pewne założenia zamiatanie). Wyobraź sobie, że duży silny serwer przetwarzania działa 100 miejsc pracy dziennie. W biurze masz 50 maszyn, które są bezczynne 16 godzin dziennie, każdy z tych maszyn jest 10% tak potężny jak silny serwer przetwarzania. (Wszystkie wyniki tutaj są zaokrąglone do niedoceniania wzrost wydajności).

Tak więc, 1 maszyna * 10% mocy * 2 / 3 czasu = 0,067 tj. 1 przetwarzania pulpitu w bezczynności może przetwarzać 6 pełnych etatów na dzień.

Jeśli teraz skala to do niego w 15 idle komputerów do procesu, jak wiele miejsc pracy dziennie jako główny serwer przetwarzania nie.

Tak więc w naszym udawać, że urząd 50 maszyn możemy zwiększyć moc obliczeniową od 1 serwer do 4 pełne serwery przetwarzania, lub moglibyśmy być przetwarzania 400 nowych miejsc pracy dziennie zamiast 100.

Zwróćmy uwagę, bez inwestycji w nowy sprzęt Twoja firma ma tylko zwiększył swoją zdolność przetwarzania wsadowego 4 razy! Potencjalnie masz zamiar zwiększyć swoje zużycie energii, ale z większości środowisk biurowych Byłem maszyn ogół pozostawia na noc, tak więc można było zobaczyć to jako zielone inicjatywy.

Inne zalety również oznaczać, że inwestycje w nowe (lub aktualizacji) serwery przetwarzania mogą zostać opóźnione w przypadku maszyn biurowych są wystarczające i że jak poprawić moc swoich maszyn biurowych Twojej sieci biuro staje się potężniejsza automatycznie.

Technologies

Co jest potrzebne? (Lub bardziej poprawnie, co nie korzystałem):

  • Idle urządzeń biurowych (w moim przypadku części starych okien laptopa XP)
  • VirtualBox (lub innego oprogramowania klienckiego wirtualizacji)
  • Maszyny wirtualnej z PHP, mySQL running prowadzenia obniżyć OS, dzwonię tych moich Limp serwerów:)
  • Praca uruchomić
  • Serwer pracy (może być inny maszyny wirtualnej gdzieś)

Typowe Praca

Rodzajów pracy, że ten system jest przeznaczony do uruchamiania jest następująca:

  • System odbiera dane w postaci listy, na której musimy meczu i powrotu wyników
  • Dopasowanie polega na sprawdzeniu / wyszukiwanie kilka (dość statyczne) źródeł danych
  • Wyniki ze źródeł danych mogą wymagać dalszej oceny, łączenia, sprawdzanie dodatkowych źródeł danych w odpowiedzi na wyniki
  • Dane zwracane z pasujące rekordy, w pełni zwalidowane i przetwarzane
  • Każdy rekord w pracy jest niezależny od pozostałych

Więc w zasadzie patrzymy na uruchomione zadania, które wymagają mieszanki zapytań do bazy danych, a niektóre crunching numer, dość typowy scenariusz w środowisku biznesowym.

Rozwiązania sieci są nie tylko korzystne dla przetwarzanie zadań tego typu. Zasadniczo, każdy proces, który może być podzielony na niezależne jednostki mogą być prowadzone równolegle. Zobacz ten wikipedia przykładów i więcej informacji: Grid Computing , ale kilka znanych przykładów Seti @ Home i BIONC . Istnieją ramy dla prowadzenia sieci komputerowych, a te są dobrze warto przyjrzeć się.

Co chcemy osiągnąć?

Pod koniec tych artykułów mam nadzieję pokazać, że wdrażanie sieci biura nie musi być bardzo kosztowna i czasochłonna. Mam zamiar omówić:

  • Konfiguracja systemu kontroli pracy, konfiguracja pracy
  • Tworzenie odpowiednim przetworzeniu maszyny wirtualnej
  • Jak skonfigurować system na komputerze z systemem Windows
  • Zapewnienie używasz ostatni kod i dane
  • Wdrożenie i benchmarking
  • Patrząc w przyszłość

Będę budynku (ok I zbudował, a potem napisał ten) przykładowej aplikacji do testowania koncepcji na lokalnym komputerze systemu Windows XP i moje "GridMachine wirtualna maszyna. Mój serwer kontroli pracy będzie moim głównym maszyny, która działa Fedora 11 .

To jest w żaden sposób nie ma na celu wykazać, w pełni funkcjonalny solidny system, jego znaczy więcej demonstracji i dyskusji pokazuje, że te rzeczy można osiągnąć w stosunkowo krótkim czasie i niewielkim kosztem. Prosimy wysłać do mnie żadnych uwag, korekt lub poprawek i postaram się, aby utrzymać ten artykuł zaktualizowany do meczu.

Następnym razem

W część 2 Zacznę od spojrzenia na system kontroli pracy, i sprawdzić, w jaki miejsc pracy powinny być skonfigurowane w celu osiągnięcia największej ilości przetwarzania przy jednoczesnym zapewnieniu, że każde zadanie jest przetwarzane bez przerwy.

Grid Computing Office przy użyciu Wirtualne środowiska - Część 2

Przez , piątek 04 grudzień 2009 23:23

Wprowadzenie

Pracuję w firmie, w której prowadzimy wiele zadań przetwarzania wsadowego milionów rekordów danych każdego dnia i Myślałam ostatnio o wszystkie maszyny, które siedzą w każdy dzień nic nie robi przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn do wzmocnienia mocy obliczeniowej naszego systemu? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 1 I gave an overview of the system and technologies I will be using as well as discussed some of the potential reasons why you would want to create an office grid.

Job Control

If you're going to be running jobs then you're going to need some way to manage them. Your job control system (on your job server) needs to be really well thought out before even attempting to run an office grid. So firstly, what are the tasks for a job control system:

  • Hand out jobs upon request from workers
  • Tell workers what type of jobs to run
  • Track jobs
  • Ensure that jobs are only run once
  • 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).

Serwer sama praca nie ma to skomplikowane zadanie (w systemie podstawowym w każdym razie), musi przechowywać listę zadań, rękę pracy, otrzymać wyniki, a następnie zapisać je do późniejszego wykorzystania. Jak tych części (takich jak "rozdawać pracy") są zdefiniowane mogą być bardzo proste. Później możemy rozszerzyć systemu o interfejs administracyjny, aby dodać, edytować, usunąć, zawiesić pracę, ale jest to poza tym ćwiczeniu.

Nie ma żadnego powodu, następnie, że serwer praca nie może być maszyna wirtualna w głównym serwerze przetwarzania pod warunkiem, że nie drenażu zbyt wiele zasobów z niego. Serwer pracy jednak nie musi wysoką dostępność, jeśli idzie w dół w piątek wieczorem będziesz stracić cały weekend, przetwarzania, potencjalnie kosztowało kilka tygodni warto czasu przetwarzania (w porównaniu do głównego serwera przetwarzającego sam) . Możesz rozważyć umieszczenie serwera pracy na obciążenia środowiska zrównoważony dla wysokiej dostępności.

Podstawowe ustawienia

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.

Streszczenie

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.

Następnym razem

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

Office Grid Computing using Virtual environments – Part 5

By , Friday 4th December 2009 11:03 pm

Wprowadzenie

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. Tak więc,

  • 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.

Wdrożenie

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.

Stop!

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.













Theme Panorama przez Themocracy

8 odwiedzających online
6 guests, 2 bots, 0 members
Max odwiedzających dziś: 13 na 04:53 UTC
W tym miesiącu: 35 na 07.09.2011 04:27 UTC
W tym roku: 130 w 28-03-2011 22:40 UTC
Cały czas: 130 w 28-03-2011 22:40 UTC