Dynamisch Hinzufügen von Seiten zu Zend_Navigation Container zur Laufzeit

Mit , Donnerstag 7. Januar 2010 22.50 Uhr

In einer Fortsetzung zu meinem letzten Beitrag über Zend_Navigation, Route Requests für sitemap.xml, benutzerdefinierte Controller / Action , ist diese Post über dymnamically Hinzufügen von Seiten zu einem Zend_Navigation Container zur Laufzeit / Skript-Ausführung.

Es ist alles schön und gut, unter Angabe Ihrer Seiten in einer INI-oder XML- Datei, aber irgendwann wirst du haben wechselnden Seiten Ihrer Website, die Sie als Teil eines Menüs, Sitemap, oder in Ihrem Brotkrumen einbezogen werden. Deshalb, was wir tun müssen, ist unsere Seiten hinzufügen Zend_Navigation Container zur Laufzeit. Beispiele hierfür wären das Hinzufügen in Nachrichten, Blog-Posts oder Kommentare Seite, etc. sein

Continue reading 'Dynamisch Seiten hinzufügen Zend_Navigation Container zur Laufzeit' »

Route Requests für sitemap.xml, um benutzerdefinierte Controller / Action

Mit , Mittwoch 6. Januar 2010 12:13 am

Um den direkten Anfragen / sitemap.xml auf eine benutzerdefinierte Controller und die Aktion in Ihrem Zend Framework -Anwendung fügen Sie einfach Folgendes in Ihrer application.ini oder alternative config-Datei (z. B. I Verwendung 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 der entsprechenden Controller (zB meine sitemap liegt in den Index-Controller, sitemap Aktion) zu sehen:

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

Sitemaps können schnell und einfach erzeugen, indem Sie Zend_Navigation , ein großer kurze Einführung (und im Allgemeinen sehr nützlich für Zend Framework Tutorials) ist Zend Casts - Dynamisches Erstellen Sie ein Menü eine Sitemap und Paniermehl .

Zend Framework pro Modul Basis-Einstellungen

Mit , Freitag 1. Januar 2010 10.40 Uhr

Ich habe eine Antwort auf diese Post, die weniger Konfiguration erfordert erstellt, finden Sie in Modul basierten Layouts - Zend Framework .

Bei Verwendung des Zend Framework mit Modulen, seine Hand, dass, wenn Sie verschiedene (Unter-) Seiten sind aus der gleichen Anwendung, die Sie wollen nicht unbedingt die gleichen Layout-Skripten für jeden Teil. Ich beschloss, mit dem folgenden Website-Struktur gehen:

  / Anwendung
     / Controller
         ...
     / Modelle
     / Modules
         / Default
             / Controller
             / Layout
                 / Scripts
             / Views
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Das Problem war die Einrichtung der Layout-Skripte auf einer per-Modul Basis. Die Antwort kam durch Verwendung einer Aktion Helper. Einrichten der Layouts auf einer per-Modul Basis umfasst drei Schritte:

  1. Application.ini (oder eine ä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 Ihr Action Helper:
      <? Php
     / **
      * Stellt die Layout-Pfad auf einer Pro-Modul Basis
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Seit 2010-01-01
      * /
     Klasse Pro_Controller_Action_Helper_SetLayoutPath
         erstreckt Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Layout-Sets Pfad auf der Basis-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 die Bootstrap Action Helfer:
      ...
         / **
          * Richtet Layout Skripte auf einer Pro-Modul Basis
          * /
         geschützte Funktion _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker :: addHelper (
    	         neuen 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 Verwendung verwenden möchten, Doctrine ORM für meine Datenbank-Modelle. Ich brauche zum Einrichten des Schemas, so dass er mich zu einem Standardformat für Datum und Zeit für eine `datetime` Spalte gesetzt, z. B. beim Hinzufügen einer neuen Nachricht bekomme ich den aktuellen Zeitstempel. Nach langem Suchen und Experimentieren fand ich die Lösung, damit ich es weitergeben werde.

In Ihrem Schema YAML -Datei einfach folgende Regel:

 Nachricht:
   ActAs:
     Timestampable:
       erstellt:
         Name: created_at
         Typ: Timestamp
         Format: Ymd H: i: s
       Update:
         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)
     message: String (2000)

Wenn auf der anderen Seite Sie nicht wollen, ein `` updated_at Spalte können Sie die folgenden Schritte aus:

 Nachricht:
   ActAs:
     Timestampable:
       erstellt:
         Name: created_at
         Typ: Timestamp
         Format: Ymd H: i: s
       Update:
         Behinderte: true
   Spalten:
     ID:
       Typ: integer
       Primär: true
       Autoincrement: true
     Name: string (255)
     E-Mail: string (300)
     message: String (2000)

PHP Design Patterns - Observer-Muster

Mit , Dienstag 29. Dezember 2009 22.02 Uhr

Ich lese Head First Design Patterns vor kurzem und haben beschlossen, einige der Muster als PHP-Beispiele für mein eigenes Wohl zu schreiben. Die erste, die ich bereits in Code bis entschieden ist das Observer-Muster . Die formale Definition des Observer-Muster ist:

Das Beobachter-Muster (eine Teilmenge der asynchronen Publish / Subscribe-Muster ) ist ein Software- Design-Pattern , bei dem ein Objekt , das Thema genannt, führt eine Liste der ihrer Angehörigen, als Beobachter, und benachrichtigt sie automatisch über alle Statusänderungen, 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 darauf achten, dass, wenn ein Ereignis alle Systeme, die Kenntnisse über diese Updates erfordern passiert, informiert werden. Zum Beispiel, ein Blog-Eintrag, nach dem Speichern einen Beitrag müssen wir möglicherweise eine Suchmaschine zu aktualisieren (zB Lucene), aktualisieren Sie die 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 die Injektion von Beobachtern (dh eine Suchmaschine Aktualisierung Beobachter, ein Sitemap-Generator, usw.) in einem Thema (zB Blog-Post Editing-System) können wir damit der es um alle notwendigen Updates ohne Änderungen durchzuführen.

Continue reading 'PHP Design Patterns - Observer-Muster' »

Office-Grid-Computing-Umgebungen mit Virtual - Teil 4

Mit , Freitag 4. Dezember 2009 11.59 Uhr

Einführung

Ich arbeite in einer Firma, wo wir viele Batch-Jobs Verarbeitung von Millionen von Datensätzen von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich um jeden und jeden Tag sitzen Nichtstun für mehrere Stunden laufen. Wäre es nicht gut, wenn wir diese Maschinen benutzen könnte, um die Rechenleistung unserer Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Beschäftigung ein Büro aussehen Gitter mit virtualisierte Umgebungen.

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

Die neueste Code

Zwangsläufig nach der Erstellung Ihres Business-Logik Arbeiter wird sich ändern, Bugs gefunden werden, wird schneller und effizienter Code erzeugt somit Verlassen Ihres Arbeiter saßen um die Verarbeitung von Daten mit Hilfe werden alte stinkende Code . Wie also stellen wir sicher, dass wir immer die neueste und beste Version von unserer Verarbeitung Skripte?

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

Die erste Methode wäre, einfach zu unserem Job-Control-Server (über Samba, FTP, oder ähnliches) anschließen und nach unten ziehen Sie die neueste Version des Codes. Nicht sehr effizient, aber es wird den Job zu erledigen. Lets verbessern, dass etwas auf, wie etwa die Schaffung eines rsync-Skript und die Verwendung dieser jedes Mal statt? Alternativ, was darum, unsere neuesten Verarbeitung Skript in Subversion Auschecken der Code zunächst und dann nur die Aktualisierung unserer 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 wird gerade verarbeitet, Ausfahrt"
 sonst
     echo "Job nicht läuft, jetzt beginnen"
     cd / pfad / zu / Arbeit / Kopie
     svn update
     php yourJobProcessingScript.php
 fi 

Jetzt können wir sicher sein, dass bei jedem Durchlauf werden wir auf jeden Fall mit der neuesten Code. Wir gewährleisten dies durch die Aktualisierung unserer Code-Basis jedes Mal führen wir einen Lauf und reduziert den Netzwerkverkehr durch die Übertragung der Datei nur Unterschiede in unserem Netzwerk.

In meiner Demo-Setup, das habe ich 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, um mein Script, das die Verarbeitung in der Datenbank als Teil der Ergebnisse wurde wieder zurückgegeben. Auf diese Weise konnte ich sehen, dass mein Code wird jedes Mal wurde ich kopiert meinen Stamm in den Arbeitsprozess Filiale dh, dass ich auf jeden Fall die neueste Verarbeitung Skript aktualisiert.

Mit den neuesten Daten

Wenn Ihr Job-Verarbeitung nutzt Datenquellen dann irgendwann diese wirst auch aktualisiert werden. Sofern Sie rufen Ihre Datenquellen auf einer sehr unregelmäßigen Abständen wollen Sie Ihre Netzwerk-Verkehr mit, sobald Sie Ihre Arbeiter laufen bringen alles zum Stillstand beginnen zu überschwemmen sind. Für meine Lösung entschied ich mich, dass ich möchte meine Datenquellen bewegen mit meinen VMs.

Halten Sie sind Pferde dort! Was, wenn mein Datenquellen sind riesig? Gut, das ist wirklich ein Fall von, wie viele Daten sprechen wir? Es kann kostengünstiger sein, einen zusätzlichen größere Festplatte in jeden Rechner zu installieren, als um eine zusätzliche Verarbeitung Server zu erwerben. Dies ist eine Frage des Budgets und ist bis zu dem Geschäft zu entscheiden. Es ist vielleicht, dass Ihre Daten-Quellen sind so groß, dass ihr einfach nicht machbar, diese Menge an Daten in Ihrem Arbeitscomputer zu halten. In diesem Fall, was würden Sie tun? Nun konnten wir auf den Aufruf einer lokalen Daten-Server suchen, aber dies könnte Probleme mit dem Netzwerk zu verursachen. In diesem Fall wird ein Grid-System, wie dies unrealistisch geworden, um in Ihrer Büroumgebung gehören. Es kann auch sein, dass man in alternativen Strategien laufen sehen, zum Beispiel nur telefonisch bei Ihrer Arbeiter von 8.00 bis 06.00 jede Nacht und / oder Drosseln Datenquelle Zugriffe.

Wir bewegen können sagen, unsere Datenquellen Betrag zu 100 GB Daten. Nun ja, das ist ziemlich viel Daten zu rund um das Netzwerk an einem Update zu bewegen. Wie würden wir sicherstellen, dass wir die neueste Kopie der Daten in diesem Fall haben? Rsync ist eine Möglichkeit, aber ich persönlich denke, indem Sie Ihre letzte Datenquelle in Ihrem Job Processing Server und Einrichten dieser als 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 Sklave auf die Job-Control-Server Updates für Ihre Datenquellen wird Trickle-Down schön, um Ihre Mitarbeiter ohne einen enormen Anstieg der Netzwerk-Aktivität (dh, wenn Sie eine riesige Daten-Update, und führen Sie alle Ihre Arbeiter treten in auf einmal). Dies hat Vorteile gegenüber rsync, dass Sie nicht bekommen würde, eine lange Pause vor jedem Job, wie die Datenbank-Updates, die MySQL -Daemon auf Ihrer Arbeiter wird ständig aktualisiert seine Daten während der Verarbeitung fortgesetzt wird.

Dies ist, wie ich mein Demo-Server. Zum Einrichten der Replikation Ich folgte der Anleitung auf der MySQL-Website ( Einrichten der Replikation ) und innerhalb von 20 Minuten hatte ich meine initiale Replikation Arbeiter den Job-Control-Server Datensatz. Für jede weitere Arbeiter die Replikations-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 zu Ihrem Verarbeitungscode Stand zu halten, indem using rsync oder subverion (SVN) bisher die Arbeit machen und den Netzwerkverkehr zu reduzieren gleichzeitig time.A ausgesehen haben wir auch diskutiert, wie zu Ihrer Datenquelle Informationen up-to-date, indem man es rieseln an jeden Ihrer Mitarbeiter zu halten. So haben wir Raum dafür, dass wir Schritt halten mit Geschäftslogik und Informationen in unserem Büro Grid-System. Es wird natürlich unzählige Alternativen zur Durchführung dieser Aufgaben sein, aber hier waren zwei einfache Beispiele zu zeigen, wie einfach eine Lösung zu bekommen ist.

Nächstes Mal

Im letzten Teil dieser Serie, treffend benannt Teil 5 werden wir diskutieren, die Bereitstellung dieses System für die. Ich werde zusammenfassen, was gelernt wurde und was ich schaffen konnte.

Office-Grid-Computing-Umgebungen mit Virtual - Teil 3

Mit , Freitag 4. Dezember 2009 23.37 Uhr

Einführung

Ich arbeite in einer Firma, wo wir viele Batch-Jobs Verarbeitung von Millionen von Datensätzen von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich um jeden und jeden Tag sitzen Nichtstun für mehrere Stunden laufen. Wäre es nicht gut, wenn wir diese Maschinen benutzen könnte, um die Rechenleistung unserer Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Beschäftigung ein Büro aussehen Gitter mit virtualisierte Umgebungen.

In Teil 2 haben wir uns die Arbeitsplätze ein Server läuft, und wie Arbeitsplätze sollten so konfiguriert werden, um die größte Menge der Verarbeitung bei gleichzeitiger Gewährleistung, dass jeder Job Treffsicher verarbeitet zu erreichen.

Einrichten des Arbeitnehmers - oder LIMP Server

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

  • Installieren von VirtualBox auf Ihrem Windows-Rechner (Link folgen)
  • Downloaden und installieren Sie CentOS (aktuelle Version 5.3) erstellt innerhalb einer virtuellen Maschine

Es macht keinen Sinn mich werde dies 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 ist zu beachten Ich nehme an, dass ich meine virtuelle Maschine GridMachine genannt.

Soweit meine Entscheidungen der Virtualisierung Client und Betriebssystem gehen gibt es keinen zwingenden Grund, große Auswahl für jeden. VirtualBox ist etwas, was ich auf meinem Rechner zu Hause und wird von den drei wichtigen Betriebssysteme 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 bin Anwendung "verwenden Sie den schnellsten und einfachsten für Sie"-Mentalität hier), so dass, wenn das Betriebssystem X läuft der Code schneller und effizienter bearbeiten, dass anstelle nutzen :)

Wichtig ist sicherzustellen, dass Ihre VM DHCP verwendet, sonst für jede neue virtuelle Maschine müsste separat konfiguriert werden, welche wir so nicht want.By nicht über DHCP die wir nicht brauchen, um Netzwerk-Einstellungen individuell konfigurieren für Arbeitscomputer, wird DHCP übergeben IPs aus für Sie. Daher können Sie Ihre virtuelle Maschine über das Büro, ohne sich Gedanken über die Einstellung jedes einzelne bis (dies erhöht die Skalierbarkeit und reduziert die Arbeiter Verwaltung) zu kopieren.

Der Prozess, den Sie erreichen wollen sollte sein würde, um eine neue physikalische Maschine, installieren Sie VirtualBox zu erhalten, und dann so ziemlich das virtuelle Bild einsetzen, ohne viel mehr. Es könnte klug sein, um alle Ihre Arbeiter in einem anderen Subnetz einrichten, so dass Sie wenigstens sehen, wie viele Maschinen laufen. Außerdem benötigen Sie zum Einrichten Ihrer Maschinen auf einem Erbpacht-oder DHCP-Lease unbegrenzt.

Wie Jobs auf den Arbeiter laufen

Dies ist ein interessantes Gebiet und es gibt mehrere Methoden für die Verarbeitung gültig Arbeitsplätze auf den Arbeiter. Hier habe ich hier nur die beiden auf der Hand:

  • Ständig laufende Skript: Ein Skript, das ein Shell-Skript oder ein PHP-Skript sein, wird einmal auf dem Arbeiter ausgeführt und wird als Teil einer Endlosschleife. Ich habe diese Methode als ein Absturz des Skripts abgezinst und potenziell Ihrer Mitarbeiter wird nicht mehr ohne irgendeine Art von Intervention führen.
  • Cron basierte Skript-Ausführung: alle X Minuten der Cron-Daemon startet einen Aufruf an Ihr Skript um Dinge geht. Ohne eine gewisse Kontrolle, könnte dies zu viele, viele Kopien Ihrer Arbeiter laufenden Skripts führen.

Meine Entscheidung war zu gehen, welche mit cron startet ein Shell-Skript alle 10 minutes. Mein Shell-Skript führt die folgenden Aufgaben:

  1. Holen Sie sich ein Prozess-Liste und grep dieses für 'php'. Wenn nicht gefunden, dann weiter.
  2. Rufen Sie Ihre Job-Code, in meinem Fall wäre dies etwas sein PHP-Basis
  3. Worker-Skript vervollständigt seinen Lauf
  4. Bereit, wieder zu gehen, auf der nächsten entsprechenden Aufruf

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

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

Hinweis: Die ECHO sind fast völlig sinnlos, sondern kann die nächste Person, der kommt, um zu versuchen und zu bearbeiten ihnen zu helfen.

Damit ist die Einrichtung des Arbeiters virtuelle Maschine, schnell, einfach, und einfach zu jedem neuen Stück Hardware, das empfangen zu kopieren. Die "Klugheit" des Netzes ist wirklich nicht in der visualisierten OS, es ist alles mit dem Code erstellt, um Arbeitsplätze Prozess, der Job-Konfiguration, und tun in bezug darauf, dass der Job bei Bedarf (dh wenn der Host läuft im Leerlauf ).

Einrichten von Windows zu initialisieren Workers

Die erste Aufgabe ist die Erarbeitung des Befehls erforderlich, um die virtuelle Maschine aus der Windows-Kommandozeile gestartet wird. Wenn Sie VirtualBox in der Standard-Speicherort installiert haben und Sie haben Ihre Arbeiter namens GridMachine dann der Befehl zum Laden Sie Ihre Arbeiter ist:

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

Allerdings, um das Skript in einem "kopflosen" Zustand laufen müssen wir nutzen:

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

Dadurch wird die virtuelle Maschine ohne die GUI zu starten und lassen Sie ihn anmutig Zustand 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. Der Name der virtuellen Maschine ist Groß-und Kleinschreibung!

Als Nächstes werden wir benötigen, um Windows einrichten zum Auftakt unserer Arbeiter VM, sobald die Maschine im Leerlauf war. Um dies (unter Windows XP) tun, 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" durch blättern, um ein benutzerdefiniertes Programm hinzufügen, gefolgt. Navigieren Sie zu Ihrem VBoxManage Skript und klicken Sie auf OK. Planen Sie Ihre Aufgabe für eine der Optionen (wir werden dies in einer Minute zu ändern) und fahren weiter. Nach dem Überspringen der nächsten Bildschirmfenster werden Sie fragen, wer Ihnen diese Aufgabe ausgeführt werden soll, würde ich vorschlagen, entweder "Administrator" oder Erstellen eines neuen privilegierten Benutzer. Denken Sie daran, wir wollen nicht mit dem Standard-Personal-Account auf der Maschine zu jedem Zeitpunkt eingreifen. Klicken Sie auf Weiter, und überprüfen show advanced options für diese Aufgabe.

Zum Ende des Laufs Textfeld hinzuzufügen unsere 'startvm GridMachine' string und sicherzustellen, dass nur ausgeführt, wenn in unticked gelassen wird protokolliert. Besuchen Sie den Zeitplan und nächste Aufgabe Ändern des Zeitplans fallen bis auf die Option "im Leerlauf", wählen Sie die Zeit, Sie möchten die Maschine, müßig zu sein, bevor sie zu dem nächsten Reiter würde.

Schließlich deaktivieren Sie die Option, stoppen Sie den Task-Zustände, wenn es läuft worden X Höhe der Zeit, aber nicht die Möglichkeit, den Task zu beenden, wenn die Maschine im Leerlauf nicht mehr kreuzen.

planen

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 Auftragsbearbeitung Skripte handeln gesetzt ist (für mich selbst ein PHP-Skript). Von hier aus schauen wir uns, wie Sie unsere Kopien von Windows zu starten Sie die virtuelle Maschine im Headless-Modus, wenn der Computer im Leerlauf befindet, und speichern ihren Zustand, wenn der Benutzer wieder auf Nutzung der Maschine. Hoffentlich an dieser Stelle, die Sie sehen, wie einfach es zur Einrichtung eines solchen Systems ist und brennen darauf, bekommen 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 Informations-und Business-Logik zu suchen.

Office-Grid-Computing-Umgebungen mit Virtual - Teil 1

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

Ich arbeite in einer Firma, wo wir viele Batch-Jobs Verarbeitung von Millionen von Datensätzen von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich um jeden und jeden Tag sitzen Nichtstun für mehrere Stunden laufen. Wäre es nicht gut, wenn wir diese Maschinen benutzen könnte, um die Rechenleistung unserer Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Beschäftigung ein Büro aussehen Gitter mit virtualisierte Umgebungen.

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

Die Lösung, die ich geben wird sehr locker von der Art der Verarbeitung müssten wir jedoch erreichen diese unter Umständen nicht durch den gesamten Artikel auch wirklich, wie ich die Dinge ändern werden der Einfachheit halber, oder um mehr interessante Anwendungsszenarien produzieren basieren.

Diese virtualisierten Umgebungen wird auf Windows-Rechnern laufen, da dies nur die Mehrheit des Büros laufen. Die Verarbeitung, dass die Büromaschinen tun sollten nicht mit den Mitarbeitern bei der Nutzung dieser Maschinen beeinträchtigen, sollten erfordern keine Wartung an der Maschine, und leicht einsetzbare, neue Maschinen, wie sie verfügbar sind. Auch sollten neue virtuelle Maschinen keine zusätzliche Konfiguration, wie 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 eine Cloud-Computing-Ressourcen wie EC2-Plattform Amazon ? Nun, die Gründe sein könnten mehrere, zum Beispiel:

  • Sie werden nicht anvertrauen bestimmte Daten an eine Cloud Computing-Umgebung
  • Sie können nicht bestimmte Daten in eine Cloud Computing-Umgebung aus rechtlichen Gründen (z. B. Daten verlassen das Land), möglicherweise aus rechtlichen Gründen, z. B. NHS-Datensätze.
  • Du willst deine Processing Units zu schließen und haben volle Kontrolle über die Hardware zu
  • Sie verfügen nicht über die Projektmittel zu Cloud-Instanzen laufen
  • Ihr Büro hat bisher keine Verbindung zum Internet und damit dessen nicht möglich, eine Cloud-Ressourcen nutzen
  • Sie mögen es nicht regen, regen Wolken schlagen daher vor Ihnen fern zu halten

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

Die Vorteile einer Office-Computing Grid

Nun, lets do einige Mathe (und im wahren Stil Physik lets make einige gängigen Annahmen). Angenommen, Sie haben große bullige Verarbeitung Server mit 100 Arbeitsplätzen pro Tag. An Ihrem Arbeitsplatz sind 50 Maschinen, die im Leerlauf 16 Stunden am Tag sind, haben, ist jede dieser Maschinen 10% so stark wie Ihr bulliger Verarbeitung Sever. (Alle Ergebnisse hier sind abgerundet, um Performance-Steigerung zu unterschätzen).

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

Wenn Sie nun diese zu skalieren bis es dauert 15 Leerlauf-Desktops für so viele Arbeitsplätze pro Tag verarbeiten können als Haupt-Processing Server tut.

Also in unserem Büro pretend von 50 Maschinen konnten wir unsere Rechenleistung von 1 Server erhöht sich bis auf 4 volle Verarbeitung Servern, oder wir könnten die Verarbeitung 400 Arbeitsplätze pro Tag statt 100.

Unsere, für keine Investitionen in neue Hardware Ihr Unternehmen hat gerade seine Batch-Verarbeitung erhöht Kapazität 4 mal! Möglicherweise wirst du Ihren Stromverbrauch zu erhöhen, aber von den meisten Büroumgebungen Ich habe mit Maschinen gewesen sind in der Regel über Nacht verließ trotzdem, so könnte man dies als eine grüne Initiative zu sehen.

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

Technologies

Was Sie brauchen? (Oder korrekter: Was habe ich benutzt):

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

Typische Jobs

Die Arten von Jobs, dass dieses System ausgelegt ist, ausgeführt ist wie folgt:

  • System erhält eine Liste von Daten, auf denen wir müssen passen 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 als Reaktion auf Ergebnisse
  • Die Daten werden mit passenden Datensätze zurückgegeben, vollständig validiert und verarbeitet
  • Jeder Datensatz in einer Aufgabe ist unabhängig von den übrigen

Also im Grunde sind wir bei laufenden Arbeiten, die ein Gemisch von Datenbankabfragen und eine gewisse Anzahl Knirschen, ein recht 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, die 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 bionischen . Es gibt Rahmenbedingungen für die Ausführung von Computing-Grids, und diese sind auch diskussionswürdig.

Was werden wir zu erreichen?

Bis Ende diesen Artikel Ich hoffe, um zu zeigen, dass die Bereitstellung eines Büros Gitter müssen nicht enorm teuer oder zeitaufwendig sein. Ich werde zu diskutieren:

  • Einrichten des Job-Control-System, Job-Konfiguration
  • Schaffung eines geeigneten Verarbeitung virtuellen Maschine
  • Wie Sie das System auf einem Windows-Rechner einrichten
  • Gewährleistung Sie sind mit der neuesten Code und Daten
  • Deployment und Benchmarking
  • Blick in die Zukunft

Ich werde Gebäudes sein (ok ich gebaut, dann schreibt dies) ein Beispiel-Anwendung, um die Konzepte auf einem lokalen Computer unter Windows XP und mein 'GridMachine' virtuellen Maschine zu testen. Mein Job Control Server wird meine wichtigste Maschine, die läuft sein Fedora 11 .

Dies wird in keiner Weise soll ein voll funktionsfähiges robustes System zu demonstrieren, bedeutete seine eher eine Demonstration und Diskussion zeigt, dass diese Dinge in einer recht kurzen 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 entsprechend aktualisiert zu halten.

Nächstes Mal

In Teil 2 werde ich, indem man die Job-Control-System starten, und prüfen, wie Arbeitsplätze sollten so konfiguriert werden, um die größte Menge der Verarbeitung bei gleichzeitiger Gewährleistung, dass jeder Job Treffsicher verarbeitet zu erreichen.

Office-Grid-Computing-Umgebungen mit Virtual - Teil 2

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

Ich arbeite in einer Firma, wo wir viele Batch-Jobs Verarbeitung von Millionen von Datensätzen von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich um jeden und jeden Tag sitzen Nichtstun für mehrere Stunden laufen. Wäre es nicht gut, wenn wir diese Maschinen benutzen könnte, um die Rechenleistung unserer Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die potenziellen Vorteile der Beschäftigung ein Büro aussehen Gitter mit virtualisierte Umgebungen.

In Teil 1 Ich gab einen Überblick über das System und Technologien I verwenden werden sowie einige der möglichen Gründe diskutiert, warum Sie wollen würde, ein Büro Raster zu erstellen.

Job Control

Wenn Sie vorhaben, werden laufende Aufträge sind dann wirst du einen Weg, sie zu verwalten müssen. Ihre Job-Control-System (auf dem Job-Server) muss wirklich gut durchdacht sein, bevor auch nur zu versuchen, ein Büro Grid laufen. Also erstens, was sind die Aufgaben für eine Job-Control-System:

  • Auszuteilen Arbeitsplätze auf Anfrage von Arbeitern
  • Sag Arbeiter Welche Arten von Job zu laufen
  • Track-Arbeitsplätze
  • Sicherstellen, dass die Aufträge erst dann zu laufen, wenn
  • Provide job data to workers, or at least tell them where to get it

The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

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

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

Basic Setup

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 1: Picked up
    • 2: Completed
  • started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
  • started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

Die nächste Tabelle wieder ist recht einfach zu verstehen, das sind unsere Job Datensätze. Sie werden dem Haupt-Arbeitsplätze Tabelle nach einer Spalte `jobs_id` verknüpft. Das Make up von dieser Tabelle hängt sehr stark von den Daten, die Sie benötigen, um Ihre Mitarbeiter zu versorgen, lets make ein sehr einfaches Beispiel, wo wir vier Säulen:

  • ID: ID des Datensatzes
  • Name: Name der Person
  • Adresse: Person die Adresse
  • jobs_id: Die Job-ID, dass dieser Datensatz verknüpft ist

Die dritte und letzte Tabelle besteht aus einer Ergebnistabelle, hat es viel anders machen als unsere Aufzeichnungen Tisch, und mit der Zugabe von einigen Spalten könnte ein Teil der Aufzeichnungen Tisch sein:

  • job_record_id: Verknüpfen Sie das Ergebnis in den Job-Tabelle
  • Ergebnis: Die Ergebnisdaten

... Und das ist alles, was Sie für Job-Kontrolle! (Wenn auch auf einer sehr grundlegenden Ebene) In meinem Fall bin ich an einen anderen Tisch, wo meine Daten zu verarbeiten befinden sollte, aber das könnte genauso gut eine Datei, Parameter zur Simulation Code ausführen, you name it.

Die Auswahl einer Job

Wie bereits erwähnt, werden die Arbeiter unserer Job-Management für uns tun im Moment, so dass alles was wir brauchen, um wirklich zu tun ist, einen Job zu finden, die Verarbeitung benötigt und die Informationen bekommen. Wie würden wir das tun? Nun nehmen unseren Job Auswahlkriterien und suchen nach Jobs, die 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 sie (ersetzen __ ME__ mit einer Kennung, am einfachsten wäre IP-Adresse sein):
      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 Steuerung, dass diese Arbeiter der es beschäftigt:
      UPDATE `Arbeitsplätze` SET `Status` = 1, `` = __ started_by ME__, `started_at` = NOW () WHERE `Status` = 0 ODER
     (`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL x Stunde)) ORDER BY `id` ASC; 

    Durch Greifen Jobs, die nicht Ergebnisse wurden in X Höhe der Zeit stellen wir sicher, dass alle Arbeitsplätze im Fall eines Arbeitnehmers, Abstürzen oder er unerlaubt geführt werden zurückgegeben.

  3. Als nächstes hol dir die Jobs Details von den Platten selbst befolgt:
      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 seit einiger Robustheit in Ihrem Skript. Es könnte sein, dass die Aufgabe, auf halbem Weg unterbricht durch die Aktualisierung der Job-Control-System, so dass die Überprüfung der Anzahl der Datensätze in einem Job und die Anzahl der Ergebnisse zurück an den Job-Control-System gespeichert wäre eine weise Entscheidung.

Darüber hinaus, während dies zeigt, wie Arbeitsplätze ausgewählt und können aus einer SQL-Abfrage-Rahmen wirklich werden sollte verwaltet werden abstrahiert Ihren Job-Kontrolle, so dass, wenn Sie sich entschließen, die Verwendung eines Web-Service, eine Datei-basierte System, schalten XML , oder jede andere Anzahl von Systemen wird es keine Auswirkungen auf die obigen Code es.

Job-Konfiguration

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

  1. Jobs dauern jeweils 1 Tag zu laufen: Das bedeutet, dass Ihre Arbeiter 15 Tage brauchen, um jeden Auftrag zu bearbeiten (Sie erinnern sich 10% der Energie für 2/3rds der Zeit). Dies ist eindeutig nicht eine kluge Konfiguration ist es Ihre Aufgabe Größe viel zu groß! Es würde mindestens die doppelte Zeit, um ein Job verarbeitet die ersten Arbeiter gehen sollte AWOL (Zeit zu holen, dass es nicht ein Ergebnis zuzüglich Wiederaufarbeitung rechtzeitig zurückgegeben). In einer idealen man müsste mindestens eine volle Stelle leicht mit dem Ende eines jeden langen Ruhezeit geräumt, so erhalten Sie die Jobs über Ticken halten und im schlimmsten Fall ein Job würde zwei Tage dauern, bis der erste Prozess gehen sollte fehlen.
  2. Jobs nehmen 1 Minute zu laufen: Das bedeutet, dass Ihre Mitarbeiter etwa 15 Minuten dauern, jeden Auftrag ausführen. Dies mag zunächst scheinen ideal, gewinnen Sie zusätzliche Arbeit Verarbeitung während der Mittagspause, Kaffeepausen, Sitzungen usw. Dieses 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 wird ständig Streaming Job-Informationen zu den verschiedenen Arbeitern frustrierend Mitarbeiter, dong sind ihrer täglichen Arbeit sein. Sie werden auch mehr Belastung für das Job-Verarbeitung-Server setzen, wie sie austeilen viele, viele kleine Stücke von der Arbeit auf einer regelmäßigen Basis hat. Schließlich ist in dieser Situation, wenn Ihr Job Server ausfällt wirst du eine riesige zurück Protokoll nicht abgeschlossener Arbeiten während größere Aufträge von der Verarbeitung fortgesetzt könnte völlig ahnungslos, dass der Job Server war mit Schwierigkeiten zu schaffen.

In der Realität wird es niemand ideale Konfiguration für Ihren Netz-Setup sein, viel hängt von den verfügbaren Ressourcen, Arten von Job, Job-Turnaround-Zeit Anforderungen, Netzwerkfähigkeit, und so weiter. Doch einige Richtlinien wäre:

  • Größe Arbeitsplätze, so dass jeder Arbeiter kann durch mindestens 3-4 Arbeitsplätze in einem Zeitraum von 15 Stunden (wahrscheinlich die längste Zeit im Leerlauf) bekommen
  • Spielen Sie mit der Größe des Auftrags, so dass Setup-Zeit wird ziemlich unbedeutend im Vergleich zu der Verarbeitungszeit (unter Berücksichtigung der obigen Punkt).
  • Wenn ein Job nicht in doppelter Höhe der Zeit (vielleicht auch weniger), die Sie erwarten, dass es komplett abgeschlossen ist anzunehmen, dass seine gegangen AWOL und Verarbeiten es mit einem anderen Arbeiter zu beginnen. Das heißt, Sie können warten müssen, bis zu drei Mal die normale Länge von einem Job für ihn zu vollenden (möglicherweise länger, wenn die nachfolgende Auftrag fehlschlägt). Vielleicht möchten Sie diese Zeit zu reduzieren, aber darauf achten, nicht zu viel, wie Sie vielleicht beginnen Duplizieren Bearbeitungsaufgaben auf einer regelmäßigen Basis zu reduzieren.
  • 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-Umgebungen mit Virtual - 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.













Panorama Theme by Themocracy

3 Besucher jetzt online
Gäste: 1, 2 Bots, 0 Mitglieder
Besucher heute: 11 um 06:30 Uhr UTC
Diesen Monat: 16 am 2012.01.05 01.02 Uhr UTC
Dieses Jahr: 69 bei 27-02-2012 09:56 Uhr UTC
All time: 130 at 28-03-2011 10:40 pm UTC