Kategoria: Programowanie Web

Żą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? W ten zbiór artykułów będę patrzeć na potencjalne korzyści z zatrudniania biura sieci za pomocą środowisk wirtualnych.

W części 1 dałem przegląd systemu i technologii będę używał, jak również omówione niektóre z potencjalnych powodów, dla których chcesz utworzyć sieci biurowych.

Kontrola zadań

Jeśli masz zamiar być uruchomione zadania wtedy będziemy potrzebować jakiś sposób nimi zarządzać. System kontroli pracy (na serwerze pracy) musi być naprawdę dobrze przemyślane zanim zaczniesz nawet do uruchomienia sieci biurowych. Więc po pierwsze, jakie są zadania dla systemu kontroli pracy:

  • Miejsc pracy na rękę na wniosek pracowników
  • Powiedz pracowników, jaki rodzaj pracy, aby uruchomić
  • Śledź pracy
  • Upewnij się, że miejsca pracy są uruchamiane tylko raz
  • Podaj dane pracy dla pracowników, lub przynajmniej powiedz im, gdzie je zdobyć

System musi być także rozszerzalny, rozwiązanie, które działa na razie w jednym przypadku może być przedłużony, aby uruchomić kilka rodzajów pracy, jak biznes postrzega wartość w roztworze siatki. Na przykład, praca może zyskać priorytetów, więcej niż jedną pracę typu mogą istnieć (tzn. kilka baz kodu), ewentualnie może nawet korzystać z kilku różnych maszyn roboczych, które są zoptymalizowane dla każdego typu zadania (które jednak odejście od "pracownika ogólne "pomysł). Zawsze staram się myśleć o przyszłości przy opracowywaniu systemów, krótki wzrok perspektywie mogą prowadzić do długoterminowej frustracji i wydłużenie czasu rozwoju.

Server pracy

Będziemy potrzebować gdzieś do kontroli naszych miejsc pracy, powinno to być jedynym systemem w sieci, która ma stałą Resource Locator jest, że adres IP, nazwę hosta, adres URL (przy użyciu DNS wewnętrznych), itp. To dlatego, że pracownicy muszą wiedzieć, gdzie szukać pracy, pracownicy powinni znaleźć system kontroli pracy (nie systemu kontroli pracy znaleźć pracowników).

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

Podstawowej konfiguracji dla naszego serwera pracy będzie składać się z co nazywam jeden z moich Limp serwerów (czyli Nux Li, m ySql, P HP). Kod działa na pracowników thea rzeczywiście pracy, co miejsc pracy można go uruchomić poprzez interakcję z bazami danych kontroli pracy systemu. Później możemy stworzyć usługę sieciową i faktycznie rękę pracy zamiast pracowników do ciężkiej pracy się, ale teraz będziemy nadal korzystać z zasadą KISS (Keep it Simple, Stupid!).

Tak więc, pozwala utworzyć trzy mySQL stoły do czynienia z pracy. Będą one `pracy`, `jobRecords` i `jobResults`.

pracy tabeli Tutaj używam SQL Buddy bardzo mały alternatywa dla phpMyAdmin tylko dlatego, że łatwiej jest zainstalować na CentOS (dla widzą inni: 10 Great alternatywa dla phpMyAdmin )

Tabela ta składa się z 5 prostych pól,

  • id: Unikalny identyfikator pracy
  • Nazwa: To może być odniesienie klienta, lub dowolną liczbę innych identyfikatorów
  • Status: Musisz wiedzieć, gdzie praca jest, np.
    • 0: Nie rozpoczął
    • 1: Zabierani
    • 2: Completed
  • started_by: Kto zaczął robić w pracy? To nie jest całkiem wymagana, ale miło mieć. Sugerowałbym pracowników śledzenia na podstawie adresów IP w sieci
  • started_at: Kiedy pracownik rozpocznie pracę? Poprzez śledzenie pracy, które nie zakończyły w ramach kwoty X czasu wiemy, że trzeba podnieść pracy ponownie i rozpocząć przetwarzanie przez innego pracownika. Pracownicy mogą zatrzymać przetwarzanie / go w trybie offline z wielu powodów, awarii zasilania, awarii, strat sieciowych itp.

Łatwo jest jak tej tabeli, może zostać rozszerzona o kilka dodatkowych pól, aby umożliwić śledzenie statystyk, kolumny czas zakończenia, aby zobaczyć, jak długo praca zajęła, licznik aby zobaczyć, jak wielu pracowników podniósł pracy (oczywiście musi to mają tendencję do 1), priorytet zadania, lista może się ciągnąć w nieskończoność. W bardziej złożonych scenariuszy pracy byłoby możliwe, aby określić, ile pamięci pracownik powinien mieć dostęp do (a więc używać tylko odpowiednich pracowników), a nawet jaki typ pracownika jest konieczna.

Dodajmy kilka miejsc pracy np.:

miejsc pracy np.

W poniższej tabeli znowu jest dość proste do zrozumienia, to nasze rekordy pracy. Są one związane z głównej tabeli miejsc pracy przez kolumnę `jobs_id. Tworzą z tej tabeli bardzo wiele zależy od danych, które należy dostarczyć do pracowników, pozwala dokonać bardzo prosty przykład, gdzie mamy cztery kolumny:

  • id: identyfikator rekordu
  • imię: nazwisko osoby
  • Adres: Osoba adres
  • jobs_id: ID pracy, że ten rekord jest powiązany z

Trzecia i ostatnia tabela składa się z tabeli wyników, ma tak samo tworzą w naszej tabeli rekordy, a z dodatkiem niektóre kolumny mogą być częścią tabeli rekordy:

  • job_record_id: Link wynik do tabeli zadań
  • Wynik: Dane wynik

... I to wszystko, czego potrzebujesz do kontroli pracy! (Choć na bardzo podstawowym poziomie) W moim przypadku jestem wskazał na innej tabeli, gdzie moje dane Proces został zlokalizowany, ale może to tylko tak łatwo było w pliku, do uruchomienia kodu symulacji, you name it.

Wybór pracy

Jak stwierdzono wcześniej, pracowników zrobimy zarządzania zadaniami dla nas teraz, więc wszystko, czego potrzebujesz, by naprawdę zrobić, to znaleźć pracę, która wymaga przetwarzania i uzyskać informacje. Jak to robimy? Dobrze wybrać nasze kryteria wyboru pracy i szukać pracy, w SQL zrobiłem co następuje:

  1. Podejmować żadnych zadań, które nie są oznaczone jako ukończone, ale z naszego pracownika i przywrócić je (substytut __ME__ z identyfikatorem, najłatwiej byłoby adres IP):
      UPDATE `pracy` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Korzystanie z naszych kryteriów wyboru pracy, wyboru pracy i powiedzieć, że ten system kontroli pracownika radzenia sobie z nim:
      UPDATE `pracy` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 lub
     (`Status` = 1 AND `started_at`> DATE_SUB (NOW (), godzinnym X)) ORDER BY `id` ASC; 

    Chwytając miejsc pracy, które nie zwróciło wyniki w ilości X czasu mamy pewność, że wszystkie zadania są uruchamiane w przypadku awarii lub pracownik będzie zagubiony.

  3. Następnie chwycić szczegóły pracy po samych rejestrów:
      SELECT * FROM `pracy` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Po zakończeniu pracy możemy wstawić nasze rekordy wynik i zaznaczyć zadanie jako ukończone. Pamiętaj, jak praca może zawiesić / wznowić w dowolnym momencie pozwala na pewne solidność w skrypcie. Być może zadanie zawiesza w połowie aktualizacji systemu kontroli pracy, więc sprawdzenie liczby rekordów w pracy i liczbę wyników zapisywane z powrotem do systemu kontroli pracy byłoby mądre posunięcie.

Ponadto, choć ten pokazuje, jak miejsca pracy mogą być wybierane i zarządzane z SQL-ramkę zapytania powinno się naprawdę abstrahując twoją kontrolą pracy tak, że jeśli zdecydujesz się przejść na korzystanie z usług internetowych, system plików, XML , lub innych wiele systemów nie będą miały wpływu na kod powyżej.

Konfiguracja pracy

Kolejny aspekt, do rozważenia jest to wielkość pracy i konfiguracji. Grając w konfiguracji pracy możemy strajku doskonałą równowagę między szybkością, procesu replikacji i niezawodności. Weź kilka scenariuszy ofa:

  1. Praca trwa od 1 dnia każdego uruchomić: Oznacza to, że pracownicy potrzebują 15 dni na rozpatrzenie każdej pracy (pamiętaj 10% mocy dla 2/3rds czasu). Oczywiście nie jest to mądry konfiguracji, rozmiar pracy jest zbyt duży! 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.

W rzeczywistości nie będzie nikogo, idealna konfiguracja dla konfiguracji sieci, wiele zależy od dostępnych środków, rodzaje pracy, wymagania turnaround wymiarze czasu pracy, możliwość pracy w sieci, i tak dalej. Jednakże pewne wytyczne będą:

  • Rozmiar pracy tak, aby każdy pracownik może przejść przez co najmniej 3-4 nowych miejsc pracy w ciągu 15 godzin (najdłuższy czas bezczynności prawdopodobnie)
  • Graj z wielkości zadania, tak aby czas instalacji staje się dość nieznaczny w porównaniu do czasu przetwarzania (z uwzględnieniem powyższego punktu).
  • Jeśli zadanie nie zakończy się w podwójnej ilości czasu (może mniej) można się spodziewać jej zakończenie założyć, że jej zniknął i rozpocząć przetwarzanie go innym pracownikiem. To oznacza, że ​​trzeba czekać do trzech razy normalna długość pracy na jej zakończenie (ewentualnie dłużej, jeśli kolejne zadanie nie powiedzie się). Możesz skrócić ten czas, ale należy uważać, aby nie ograniczyć go za dużo, jak można rozpocząć powielania zadań przetwarzania na bieżąco.
  • Praca powinna być niezależna od zewnątrz wymagania jak najwięcej. Serwer pracy, na przykład, powinien skontaktować się na początku i na końcu każdego zadania.
  • Nie nasycenia sieci, będzie to miało dwa negatywne skutki, Twój dzień personel znaleźć za pomocą sieci frustrujące i problemów może wystąpić z połączenia limit czasu problem, który będzie jeszcze gorzej, jak skalowanie sieci.
  • Zapewnienia miejsc pracy może pracować na swoich pracowników. Jeśli praca staje się zbyt dużej pamięci lub miejsca na dysku intensywnie zacznie przerywać i jedyną rzeczą, można zauważyć, jest spadek liczby miejsc pracy przetwarzane bez rzeczywistego powodu.

Zgłoszenie Wyniki pracy

Składając wyniki pracy ważne jest, aby sprawdzić, czy wyniki nie zostały przedstawione przez innego pracownika, zwłaszcza jeśli obecny pracownik został uśpiony na jakiś czas.

Gdy wyniki są złożone zapewnienia, że ​​liczba wyników meczów liczbę rekordów w pracy.

Jak stwierdzono wcześniej, i nie można przecenić, budować tolerancję błędu do wyszukiwania miejsc pracy i przekazywanie wyników. Pracownicy mogą (i prawdopodobnie będzie) przejść do trybu wstrzymania, co najbardziej uciążliwe razy i musi to być coś dla siebie. Także po raz kolejny abstrahując od Twojego zgłoszenia wyników pomoże zaspokoić przyszłe zmiany systemu sterowania praca jest łatwiejsza do czynienia.

Streszczenie

W tym section przyglądaliśmy się czym jest serwer kontroli pracy musi to zrobić i jak się bardzo prosty system ustanowiony. Rozmawialiśmy jak pobrać pracy z systemem kontroli i jak najlepiej skonfigurować zadania, aby jak najlepiej nasze systemu sieci biurowych. Aby zakończyć, akapit lub dwa na przedstawianiu wyników z powrotem do serwera kontroli pracy został przedstawiony.

  • Serwer kontroli pracy zarządza miejsc pracy i zapewnia, że ​​wszystkie jednostki są zakończone
  • Przez abstrahowanie zadanie wybrać / wyniki składania możemy zmienić technologię na serwerze kontroli bez większych problemów
  • Konfiguracja pracy, aby zapewnić, że są one uruchomić szybko i sprawnie, bez zbytniego nacisku na infrastrukturę, a nie powielając zadań przetwarzania na bieżąco.
  • Upewnij się, że budowanie odporności na uszkodzenia i checking błąd na swoje procedury, pracowników może zawiesić i wznowić i najbardziej niewygodne razy. Pamiętaj, aby sprawdzić, czy wyniki zostały już przedstawione przez innego pracownika.

Następnym razem

W części 3 stworzymy nasze maszyny wirtualnej przetwarzania i skonfigurować nasze maszyny okna bezczynność wymiarze czasu pracy.

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

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

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.

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.

Zend Framework: Fundamentals – Review

By , Saturday 28th November 2009 10:42 pm

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.

Tło

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.

About the Course

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.

Streszczenie

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.












Theme Panorama przez Themocracy

9 odwiedzających online
7 guests, 2 bots, 0 members
Max odwiedzających dziś: 22 na 06:15 UTC
W tym miesiącu: 23 w 24-08-2011 05:40 UTC
W tym roku: 130 w 28-03-2011 22:40 UTC
Cały czas: 130 w 28-03-2011 22:40 UTC