Kategorie: Web-Programmierung

Route Anfragen für sitemap.xml benutzerdefinierte controller / action

Mit , Mittwoch 6. Januar 2010 00.13 Uhr

Um den direkten Anfragen / sitemap.xml , um eine benutzerdefinierte Controller und die Aktion in Ihrem Zend Framework -Anwendung fügen Sie einfach den folgenden in Ihrem application.ini oder alternative Konfigurationsdatei (zB ich navigation.ini):

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

Beispiel-Code für die Ausgabe kann durch die Schaffung einer Aktion in den entsprechenden Controller (zB meine sitemap liegt in der Index-Controller, sitemap action) zu sehen:

 < php
 Klasse IndexController
     erstreckt Zend_Controller_Action
 {
     / **
      * Renders eine Sitemap auf Zend_Navigation Setup basiert
      * /
     public function sitemapAction ()
     {
    	 echo $ this-> view-> navigation () -> sitemap ();
    	 $ This-> view-> layout () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps schnell und einfach erzeugen, indem Sie Zend_Navigation , ist ein großer kurze Einführung (und in der Regel sehr nützlich für Zend Framework Tutorials) Zend Casts - dynamisch erstellen ein Menü eine Sitemap und Paniermehl .

Zend Framework Per-Module basieren Einstellungen

Mit , Freitag 1. Januar 2010 10.40 Uhr

Ich habe eine Antwort auf diese Stelle, die weniger Konfiguration erfordert erstellt, siehe Module Based Layout - Zend Framework .

Bei der Verwendung des Zend Framework mit Modulen, ist offensichtlich, dass, wenn Sie verschiedene (Sub-) Seiten sind aus der gleichen Anwendung, die Sie wollen nicht unbedingt das gleiche Layout Skripte für jeden Teil. Ich beschloss, mit den folgenden Website-Struktur gehen:

  / Application
     / Controllers
         ...
     / Modelle
     / Modules
         / Default
             / Controllers
             / Layout
                 / Scripts
             / Views
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Das Problem war die Einrichtung des Layouts Skripte auf einem pro Modul. Die Antwort kam durch den Einsatz einer Aktion Helper. Einrichten des Layouts auf einer pro Modul umfasst drei Schritte:

  1. Application.ini (oder ähnliche Konfiguration Setup):
      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. Erstellen Sie Ihre Aktion Helper:
      <? Php
     / **
      * Setzt das Layout Pfad auf einem pro Modul
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Seit 2010-01-01
      * /
     Klasse Pro_Controller_Action_Helper_SetLayoutPath
         erstreckt Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Setzt Layout-Pfad basierend auf Modul
          * /
         public function preDispatch ()
         {
        	 $ Module = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('bootstrap')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ module] ['Ressourcen'] ['layout'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ module] ['Ressourcen'] ['layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ("Layout")
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Und schließlich Bootstrap der Action Helfer:
     ...  / ** * Stellt Layout Skripte auf einem pro Modul * / protected function _initLayoutHelper () {$ this-> bootstrap ('frontController'); $ layout = Zend_Controller_Action_HelperBroker:: addHelper (neue Pro_Controller_Action_Helper_SetLayoutPath ());} .. . 

Lehre: DATETIME default NOW ()

Mit , Mittwoch 30. Dezember 2009 06.30 Uhr

Ich habe mit dem Aufbau einer Datenbank-Schema für eine neue gekämpft Zend Framework -Projekt. Ich bin mit verwenden möchten, Doctrine ORM für meine Datenbank-Modelle. Ich brauche zum Einrichten des Schemas, so dass es mich zu einem Standardformat für Datum und Zeit für ein `datetime` Spalte, zB erlaubt, wenn eine neue Nachricht bekomme ich den aktuellen Zeitstempel. Nach langem Suchen und Experimentieren fand ich die Lösung, damit ich teilen es bin.

In das Schema YAML -Datei einfach folgendes tun:

 Nachricht:
   ActAs:
     Timestampable:
       erstellt:
         Name: created_at
         Typ: timestamp
         Format: Ymd H: i: s
       Stand:
         Name: last_updated
         Typ: timestamp
         Format: Ymd H: i: s
   Spalten:
     ID:
       Typ: integer
       Primär: true
       autoincrement: true
     Name: string (255)
     E-Mail: string (300)
     Nachricht: string (2000)

Wenn auf der anderen Seite Sie nicht möchten, eine `updated_at` Spalte können Sie die folgenden:

 Nachricht:
   ActAs:
     Timestampable:
       erstellt:
         Name: created_at
         Typ: timestamp
         Format: Ymd H: i: s
       Stand:
         Behinderte: true
   Spalten:
     ID:
       Typ: integer
       Primär: true
       autoincrement: true
     Name: string (255)
     E-Mail: string (300)
     Nachricht: string (2000)

PHP Design Patterns - Observer Pattern

Mit , Dienstag 29. Dezember 2009 22.02 Uhr

Ich habe gelesen, Head First Design Patterns vor kurzem haben sich entschieden, einige der Muster, wie PHP Beispiele für mein eigenes Wohl zu schreiben. Das erste, dass ich den Code entschied sich das Observer Pattern . Die formale Definition des Observer-Muster ist:

Die Beobachter-Muster (eine Teilmenge der asynchronen Publish / Subscribe-Pattern ) ist ein Software- Design-Pattern , in dem ein Objekt , genannt das Thema, führt eine Liste ihrer Angehörigen, als Beobachter, und benachrichtigt sie automatisch von jedem Staat ändert, in der Regel durch den Aufruf eine ihrer Methoden . Es wird hauptsächlich verwendet, um verteilte Event-Handling-Systeme zu implementieren.

Als Systeme werden mehr lose gekoppelten dafür sorgen, dass, wenn ein Ereignis alle Systeme, die Kenntnisse über diese Aktualisierungen informiert sind, erfordern passiert. Zum Beispiel, einen Blog-Post, nach dem Speichern einer post müssen wir unter Umständen eine Suchmaschine zu aktualisieren (z. B. Lucene), aktualisieren wir unsere sitemap, Tags, E-Mail abonniert Benutzer, etc. Das Beobachter-Muster ermöglicht es Entwicklern, zusätzliche Hörer ohne Bearbeitung ihrer beobachtbaren Objekt hinzufügen . Durch Einspritzen von Beobachtern (dh eine Suchmaschine update Beobachter, eine Sitemap-Generator, etc) in ein Subjekt (dh blog post Editing-System) können wir damit die es zu allen notwendigen Updates ohne Änderungen durchzuführen.

Continue reading 'PHP Design Patterns - Observer Pattern' »

Office-Grid Computing mit virtuellen Umgebungen - Teil 4

Mit , Freitag 4. Dezember 2009 11.59 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung von Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Verwendung eines Büro-Look Gitter mit virtualisierten Umgebungen.

In Teil 3 haben wir unsere virtuelle Maschine und Einrichten von Windows-Maschinen auf Leerlauf-Beschäftigten geworden.

Ausführen der neuesten Code

Zwangsläufig nach dem Erstellen Ihrer Mitarbeiter Geschäftslogik wird sich ändern, Bugs gefunden werden, wird schneller und effizienter Code erzeugt somit Verlassen Ihres Arbeiter saßen Verarbeitung der Daten über sein altes stinkenden Code . Wie also können wir sicherstellen, dass wir immer die neueste und beste Version von unserer Verarbeitung Skripte?

Es gibt ein paar sehr einfach einfache Möglichkeiten, wie wir dies tun konnte, der Trick ist aber, Rechenleistung und Netzwerk-Traffic bei der Erreichung dieses zu reduzieren. Fangen wir mit der einfachsten Lösungen und verbessern sie langsam über ein paar Iterationen.

Die erste Methode wäre, einfach zu unserem Job Control Server (über Samba-, FTP o.ä.) zu verbinden und ziehen Sie die neueste Version des Codes. Nicht sehr effizient, aber es wird die Arbeit zu tun. Lets verbessern, dass etwas, wie zum Erstellen eines rsync-Skript und die Verwendung dieser jedes Mal statt? Alternativ, was darum, unsere neuesten Verarbeitung Skript in Subversion auschecken den Code zunächst und dann einfach aktualisieren unseren Code auf jedem Lauf ( svn update )?

Am Ende konnten wir am Ende mit einem Bash-Skript (genannt von cron alle 10 Minuten), die so einfach wie folgt aussieht:

  #! / Bin / sh
 wenn ps ax | grep-v grep | grep php > / dev / null
 dann
     echo "Job gerade bearbeitet, Ausfahrt"
 sonst
     echo "Job nicht läuft, jetzt beginnen"
     cd / path / to / working / Kopie
     svn update
     php yourJobProcessingScript.php
 fi 

Jetzt können wir sicher sein, dass mit jedem Lauf sind wir definitiv mit der neuesten Code. Wir gewährleisten dies durch die Aktualisierung unserer Codebasis jedes Mal führen wir einen Lauf und reduziert den Netzwerkverkehr, indem nur die Übertragung der Datei Unterschiede in unserem Netzwerk.

In meiner Demo-Setup, ich habe genau wie oben. Subversion wurde auf meinen Job Processing Server installiert und ich zog einfach den neuesten Code von einem "Arbeitnehmer" Zweig mit 'svn update'. Ich habe auch eine Versionsnummer Tag, meine Verarbeitung Skript, das auf die Datenbank als Teil der Ergebnisse zurückgeben zurückgegeben wurde. Auf diese Weise konnte ich sehen, dass mein Code Wesen war jedes Mal wenn ich kopiert meinen Koffer in den Arbeitsprozess Filiale dh, dass ich auf jeden Fall die neueste Verarbeitung Skript aktualisiert.

Unter Verwendung der neuesten Daten

Wenn Ihr Job-Verarbeitung nutzt Datenquellen dann irgendwann diese werde auch aktualisiert werden. Sofern Sie rufen Ihre Datenquellen auf einer sehr unregelmäßigen Abständen wirst du zu Ihrem Netzwerk mit dem Verkehr so ​​schnell wie Ihre Mitarbeiter Anlauf brachte alles zum Stillstand Flut sind. Für meine Lösung entschied ich mich, dass ich möchte meine Datenquellen bewegen mit meiner VMs.

Halten Sie Pferde gibt! Was passiert, wenn meine Datenquellen sind riesig? Gut, das ist wirklich ein Fall von, wie viele Daten sprechen wir? Es kann kostengünstiger sein, eine zusätzliche größere Festplatte in jedem Rechner zu installieren, als einen zusätzlichen Verarbeitungsschritt Server erwerben. Dies ist eine Frage des Budgets und setzt sich für das Unternehmen zu entscheiden. Es ist vielleicht, dass Ihre Daten Quellen sind so groß, dass seine nur machbar, dass die Datenmenge in Ihrem Arbeitscomputer zu halten. In diesem Fall, was würden Sie tun? Nun konnten wir bei Aufruf eines lokalen Daten-Server aussehen, aber das könnte Probleme mit dem Netzwerk verursachen. In diesem Fall wird ein Grid-System, wie dies unrealistisch geworden, um in Ihre Büroumgebung gehören. Es kann auch sein, dass Sie in alternative Strategien laufen Look sind zum Beispiel nur fordern Ihre Mitarbeiter von 20.00 bis 06.00 pro Nacht und / oder Drosseln Datenquelle Zugriffe.

Umzug auf sagen wir unseren Datenquellen Betrag zu 100 GB Daten. Nun ja, das ist schon ein bisschen von Daten an das Netzwerk auf ein Update zu bewegen. Wie würden wir sicher, dass wir die aktuellste Kopie der Daten haben in diesem Fall? Rsync ist eine Möglichkeit, aber ich persönlich denke, indem Sie Ihre neuesten Datenquelle auf Ihren Job Processing Server und diesen Vorgang als ein Meister in der Replikation (mit einem schönen langen bin log) könnte der Weg zu gehen:

Replikation Durch die Einstellung jeder Ihrer Mitarbeiter als ein Sklave der Job-Steuerung Server Updates für Ihre Datenquellen wird Trickle-Down schön, um Ihre Mitarbeiter ohne einen enormen Zuwachs an Netzwerk-Aktivität (das heißt, wenn Sie einen riesigen Daten zu aktualisieren, und führen Sie alle Ihre Mitarbeiter kick in auf einmal). Dies hat Vorteile gegenüber rsync in die Sie nicht bekommen eine lange Pause vor jedem Job würde, als die Datenbank-Updates, die mysql -Daemon auf Ihrer Mitarbeiter wird ständig aktualisiert seine Daten während der Verarbeitung fortgesetzt wird.

Dies ist, wie ich eingerichtet meiner Demonstration Server. Zum Einrichten der Replikation Ich folgte die Führung auf der MySQL-Website ( Einrichten der Replikation ) und innerhalb von 20 Minuten hatte ich meinen inital Arbeiter Replikation der Job-Control-Server-Dataset. Für jede weitere Arbeiter der Replikation Einstellungen und Verfahren gearbeitet jedes Mal, wenn die VM kopiert wurde.

Zusammenfassung

In diesem Abschnitt des Artikels haben wir, wie einfach und schmerzlos ist es, Ihre Verarbeitung Code auf dem Laufenden halten, indem using rsync oder subverion (SVN), um die Arbeit zu tun und den Netzwerkverkehr zu reduzieren gleichzeitig time.A ausgesehen haben wir auch diskutiert, wie Ihre Datenquelle Informationen up-to-date, indem man es rieseln zu jedem Ihrer Mitarbeiter zu halten. So haben wir Raum dafür, dass wir immer mit Geschäftslogik und Informationen in unserem Büro Grid-System. Es wird offensichtlich unzählige Alternativen zu diesen Aufgaben, aber hier waren zwei einfache Beispiele, um zu zeigen, wie einfach eine Lösung zu bekommen ist.

Nächstes Mal

Im letzten Teil dieser Serie, treffend benannt Teil 5 , besprechen wir den Einsatz dieses Systems für. Ich werde zusammen, was gelernt wurde und was ich damit geschaffen.

Office-Grid Computing mit virtuellen Umgebungen - Teil 3

Mit , Freitag 4. Dezember 2009 23.37 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung von Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Verwendung eines Büro-Look Gitter mit virtualisierten Umgebungen.

In Teil 2 haben wir uns die Arbeitsplätze einen Server ausgeführt wird, und wie Arbeitsplätze sollten so konfiguriert werden, um größte Menge der Verarbeitung gleichzeitig sicherzustellen, dass jeder Auftrag ohne Fehler verarbeitet zu erreichen.

Einrichten des Arbeitnehmers - oder LIMP-Server

Der nächste Schritt in diesem Prozess ist die Einrichtung Ihrer virtuellen Arbeiter. Aus diesem werde ich eine Installation von CentOS mit VirtualBox nutzen. Ich werde zu installieren mySQL und PHP auf dem Server, der auch als ein Hinken (Li nux, m ySQL, P HP) Servera (ich kann aus diesen Namen bis sein) bekannt.

  • Installieren von VirtualBox auf Ihrem Windows-Rechner (Link folgen)
  • Downloaden und installieren Sie CentOS (aktuelle Version 5.3) in einem erstellte virtuelle Maschine

Es macht keinen Sinn mich werde diesen gibt es wahrscheinlich 1000 's der großen Tutorials gibt (ok, hier ist einer: Erstellen und Managing CentOS virtuelle Maschine unter VirtualBox ). Der wichtige Punkt zu beachten, Ich nehme an, dass ich meine virtuelle Maschine GridMachine genannt.

Soweit meine Entscheidungen der Virtualisierung Client und Betriebssystem zu gehen gibt es keine großen zwingenden Grund für jede Wahl. VirtualBox ist etwas, das ich den Einsatz auf meinem Rechner zu Hause und wird von den drei großen Betriebssystemen unterstützt. Ich entschied mich für CentOS als eine gute stabile OS und ich benutze es auf meinem eigenen Web-Server. Ich bin ein großer Anhänger in die richtigen Werkzeuge für den Job (obwohl ich die Anwendung bin "die schnellste und einfachste für Sie"-Mentalität hier), so dass, wenn Betriebssystem X läuft der Code schneller und effizienter, dass stattdessen:)

Wichtig ist sicher, dass Ihr VM DHCP verwendet, ansonsten für jeden neuen virtuellen Maschine müsste separat konfiguriert werden, die wir so nicht want.By nicht über DHCP brauchen wir nicht zu Netzwerk-Einstellungen individuell konfigurieren für Arbeiter Maschinen, wird DHCP Hand out IPs für Sie. Daher können Sie Ihre virtuelle Maschine über das Büro, ohne sich Gedanken über die Einstellung jedes up (das verbessert die Skalierbarkeit und reduziert die Arbeiter Verwaltung) zu kopieren.

Der Prozess, den Sie erreichen wollen sollte wäre es, einen neuen physischen Maschine zu erhalten, installieren Sie VirtualBox und dann ziemlich viel Einsatz das virtuelle Bild ohne viel anderes. Es könnte sinnvoll sein, alle Ihre Mitarbeiter in einem anderen Subnetz Setup so, dass Sie mindestens sehen, wie viele Maschinen laufen. Außerdem benötigen Sie, um Ihre Maschinen auf einem Erbpacht-oder unbegrenzten Lease DHCP.

Wie Jobs auf den Arbeiter laufen

Dies ist ein interessantes Gebiet und es gibt mehrere gültige Methoden für die Verarbeitung von Jobs auf den Arbeiter. Hier werde ich nur diskutieren die beiden auf der Hand:

  • Ständig laufende Skript: Ein Skript, sei es ein Shell-Skript oder ein PHP-Skript wird einmal auf den Arbeiter ausgeführt und wird als Teil einer unendlichen Schleife. Ich habe diese Methode als eine Absturz des Skripts abgezinst und möglicherweise Ihre Mitarbeiter werden nicht mehr ohne irgendeine Art von Intervention führen.
  • Cron basiertes Skript-Ausführung: alle X Minuten die cron-Daemon startet einen Aufruf an das Skript um Dinge geht. Ohne eine Prüfung könnte dies zu viele, viele Kopien Ihrer Mitarbeiter script läuft führen.

Meine Entscheidung war es, mit cron die angepfiffen ein Shell-Skript alle 10 minutes. My Shell-Skript führt die folgenden Aufgaben gehen:

  1. Holen Sie sich ein Prozess-Liste und grep dies für 'php'. Wenn nicht gefunden, dann fortsetzen.
  2. Rufen Sie Ihre Job-Code, in meinem Fall wäre dies etwas PHP basieren
  3. Worker-Skript beendet seinen Lauf
  4. Ready to go wieder auf die nächste gewünschte Anruf

Meine Bash-Skript sieht ungefähr wie folgt aus:

  #! / Bin / sh
 wenn ps ax | grep-v grep | grep php> / dev / null
 dann
     echo "Job gerade bearbeitet, Ausfahrt"
 sonst
     echo "Job nicht läuft, jetzt beginnen"
     php yourJobProcessingScript.php
 fi 

Hinweis: das Echo ist fast völlig sinnlos, sondern kann die nächste Person, die zusammen kommt, um zu versuchen und zu bearbeiten ihnen zu helfen.

Damit ist die Einrichtung des Arbeitnehmers virtuellen Maschine, schnelle, einfache und leicht zu jedem neuen Stück Hardware, das empfangen zu kopieren. Die "Klugheit" des Netzes ist wirklich nicht in der visualisierten OS, seine alle mit dem Code erstellt, um Arbeitsplätze, die Job-Konfiguration und in dafür sorgen, dass die Arbeit bei Bedarf läuft (dh, wenn der Host inaktiv ist Prozess zu tun ).

Einrichten von Windows zu Workers initialisieren

Die erste Aufgabe ist die Erarbeitung der Befehl erforderlich, um die virtuelle Maschine aus der Windows-Kommandozeile ausgeführt werden. Wenn Sie VirtualBox in der Standard-Speicherort installiert haben und Sie haben Ihre Mitarbeiter GridMachine benannt dann den Befehl Berechnungen Ihre Arbeitnehmer:

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

Allerdings, um das Skript in eine "kopflose" Zustand, den wir verwenden müssen ausgeführt werden:

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

Dadurch wird die virtuelle Maschine ohne GUI zu starten und ermöglichen es, festzustellen, anmutig zu speichern. Das zweite Argument schaltet RDP so dass es keinen Konflikt mit Windows RDP, oder geben Sie eine Meldung über lauscht auf Port 3389 ein. Der Name der virtuellen Maschine ist Groß-und Kleinschreibung!

Als nächstes müssen wir Fenster einzurichten, um kick off unserer Arbeiter VM, wenn die Maschine im Leerlauf war. Um dies zu tun (unter Windows XP) müssen Sie auf Start gehen -> Alle Programme -> Zubehör -> Systemprogramme -> Geplante Tasks wie folgt:

geplante Tasks

Anschließend klicken Sie auf "Geplanten Task hinzufügen" durchsuchen, um ein benutzerdefiniertes Programm add gefolgt. Navigieren Sie zu Ihrem VBoxManage Skript, und klicken Sie auf OK. Planen Sie Ihre Aufgabe für eine der Optionen (wir werden das in einer Minute ändern) und weiter. Nach dem Überspringen der nächsten Bildschirmfenster werden Sie fragen, wer Ihnen diese Aufgabe ausführen möchten, würde ich vorschlagen, entweder 'Administrator' oder Erstellen eines neuen privilegierter Benutzer. Denken Sie daran, wir wollen nicht mit den Standard-Personal-Account auf der Maschine zu jedem Zeitpunkt eingreifen. Klicken Sie auf Weiter und überprüfen show advanced options für diese Aufgabe.

Um das Ende des Laufs Textfeld hinzuzufügen unser "startvm GridMachine 'string und sicherzustellen, dass nur ausgeführt, wenn eingeloggt ist links unticked. Besuchen Sie den Zeitplan Aufgabe nächsten und den Zeitplan ändern Drop-Down, um die Option "im Leerlauf", wählen Sie die Zeit, die dir die Maschine zu sein, bevor er zur nächsten Registerkarte im Leerlauf hatte.

Schließlich deaktivieren Sie die Option, die Aufgabe beenden, wenn es läuft schon X Zeitspanne Staaten, aber die Möglichkeit, die Aufgabe zu stoppen ankreuzen, wenn die Maschine nicht mehr im Leerlauf.

Zeitplan

Das war es dann für die Windows-Host-Setup!

Zusammenfassung

In diesem Teil haben wir eine virtuelle Maschine als Arbeitnehmer, als auch die Art und Weise, in der wir aufrufen und ausführen unserer Job-Verarbeitung Skripte (für mich ein PHP-Skript) fungieren können. Von hier aus schauen wir uns, wie Sie unsere Kopien von Windows zu starten der virtuellen Maschine in kopflosen Modus, wenn der Computer im Leerlauf befindet, und speichern ihren Zustand, wenn der Benutzer wieder Verwendung der Maschine. Hoffentlich an dieser Stelle die Sie sehen, wie einfach es ist, richten Sie ein solches System und sind Juckreiz, um einige Experimente gehen Sie selbst!

Nächstes Mal

In Teil 4 werden wir im Umgang mit Werkzeugen, um sicherzustellen, dass Sie die aktuellste Version des Codes und Datenquellen, so dass erzielten Ergebnisse sind immer up-to-date mit den neuesten Geschäftsinformationen und Logik zu suchen.

Office-Grid Computing mit virtuellen Umgebungen - Teil 1

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung von Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Verwendung eines Büro-Look Gitter mit virtualisierten Umgebungen.

Als PHP -Entwickler Ich werde Tools, die ich jeden Tag nämlich, Linux, verwenden mySQL , PHP, VirtualBox und Subversion (SVN). Aber ich hoffe, dieser Leitfaden in andere Sprachen und Technologien genauso gut passen.

Die Lösung, die ich geben wird sehr lose auf die Art der Verarbeitung würden wir müssen aber erreichen kann doch nicht wahr sein durch den gesamten Artikel als ich die Dinge der Einfachheit halber geändert werden, oder um mehr interessante Anwendungsszenarien produzieren basieren.

Diese virtualisierten Umgebungen wird auf Windows-Rechnern ausgeführt werden, da das ist, was die Mehrheit der Büros laufen. Die Verarbeitung, die Büromaschinen tun sollte nicht mit dem Personal mit diesen Maschinen stören, sollten erfordern keine Wartung an der Maschine, und leicht einsetzbar, um neue Maschinen, wie sie verfügbar sind. Außerdem sollten neue virtuelle Maschinen erfordert keine zusätzliche Konfiguration, da dies reduziert die Skalierbarkeit und Benutzerfreundlichkeit bei der die Grid-System erweitert werden kann.

Warum Bereitstellen einer Office Computing Grid?

Erstens können Sie denken, warum nicht einfach ein Cloud-Computing-Ressourcen wie Amazon EC2-Plattform ? Nun, die Gründe könnten mehrere, zum Beispiel:

  • Sie werden nicht anvertrauen bestimmte Daten in einer Cloud Computing-Umgebung
  • Sie können nicht bestimmte Daten in einer Cloud-Computing-Umgebung aus rechtlichen Gründen (z. B. Daten Verlassen des Landes), die möglicherweise aus rechtlichen Gründen, wie zB NHS Datensätze.
  • Sie möchten, dass Ihre Processing Units zu schließen und die volle Kontrolle über die Hardware zu
  • Sie haben nicht die Projektmittel auf Wolke Instanzen laufen
  • Ihr Büro hat keine Verbindung zum Internet und damit seine nicht möglich, eine Wolke Ressourcennutzung
  • Sie mögen es nicht regen, Wolken deuten regen, daher man auch fern zu halten

Ich bin sicher, die Liste ließe sich fortsetzen, aber ich denke, das ist genug für jetzt.

Vorteile von Office Computing Grid

Nun, können Sie einige Mathematik (und in wahre Physik Stil lets make einigen Kehren Annahmen). Angenommen, Sie haben große bullige Processing Server 100 Arbeitsplätze pro Tag laufen. In Ihrem Büro haben Sie 50 Maschinen, die inaktiv sind 16 Stunden am Tag, jede dieser Maschinen liegt bei 10% so stark wie Ihr bulliger Verarbeitung zu trennen. (Alle Ergebnisse hier sind gerundet, um die Leistung zu erhöhen unterschätzen).

So könnte 1 Maschine * 10% Leistung * 2 / 3 der Zeit = 0,067, dh 1 Desktop-Verarbeitung in Leerlaufzeiten Prozess 6 volle Arbeitsplätze pro Tag.

Wenn Sie nun diese Skala bis es dauert 15 Leerlauf-Desktops, um so viele Arbeitsplätze pro Tag verarbeiten als Haupt-Processing Server funktioniert.

So in unserem vorgeben Büro von 50 Maschinen konnten wir unsere Rechenleistung von 1-Server bis zu erhöhen, um 4 volle Verarbeitung Servern, oder wir könnten Verarbeitung 400 Arbeitsplätze pro Tag statt 100.

Beachten Sie, ohne Investitionen in neue Hardware Ihr Unternehmen hat gerade seine Stapelverarbeitung Kapazität stieg um 4 mal! Potenziell du wirst Ihren Stromverbrauch zu erhöhen, aber von den meisten Büroumgebungen ich Maschinen waren sind in der Regel über Nacht sowieso links, so könnte man dies als eine grüne Initiative zu sehen.

Weitere Vorteile auch bedeuten, dass Investitionen in neue (oder aktualisiert) Verarbeitung Server verzögert werden kann, wenn Ihr Büromaschinen ausreichend sind, und dass, wie Sie die Kraft Ihrer Büromaschinen verbessern Ihr Büro Grid wird mächtiger automatisch.

Technologies

Was Sie brauchen? (Oder besser gesagt, was habe ich benutzt):

  • Idle Büromaschinen (in meinem Fall ein Ersatz alter Fenster XP Laptop)
  • VirtualBox (oder einer anderen Virtualisierung Client-Software)
  • Eine virtuelle Maschine mit PHP, mySQL running läuft eine abgespeckte OS, ich rufe diesen meinen schlaffen Server:)
  • Jobs laufen
  • Job-Server (kann eine andere virtuelle Maschine irgendwo)

Typische Jobs

Die Arten von Jobs, die dieses System entwickelt, um laufen wie folgt:

  • System erhält eine Liste von Daten, auf die wir benötigen, um Spiel und Ergebnisse zurück
  • Passende umfasst die Überprüfung / Suche mehrere (relativ statisch) Datenquellen
  • Ergebnisse aus den Datenquellen kann eine weitere Validierung, Zusammenführung, Prüfung von zusätzlichen Datenquellen in Reaktion auf Ergebnisse
  • Die Daten werden mit passenden Datensätze zurückgegeben, vollständig validiert und verarbeitet
  • Jeder Datensatz in einem Job ist unabhängig von den übrigen

Also im Grunde sind wir bei laufenden Aufträge, die eine Mischung aus Datenbankabfragen und einige Zahlenverarbeitung, ein ziemlich typisches Szenario in einem geschäftlichen Umfeld erfordern suchen.

Grid-Lösungen sind nicht nur vorteilhaft für die Verarbeitung von Aufträgen von diesem Typ. Grundsätzlich kann jedes Verfahren, das in unabhängige Einheiten aufgeteilt werden kann in parallel ausgeführt werden. Sehen Sie diese wikipedia für Beispiele und weitere Informationen: Grid Computing , aber ein paar berühmte Beispiele sind Seti @ Home und BIONC . Es gibt Rahmenbedingungen für den Betrieb Computing-Grids, und diese sind auch diskussionswürdig.

Was werden wir erreichen?

Bis Ende diesen Artikel hoffe ich, um zu zeigen, dass die Bereitstellung eines Büros Gitter muss nicht sehr teuer oder zeitaufwendig. Ich werde zu diskutieren:

  • Einrichten des Job-Steuerung, Job-Konfiguration
  • Erstellen einer geeigneten Verarbeitung virtuellen Maschine
  • Wie das System auf einem Windows-Rechner-Setup
  • Gewährleistung Sie sind mit den neuesten Code und Daten
  • Deployment und Benchmarking
  • Blick in die Zukunft

Ich werde Gebäudes werden (ok ich gebaut, dann schreibt diese) ein Beispiel für Anwendung der Konzepte auf einem lokalen Computer mit Windows XP und mein 'GridMachine' virtuellen Maschine zu testen. Mein Job Control-Server wird mein Haupt-Maschine, die läuft sein Fedora 11 .

Dies ist in keiner Weise soll ein voll funktionsfähiges robustes System zu demonstrieren, soll seine eher eine Demonstration und Diskussion zeigt, dass diese Dinge in einer recht kurzer Zeit und mit geringem Aufwand erreicht werden kann. Bitte zögern Sie nicht senden Sie mir Ihre Kommentare, Berichtigungen oder Verbesserungen, und ich werde mein Bestes tun, um diesen Artikel aktualisiert, um Spiel zu halten.

Nächstes Mal

In Teil 2 werde ich, indem man die Job-Steuerung zu starten, und prüfen, wie Arbeitsplätze sollten so konfiguriert werden, um größte Menge der Verarbeitung gleichzeitig sicherzustellen, dass jeder Auftrag ohne Fehler verarbeitet zu erreichen.

Office-Grid Computing mit virtuellen Umgebungen - Teil 2

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

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

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

Basic Setup

Die Grundeinstellung für unseren Job Server wird von dem, was ich rufe einen meiner LIMP-Server (das ist Li nux, m ySql, P HP) bestehen. Der Code, der auf Thea Arbeiter tatsächlich herausfinden, was Arbeitsplätze es laufen kann durch die Interaktion mit mit Job-Control-System-Datenbanken. Später konnten wir einen Web-Service und tatsächlich Hand Arbeitsplätze, anstatt die Arbeiter nicht die harte Arbeit selbst zu erstellen, aber jetzt werden wir weiterhin mit dem KISS-Prinzip (Keep it simple, stupid!).

So können Sie drei mySQL -Tabellen mit Arbeitsplätzen beschäftigen. Diese wird `Arbeitsplätze`, `jobRecords` und `jobResults` werden.

Arbeitsplätze Tisch Hier verwende ich SQL Buddy eine großartige kleine Alternative zu phpMyAdmin , nur weil die leichter auf CentOS installieren (für die anderen sehen: 10 Great Alternativen zu phpMyAdmin )

Diese Tabelle besteht aus 5 einfachen Feldern,

  • ID: Eindeutige Identifizierung der den Job
  • Name: Könnte eine Kundennummer oder eine beliebige Anzahl von anderen Kennungen werden
  • Status: Sie müssen wissen, wo die Arbeit ist, z. B.
    • 0: Nicht gestartet
    • 1: Nahm
    • 2: Abgeschlossene
  • started_by: Wer angefangen hat, den Job? Dies ist nicht ganz erforderlich, aber ein nice to have. Ich würde Tracking Arbeiter durch ihre IP-Adresse in Ihrem Netzwerk vorschlagen
  • started_at: Wann hat der Arbeitnehmer Beginn der Arbeit? Durch die Verfolgung Jobs, die nicht innerhalb von X Höhe der Zeit, dass wir wissen, müssen wir holen den Job noch einmal und starten Sie die Verarbeitung durch einen anderen Arbeitnehmer abgeschlossen haben. Workers könnte Stop Verarbeitung / go für eine beliebige Anzahl von Gründen, Stromausfall, Absturz-, Netzwerk-Verlust, etc. offline

Es ist leicht, wie diese Tabelle mit ein paar zusätzliche Felder ausgedehnt werden könnte, um für die Statistik-Tracking, ein Endzeit-Spalte, um zu sehen, wie lange der Job annahm, einen Zähler, um zu sehen, um zu neigen, wie viele Arbeiter nahm den Job (natürlich muss dies erlauben 1), Job-Priorität, kann die Liste weiter und weiter gehen. 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

Wie bereits erwähnt, werden die Arbeiter unserer Job-Management für uns tun jetzt, so alles, was wir brauchen, um wirklich zu tun ist einen Job zu finden, dass die Verarbeitung braucht und die Informationen. Wie würden wir das tun? Nun holen unsere Aufgabe Auswahlkriterien und suchen Arbeit, in SQL Ich habe die folgenden:

  1. Nehmen Sie alle Jobs, die nicht so vollständig, aber aus unserer Arbeiter sind markiert und zurückgesetzt werden (Ersatz __ME__ mit einer Kennung, am einfachsten wäre IP-Adresse):
      UPDATE `Arbeitsplätze` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Mit unserem Job Auswahlkriterien, wählen Sie einen Job und sagen, die Regelung, dass diese Arbeitnehmer mit ihm zu tun haben:
      UPDATE `Arbeitsplätze` `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 oder SET
     (`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    Durch grabbing Jobs, die nicht Ergebnisse wurden in X viel Zeit wir dafür sorgen, dass alle Arbeitsplätze im Falle eines Arbeitnehmers Abstürzen oder gehen AWOL ausgeführt werden zurückgegeben.

  3. Als nächstes hol dir die Jobs Details durch die Datensätze selbst verfolgt:
      SELECT * FROM `Arbeitsplätze` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Nach Abschluss der Arbeit setzen wir unser Ergebnis Aufzeichnungen und markieren Sie die Aufgabe als abgeschlossen. Denken Sie daran, wie Arbeitsplätze können suspend / jederzeit wieder aufnehmen können für einige Robustheit in Ihrem Skript. Es könnte sein, dass die Aufgabe auf halbem Weg unterbricht durch die Aktualisierung der Job-Steuerung, so überprüft die Anzahl der Datensätze in einem Job und die Anzahl der Ergebnisse zurück an den Job-Steuerung gespeichert wäre eine weise Entscheidung.

Darüber hinaus, während dies zeigt, wie Arbeitsplätze ausgewählt werden kann und aus einer SQL-Abfrage Rahmen wirklich verwaltet werden sollte, zu abstrahieren Ihre Arbeit kontrollieren, so dass, wenn Sie sich entschließen, die Verwendung eines Web-Service, eine Datei-basierte System, schalten XML , oder jede andere Anzahl der Systeme wird es keinen Einfluss auf die Code darüber.

Job-Konfiguration

Der nächste Aspekt ist die Größe des Auftrags und Konfiguration. Durch das Spiel mit Job-Konfiguration können wir schlagen eine exzellente Balance zwischen Geschwindigkeit, Prozess-Replikation und Zuverlässigkeit. Nehmen Sie ein paar ofa Szenarien:

  1. Jobs nehmen jeweils 1 Tag zu laufen: Dies bedeutet, dass Ihre Mitarbeiter 15 Tage brauchen, um jeden Job Prozess (Sie erinnern sich 10% der Energie für 2/3rds der Zeit). Dies ist offensichtlich nicht eine weise Konfiguration ist es Ihre Aufgabe Größe viel zu groß! Es würde mindestens die doppelte Zeit, um einen Job verarbeitet bekommen die ersten Arbeiter gehen sollte AWOL (Zeit abholen, dass es nicht wieder ein Ergebnis sowie Wiederaufbereitung Zeit). In einer idealen müssten Sie mindestens einen vollen Job einfach bis zum Ende des jeweils langen Ruhezeit geräumt, da man so die Arbeitsplätze Leerlauf und im schlimmsten Fall ein Job behalten würde zwei Tage dauern die ersten gehen sollte fehlen.
  2. Jobs nehmen 1 Minute zu laufen: Dies bedeutet, dass Ihre Mitarbeiter etwa 15 Minuten dauern, bis jeder Auftrag ausgeführt. Dies mag zunächst scheinen ideal, Ihnen zusätzliche Arbeit Verarbeitungsverstärkung während der Mittagspause, Kaffeepausen, Meetings, etc diesem Szenario belastet die andere Bereiche Ihres Systems und stellt seine eigenen Probleme. Zum Beispiel, zunächst das Setup / Bearbeitungszeit Verhältnis wird sich bis hinunter zu gehen, daher verlieren Effizienz des Systems. Ihr Netzwerk sein wird ständig Streaming Job-Informationen zu den verschiedenen Arbeitern frustrierend Mitarbeiter, dong sind ihre tägliche Arbeit. Sie werden auch mehr Belastung für Ihr Job-Verarbeitung-Server setzen, wie es austeilen viele, viele kleine Stücke von der Arbeit auf einer regelmäßigen Basis hat. Schließlich, in dieser Situation, wenn dein Job Server ausfällt wirst du eine riesige zurück Protokoll nicht abgeschlossener Arbeiten während größere Arbeitsplätze schaffen könnte Weiterverarbeitung völlig ahnungslos, dass der Job Server war in Schwierigkeiten.

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.

Zusammenfassung

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.

Nächstes Mal

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

Office-Grid Computing mit virtuellen Umgebungen - Teil 5

Mit , Freitag 4. Dezember 2009 11.03 Uhr

Einführung

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. So,

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

Einsatz

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.

Hintergrund

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.

Über den Kurs

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 Zertifizierung

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.

Zusammenfassung

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.












Panorama Theme by Themocracy

9 Besucher jetzt online
7 Gäste, 2 Bots, 0 Mitglieder
Max Besucher heute: 22 um 06:15 UTC
Diesen Monat: 23 am 24-08-2011 05.40 UTC
Dieses Jahr: 130 am 28-03-2011 10.40 UTC
Insgesamt: 130 am 28-03-2011 22.40 UTC