Kategorie: PHP

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

Durch , 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 die folgenden in Ihrer application.ini oder alternative Konfigurationsdatei (zB benutze 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 der entsprechenden Controller (z. B. 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 eines Menüs eine Sitemap und Paniermehl .

Zend Framework Per-Module basieren Einstellungen

Durch , 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 Verwendung des Zend Framework mit Modulen, ist offensichtlich, dass, wenn Sie verschiedene (Unter-) Seiten sind aus der gleichen Anwendung, die Sie wollen nicht unbedingt den gleichen Layout-Skripten für jeden Teil. Ich beschloss, mit den folgenden Website-Struktur zu gehen:

  / Application
     / Controller
         ...
     / Modelle
     / Modules
         / Default
             / Controller
             / 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:
      ...
         / **
          * Richtet 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 ()

Durch , 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)
     message: String (2000)

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

 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)
     message: String (2000)

PHP Design Patterns - Observer Pattern

Durch , Dienstag 29. Dezember 2009 22.02 Uhr

Ich lese 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 Pattern ist:

Das Beobachter-Muster (eine Teilmenge der asynchronen Publish / Subscribe-Muster ) ist ein Software- Design-Pattern , in denen 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 Updates informiert sind, erfordern passiert. Zum Beispiel einen Blog-Post, nach dem Speichern einen Beitrag 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

Durch , 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 von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich 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 möglichen Vorteile des Einsatzes ein Büro aussehen Gitter mit virtualisierten Umgebungen.

In Teil 3 haben wir unsere virtuelle Maschine und Einrichten von Windows-Maschinen auf Leerlauf-innen 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 die Verarbeitung von Daten über sein altes stinkendes Code . Wie also können wir sicherstellen, dass wir immer die neueste und beste Version von unserer Verarbeitung Skripte?

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

Die erste Methode wäre, einfach zu unserem Job Control Server (via Samba, FTP, oder ähnliches) verbinden und ziehen Sie die neueste Version des Codes. Nicht sehr effizient, aber es wird die Arbeit zu tun. Lets verbessern, dass etwas, wie etwa die Schaffung 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 starten"
     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 habe ich genau wie oben. Subversion war auf meiner Job-Verarbeitung-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, welches in der 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 Stamm 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, wenn mein Datenquellen sind riesig? Nun, das ist wirklich ein Fall von, wie viele Daten sprechen wir? Es kann kostengünstiger sein, einen zusätzlichen 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 beim Aufruf einer lokalen Daten-Server aus, aber dies könnte Probleme mit dem Netzwerk verursachen. In diesem Fall wird ein Grid-System, wie dies unrealistisch geworden, um in Ihrer Büroumgebung gehören. Es kann auch sein, dass Sie in alternative Strategien laufen Look sind zum Beispiel nur fordern Ihre Mitarbeiter von 8.00 bis 06.00 jede 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 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 rieseln schön, um Ihre Mitarbeiter ohne einen enormen Anstieg der Netzwerk-Aktivität (das heißt, wenn Sie eine riesige 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, bevor jeder Job wäre, als die Datenbank-Updates, die mysql -Daemon auf dem Arbeiter wird ständig aktualisiert seine Daten während der Verarbeitung fortgesetzt wird.

Dies ist, wie richte ich meine 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 meine inital Arbeiter Replikation der Job-Control-Server-Dataset. Für jede zusätzliche Arbeitnehmer die 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 zu Ihrer 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 zur Durchführung dieser 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 werden wir diskutieren 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

Durch , 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 von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich 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 möglichen Vorteile des Einsatzes ein Büro aussehen Gitter mit virtualisierten Umgebungen.

In Teil 2 haben wir uns die Arbeitsplätze einem Server ausgeführt wird, und wie Arbeitsplätze sollten so konfiguriert sein, 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 der virtuellen Arbeiter. Aus diesem werde ich eine Installation von CentOS mit VirtualBox nutzen. Ich werde zu installieren mySQL und PHP auf dem Server, auch als ein Hinken (Li nux, m ySQL, P HP) Servera (ich machte diesem Namen bis haben) 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 von großer 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 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 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 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, sonst für jede neue virtuelle Maschine müsste separat konfiguriert werden, die wir so nicht want.By nicht über DHCP brauchen wir nicht zu Netzwerkeinstellungen individuell konfigurieren für Arbeitscomputer, 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 des virtuellen Bildes, ohne viel mehr. Es könnte klug sein, um alle Ihre Mitarbeiter in einem anderen Subnetz Setup, so dass Sie zumindest 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 Verfahren zur 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 Endlosschleife. Ich habe diese Methode als eine Absturz des Skripts abgezinst und möglicherweise Ihre Mitarbeiter aufhören, ohne irgendeine Art von Intervention führen.
  • Cron basiert die Ausführung des Skripts: alle X Minuten die cron-Daemon startet einen Aufruf an das Skript um Dinge geht. Ohne eine gewisse Kontrolle, könnte dies zu viele, viele Kopien Ihrer Mitarbeiter script läuft führen.

Meine Entscheidung war, mit cron die angepfiffen ein Shell-Skript alle 10 minutes. Mein 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 weiter.
  2. Rufen Sie Ihre Job-Code, in meinem Fall wäre dies etwas PHP basieren
  3. Worker-Skript beendet seinen Lauf
  4. Bereit, wieder zu gehen auf der nächsten 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 starten"
     php yourJobProcessingScript.php
 fi 

Hinweis: das Echo ist fast völlig sinnlos, sondern kann die nächste Person, die entlang 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, seinen alle mit dem Code erstellt, um Arbeitsplätze, die Job-Konfiguration und in dafür sorgen, dass die Arbeit bei Bedarf ausgeführt wird (dh wenn der Host inaktiv ist Prozess zu tun ).

Einrichten von Windows zu initialisieren Workers

Die erste Aufgabe ist die Erarbeitung der Befehl erforderlich, um die virtuelle Maschine aus der Windows-Kommandozeile ausführen. 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 lassen Sie ihn Zustand 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 Fenstern eingerichtet zum Auftakt unserer Arbeiter VM, sobald die Maschine im Leerlauf war. Um dies zu tun (unter Windows XP) müssen Sie auf Start zu 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 zu ändern) und 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 das Erstellen einer neuen privilegierten Benutzer. Denken Sie daran, wir wollen nicht mit den Standard-Personal-Account auf der Maschine zu jedem Zeitpunkt stören. 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 bleibt 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 unseren 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 Sie die virtuelle Maschine in headless-Modus, wenn der Computer im Leerlauf befindet, und speichern Sie den Zustand, wenn der Benutzer wieder Verwendung der Maschine. Hoffentlich an dieser Stelle die Sie sehen, wie einfach ist die Konfiguration eines solchen Systems ist, 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

Durch , 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 von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich 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 möglichen Vorteile des Einsatzes ein Büro aussehen 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 anpassen.

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 aus Gründen der Einfachheit ändern werde, oder um mehr interessante Anwendungsszenarien produzieren basieren.

Diese virtualisierten Umgebungen 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 beeinträchtigen, 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 eine Cloud Computing-Ressourcen wie Amazon EC2-Plattform ? Nun, die Gründe 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 des Landes), die möglicherweise aus rechtlichen Gründen, wie zB NHS Datensätze.
  • Sie möchten Ihre Processing Units zu schließen und die volle Kontrolle über die Hardware zu
  • Sie verfügen nicht über die Projektmittel auf Cloud-Instanzen laufen
  • Ihr Büro hat bisher keine Verbindung zum Internet und damit seine nicht möglich, eine Wolke Ressourcennutzung
  • Sie mögen es nicht regen, Wolken deuten regen, deshalb auch 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, 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 idle Desktops, um so viele Arbeitsplätze pro Tag verarbeiten als Haupt-Processing Server tut.

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 Batch-Verarbeitung 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 bedeuten auch, dass Investitionen in neue (oder aktualisiert) Verarbeitung Servern verzögert werden kann, wenn Ihr Büromaschinen ausreichend sind, und dass, wie Sie die Leistung Ihres Büromaschinen verbessern Ihr Büro Grid wird mächtiger automatisch.

Technologies

Was Sie brauchen? (Oder genauer gesagt, 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 diese meinen schlaffen Server:)
  • Jobs laufen
  • Job-Server (kann eine andere virtuelle Maschine irgendwo)

Typische Jobs

Die Arten von Jobs, die dieses System ausgelegt ist, laufen ist 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 Beispiele und weitere Informationen: Grid Computing , aber ein paar berühmte Beispiele sind Seti @ Home und BIONC . Es gibt Rahmenbedingungen für die Ausführung von 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 Netz 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äude sein (ok ich gebaut, dann schreibt diese) ein Anwendungsbeispiel, die Konzepte auf einem lokalen Rechner mit Windows XP und mein 'GridMachine' virtuellen Maschine zu testen. Mein Job Control-Server wird meine wichtigste Maschine, die ausgeführt wird 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 entsprechend aktualisiert zu halten.

Nächstes Mal

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

Office-Grid Computing mit virtuellen Umgebungen - Teil 2

Durch , 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 von Daten jeden Tag und ich habe in letzter Zeit über alle Maschinen, die sich 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 möglichen Vorteile des Einsatzes ein Büro aussehen Gitter mit virtualisierten Umgebungen.

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

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 Netz laufen kann. Also erstens, was sind die Aufgaben für eine Job-Control-System:

  • Hand von Jobs auf Anfrage von Arbeitern
  • Sag Arbeiter, welche Art von Jobs, die
  • Ihre Arbeitsplätze
  • Stellen Sie sicher, dass die Arbeitsplätze nur einmal ausgeführt
  • Geben Sie Job-Daten für die Arbeitnehmer, oder zumindest sagen, wo man es bekommt

Das System muss auch erweiterbar, eine Lösung, die für die arbeitet jetzt in einem einzigen Fall kann verlängert werden, verschiedene Arten von Arbeitsplätzen führen, wie das Unternehmen sieht den Wert in einer Grid-Lösung sein. Zum Beispiel, Arbeitsplätze können Prioritäten zu gewinnen, mehr als ein Job-Typ existieren können (dh mehrere Code-Basen), schließlich kann man sogar laufen verschiedene Arbeiter Maschinen, die für jede Art von Arbeit optimiert sind (auch wenn das bedeutet Abkehr von der "generic Arbeiter 'Idee). Versuchen Sie immer an die Zukunft denken bei der Entwicklung von Systemen kann eine kurzfristige Vision, langfristig Frust und erhöhte Entwicklungszeit führen.

Job Server

Wir werden irgendwo müssen wir unsere Job-Kontrolle aus, sollte dies das einzige System in Ihrem Netz, die eine feste Resource Locator hat sein werden, dass eine IP-Adresse, Hostname, URL (mit internen DNS), etc. Dies ist denn die Arbeiter müssen wissen, wo man nach Jobs zu suchen, müssen Arbeitnehmer vor der Job-Steuerung (nicht den Job-Steuerung finden die Arbeiter) zu finden.

Der Job Server selbst hat nicht wirklich eine komplizierte Aufgabe (in einem einfachen System sowieso), muss es eine Liste von Jobs zu speichern, hand out Arbeitsplätze erhalten Ergebnisse und anschließend speichern Sie diese für den späteren Abruf. Wie diese Teile (wie "Hand Job ') definiert werden kann, sehr einfach. Später können wir das System erweitern, um eine Administrationsoberfläche hinzufügen, bearbeiten, löschen, auszusetzen Arbeitsplätze, aber das ist jenseits dieser Übung sind.

Es gibt keinen Grund, dann, dass Ihr Job Server konnte nicht einer virtuellen Maschine läuft innerhalb Ihres Processing Server werden, sofern sie nicht drain zu viele Ressourcen von ihr. Der Job-Server jedoch braucht eine hohe Verfügbarkeit, wenn es untergeht an einem Freitag Abend wirst du ein ganzes Wochenende der Verarbeitung zu verlieren, möglicherweise kostet Sie ein paar Wochen im Wert von Bearbeitungszeit (wann Sie Ihre wichtigsten Processing Server im Vergleich zur alleinigen) . Vielleicht möchten Sie in Erwägung ziehen, Ihren Job Server auf einem Lastenausgleich für hohe Verfügbarkeit.

Basic Setup

Die Grundeinstellung für unsere Job-Server wird von dem, was ich rufe einen meiner LIMP Servern (also Li nux, m ySql, P HP) bestehen. Der Code läuft auf Thea Arbeiter tatsächlich herausfinden, was Arbeitsplätze kann es laufen 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 an anderen Kennzeichen 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 benötigt, sondern ist ein nice to have. Ich würde Tracking Arbeiter durch ihre IP-Adresse in Ihrem Netzwerk vorschlagen
  • started_at: Wann haben die Arbeiter beginnen den Job? Durch die Verfolgung Jobs, die nicht innerhalb von X Höhe der Zeit, dass wir wissen, wir müssen erfasst den Auftrag erneut und starten Sie die Verarbeitung durch einen anderen Arbeitnehmer abgeschlossen haben. Arbeitnehmer könnten weitere 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 komplexeren Szenarien Job wäre es möglich, festzulegen, wie viel Speicher der Arbeiter würde den Zugang zu (und daher nur geeignete Arbeitnehmer), oder auch welche Art von Arbeiter benötigt würden müssen.

Lets fügen Sie ein paar Beispiel-Jobs:

Beispiel-Jobs

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

  • id: ID des Datensatzes
  • Name: Person Name
  • Adresse: Person Adresse
  • jobs_id: Der Job-ID, die diese Platte verknüpft ist,

Die dritte und letzte Tabelle besteht aus einer Ergebnistabelle, hat es viel das gleiche Make-up, wie unsere Aufzeichnungen Tisch, und mit der Zugabe von einigen Spalten könnte ein Teil der Datensätze Tabelle:

  • job_record_id: Link das Ergebnis der Arbeit Tisch
  • 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 befand hingewiesen, aber das könnte genauso gut eine Datei, Parameter zur Simulation Code auszuführen, you name it.

Die Auswahl eines Auftrags

Wie bereits erwähnt, werden die Arbeiter unserer Job-Management für uns tun im Moment 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 die folgenden haben:

  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 Arbeiter 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 Fall eines Arbeitnehmers, abzustü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 die Job-Kontrolle-System gespeichert wäre eine weise Entscheidung.

Darüber hinaus, während dies zeigt, wie Arbeitsplätze ausgewählt werden können und aus einer SQL-Abfrage Rahmen wirklich sein sollte verwaltet werden abstrahiert 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 von Systemen wird es keinen Einfluss auf den obigen Code es.

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: Das 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 eines jeden langen Betriebspause gelöscht, 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: Das 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 Ihre 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 Arbeiten auf einer regelmäßigen Grundlage hat. Schließlich, in dieser Situation, wenn Ihr 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 der Realität wird es niemand ideale Konfiguration für Ihren Netz eingerichtet werden, hängt stark von der verfügbaren Ressourcen, Arten von Arbeit, Job-Turnaround zeitlichen Anforderungen, Netzwerkfähigkeit, und so weiter. Doch einige Richtlinien wäre:

  • Größe Arbeitsplätze, so dass jeder Arbeitnehmer über mindestens 3-4 Arbeitsplätze in einem Zeitraum von 15 Stunden (die längste wahrscheinlich idle Zeit) bekommen
  • Spielen Sie mit der Größe des Auftrags, so dass Rüstzeiten wird ziemlich unbedeutend im Vergleich zu der Bearbeitungszeit (unter Berücksichtigung der oben genannten Punkt).
  • Wenn ein Job nicht in die doppelte Menge an Zeit (vielleicht sogar weniger), die Sie erwarten, dass es komplett abgeschlossen ist anzunehmen, dass es weg ist AWOL und Verarbeitung mit einem anderen Arbeiter zu beginnen. Das heißt, Sie müssen möglicherweise warten, bis das Dreifache der normalen Länge von einem Job für ihn in Anspruch (möglicherweise mehr, wenn die nachfolgende Arbeit ausfällt). Vielleicht möchten Sie diese Zeit zu reduzieren, aber darauf achten, nicht zu viel, wie Sie vielleicht anfangen zu duplizieren Bearbeitungsaufgaben in regelmäßigen Abständen zu reduzieren.
  • Jobs sollten unabhängig von außerhalb Anforderungen so weit wie möglich. Der Job-Server, zum Beispiel sollte nur am Anfang und am Ende jedes Auftrags kontaktiert werden.
  • Nicht zu sättigen Ihr Netzwerk, das wird zwei negative Effekte haben, wird Ihr tagsüber Personal zu finden über das Netzwerk frustrierend und Probleme können mit Anschlüssen Zeitüberschreitung ein Problem, das nur bekommen schlimmer, wie Sie Ihren Rasterskala erlebt werden.
  • Stellen Sie sicher, Arbeitsplätze können auf Ihre Mitarbeiter laufen. Wenn Arbeitsplätze zu Erinnerung werden intensive oder Speicherplatz intensive Beschäftigung beginnen Abbruch und das einzige, was Sie bemerken, ist ein Tropfen an der Zahl der Arbeitsplätze ohne wirklichen Grund, warum verarbeitet.

Einreichen Ergebnisse einer Job

Bei der Einreichung der Ergebnisse der Arbeit ist es wichtig zu überprüfen, dass die Ergebnisse nicht durch einen anderen Arbeitnehmer eingereicht worden, vor allem, wenn die aktuelle Arbeitnehmer hat seit einiger Zeit inaktiv.

Wenn die Ergebnisse vorgelegt werden sicherstellen, dass die Anzahl der Ergebnisse die Anzahl der Datensätze entspricht im Job.

Wie bereits erwähnt, und kann nicht genug betont, bauen Fehlertoleranz in Wiederfinden und Ergebnisse Unterwerfung. Die Arbeiter können (und höchstwahrscheinlich wird) in den Suspend-Modus zu den ungünstigsten Zeiten und dies muss Rücksicht genommen werden. Auch wieder abstrahiert weg Ihre Ergebnisse Vorlage wird dazu beitragen, sorgen für zukünftige Änderungen an Ihrem Job Control System viel einfacher zu handhaben.

Zusammenfassung

In diesem Schnitt A haben wir, was für ein Job-Kontrolle-Server muss nicht sah und wie man ein sehr einfaches System einzurichten. Wir diskutierten, wie man einen Job von der Steuerung und wie man am besten, um Arbeitsplätze zu konfigurieren, dass die meisten unserer Ihres Büros Grid-System erhalten abzurufen. Zum Abschluss wurde ein oder zwei Absätzen auf Vorlage zurück an den Job-Kontrolle-Server vorgestellt.

  • Ein Job-Kontrolle-Server verwaltet Arbeitsplätze und sorgt dafür, dass alle Arbeiten abgeschlossen sind Einheiten
  • Durch Abstraktion Ihren Job auswählen / Ergebnisse Vorlage können wir die Technologie der Kontroll-Server ohne viel Probleme ändern
  • Konfigurieren Sie Ihre Jobs, um sicherzustellen, dass sie schnell und effizient sind, ohne zu viel Druck auf Ihre Netzwerk-Infrastruktur laufen, und ohne doppelte Bearbeitung Aufgaben auf einer regulären Basis.
  • Achten Sie darauf, Fehlertoleranz und Fehler checking in Ihre Routinen erstellen, können Arbeiter Suspend-und Resume und den ungünstigsten Zeiten. Denken Sie daran, zu überprüfen, ob die Ergebnisse bereits von einem anderen Arbeiter eingereicht.

Nächstes Mal

In Teil 3 werden wir schaffen unsere virtuelle Maschine und bauen unser Windows-Rechner in den Ruhezustand Kurzarbeiter werden.

Office-Grid Computing mit virtuellen Umgebungen - Teil 5

Durch , Freitag 4. Dezember 2009 11.03 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen 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 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 möglichen Vorteile des Einsatzes ein Büro aussehen Gitter mit virtualisierten Umgebungen.

In Teil 4 schauten wir auf die Verwendung von Tools, um sicherzustellen, dass wir die neueste Version des Codes und Datenquellen, so dass erzielten Ergebnisse sind immer up-to-date mit den neuesten Geschäftsinformationen und Logik.

Pre-Deployment

Vor der Bereitstellung Ihrer Grid-System, wenn es eine Sache Sie tun und eine Sache allein ist es Ihre jetzigen System! Egal was Sie Kollegen darüber, wie viel zusätzliche Arbeit auf Ihrem System tun zu erzählen, wenn Sie Zahlen, um dies zu Ihrem garantiert zurück haben, sind nichts. So,

  • wie viele Datensätze können Sie derzeit Prozess? Pro Tag? Pro Stunde?
  • Wie lange dauert es typischerweise, sich umzudrehen einen Job?
  • Wie viel Kapazität haben Sie?

Es gibt auch weitere Fragen:

  • Wenn Ihr Processing Server (oder einer Ihrer Verarbeitung Server) ausfällt, wie wird diese Ihre Fähigkeiten beeinflussen, werden Sie gelähmt werden?
  • Welche Vorteile erhoffen Sie / erwarten, dass aus einem Grid-System zu bekommen?
  • Sind Ihre Büromaschinen lauffähig die Arbeitsplätze?
  • Sind Ihre (oder können Sie Aufträge umgewandelt werden), um in diesem Laufstil zu arbeiten?

Der letzte große Punkt ist, um Ihre Zeit auf jeder bedeutenden Änderung wie diese zu nehmen. Aktualisieren Sie Ihre Verarbeitung Code funktioniert mit der neuen Methodik Benchmark wieder. Möglicherweise richten Sie Ihre Processing Server mit einer virtuellen Maschine ausgeführt wird, nachdem alle Ihre Processing Server wird nur ein weiterer Arbeiter zu sein (nur ein sehr mächtiger relativ). Lassen Sie den neuen Prozess zu begleichen.

Einsatz

Mein Vorschlag wäre, in das Büro ein Wochenende pop führen alle Installationen und Setup. Tun Sie dies kurz vor einem zweiwöchigen Urlaub und lassen so andere arme Kerl mit den Folgen ... vielleicht nicht viel ...

Bereitstellung für ein System wie dieses muss langsam sein. Obwohl es relativ einfach einzurichten diesem System wird auf Ihre gesamte Büro-Infrastruktur (auch die digitalen eins). Erstens, Roll-Out auf ein paar Maschinen in einer Zeit, Netzwerkverkehr überwachen, wie die Arbeiter Gastgeber an einem Tag zu Tag Grundlage durchzuführen. Möglicherweise müssen Sie Ihre Job-Konfiguration als Antwort auf Ihre Erkenntnisse zu ändern.

Sobald das System mit ein paar Maschinen (sagen wir 10% aller Büromaschinen, dh 5) halten die Überwachung des Netzwerkverkehrs und Host-Maschine performance. Next Benchmark wieder angesiedelt hat, sollten Sie jetzt Verarbeitung 33% mehr Arbeitsplätze als die erste Benchmarks. Überprüfen Sie dies so ist, oder dass Sie zumindest in diesem Stadion. Falls nicht, untersuchen, was los ist, bevor Sie fortfahren. Wiederholen Sie diesen Zyklus, bis Sie gerne alle Büromaschinen laufen haben, ohne zu töten individuelle Leistung der Maschine oder Schleifen Ihrem Netzwerk zum Erliegen.

Zu allen Zeiten zu halten Benchmarking, auch nach alle Einsätze gemacht sind. Prüfen Sie, wie neue Code-Updates Geschwindigkeit beeinflussen Ihres Systems, überprüfen Sie alle Arbeiter sind in der Berichterstattung und Verarbeitung von Aufträgen. Langsam (sehr langsam) erhöhen Sie Ihre Job-Konfiguration, um das Beste aus Ihren Mitarbeitern und Netzwerk zu erhalten.

Stop!

Was, wenn Sie Ihre Mitarbeiter vom Laufen zu einem bestimmten Zeitpunkt beenden wollen? Sie sind alle da draußen läuft, regenerierend, und versuchen ihr Bestes, um Daten wie hungrige Insekten Prozess. Die Antwort mag offensichtlich erscheinen, aber es lohnt Zugabe nur für den Fall seiner übersehen. Bearbeiten Sie einfach Ihre Verarbeitung Skript mit einem exit (0) or die () oder eine andere Aussage zu Ihrem Verarbeitung Job zu töten. Ein wichtiger Grund, warum wir immer versuchen, um die neuesten Verarbeitung Skript vor jedem Starten von update!

Demonstration System

Um diesen Satz von kurzen Artikel zu schreiben habe ich eine sehr kleine Raster, um die Technologien und Methoden zu demonstrieren. Ich lese viele Artikel, Tutorials und verwendet verschiedene Tools zu installieren und zu überwachen, was los war. Keineswegs habe ich ausgegangen und gesättigten eine ganze Büro mit Verkehrs-und noch habe ich Zugang zu einem regelmäßigen Mitarbeiter-PC zu sehen, wie Host-Performance beeinträchtigt wurde.

Mein Demo-System war sehr bescheiden in der Tat. Ich habe meinen normalen Desktop als eine Job-Control-Server eingerichtet. Auf dieser hatte ich installiert mySQL -Server up installiert als Meister in die Replikation eingerichtet, PHP , Â und SVN durch verknüpfte apache (für den Zugriff via worker VM).

Ich habe dann eine CentOS Arbeiter Maschine VirtualBox auf einem 6 Jahre alten Windows XP-Laptop. Ich setup geplanten Aufgaben wie nach dem Kopieren der VM auf die Maschine angegeben und lasst sie gehen.

Die virtuelle Maschine wurde mit PHP, Subversion und mySQL gesetzt. I checked out eine Niederlassung namens "Arbeitnehmer" von meinem Job Control-Server-Repository und sorgte dafür, dass es aktualisiert konnten mit 'svn update' werden. Next I Setup mySQL als Slave und überprüft, dass die Daten aus mySQL Replikation auf der Job-Steuerung Server herunter, um den Arbeiter VM. Nach all diesen richte ich die Bash-Skript und das Cron-Job.

Mein Verarbeitung Skript im Grunde ging entlang der Linien dieser (sehr einfache Sachen):

  • Lesen Sie in das Feld Name
  • Zählten die Anzahl der ähnlichen Namen in eine Tabelle aus der Datenquelle auf dem VM statt
  • Zählte die Anzahl der Namen wie oben, jedoch Aufspaltung der Name durch Leerzeichen (dh Vorname, Mitte, Nachname)
  • Wiederholte dieses Prozesses 1.000 Mal

Jeder Job dauerte etwa 20 Minuten zu laufen. An einer Stelle öffnete ich mehrere Exemplare des Arbeitnehmers VM auf dem Windows-Laptop und beobachtete die Arbeitsplätze weg von jedem der Arbeiter IP-Adressen überprüft werden. An dieser Stelle habe ich auch bestätigt, dass die Replikation automatisch neu gestartet.

Verlassen der Laptop in ein Arbeiter ab, um Jobs aus der Job-Steuerung Server-Prozess führte im Leerlauf. Bei der Wiederaufnahme Laptop Nutzung gab es eine Verzögerung von etwa 30-60 Sekunden, das ist eine ganze Menge Zeit und Personal müssten darauf aufmerksam gemacht, dass ihre Maschine darf Pause für eine kurze Zeit bei der Rückkehr in die Maschine. Neuere Maschinen können nicht eine Pause von dieser langen. Der Vorteil der Höhe der Verarbeitung durch diese Maschinen in Leerlaufzeiten durchgeführt würden mehr als aufwiegen Mitarbeiter mit auf einen kurzen Zeitraum (etwa 1 Minute) bei der Ankunft in ihre Maschinen von einem Morgen zu warten (ich häufig länger warten, dass diese für einen Windows-Defender Update stattfinden soll), sofern sie gemacht wurden bewusst (nützlich Zeit, um einen Kaffee holen!).

Insgesamt bin ich zuversichtlich, dass ich die Technologien, die zur Schaffung eines solchen Systems könnte demonstriert. Ich habe gezeigt, dass ein solches System die Arbeit an einem (sehr) kleinen Maßstab und mit etwas mehr experimentieren kann skaliert werden die Ressourcen eines Büro-Maschinen hat. Wenn ich nicht bis zu dem Punkt, dies zu tun zu tun bekommen wäre ich sehr daran interessiert zu wissen / sehen, wenn es jemand anderes tut.

Schlussfolgerungen / Evaluation

Der nächste offensichtliche Schritt wäre tatsächlich ein Beispiel aus der Praxis und beginnen, ein System wie dieses in einer Büroumgebung einsetzen und sehen was passiert. Fragt ein Geschäft, dies ohne eine bahnbrechende Unternehmen verpflichten, die Technologie und Effizienz unter Beweis stellen kann ein wenig schwierig. Grid / Distributed Computing ist sehr beliebt ist, einige Kreise und hat einige große Anwendungen (BIONC, SETI @ Home, Folding @ Home, etc). Ich wusste nicht, jedoch finden in kleinerem Maßstab und einfaches System wie dieses in meinem Suchen, die innerhalb einer Büroumgebung gerollt werden konnte.

Ich habe einen grundsätzlich freien Systems, die meist Open-Source-Software und Tools in fast jedem Büro. Die Technologien wurden im Wesentlichen bewiesen und zeigen Leistungsbereitschaft und wie erwartet funktioniert. Hoffentlich habe ich zeigen, dass mit nicht viel Arbeit und mit einer sehr einfachen Konfiguration können Sie ein Büro Grid-Computing-System, das leistungsstark, preiswert, Â und skalierbare alle zur gleichen Zeit einzusetzen.

Sobald ein System zum Laufen gibt es fast kein Ende, die Menge an Anpassung und Verbesserungen, die Sie vornehmen können. Zum Beispiel Statistiken / Benchmarking können leicht hinzugefügt, welche den Wert eines solchen Systems jeden Tag. Neue Maschinen können schnell und einfach wie hinzugefügt werden und wenn sie mit Upgrades für vorhandene Hardware Stärkung Ihrer Rechenleistung zu gelangen.

Ich hoffe, Sie haben Freude beim Lesen dieser Serie von Artikeln und die euch zum Nachdenken über ein Büro Grid-System. Die hier vorgestellte Lösung wird nicht unbedingt in allen Situationen sollte aber anpassungsfähig sein, damit Sie um Ihre Datenverarbeitung erfolgt über eine eigene Lösung.

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.

Zend Framework: Grundlagen - Review

Durch , Samstag 28. November 2009 22.42 Uhr

Mein Arbeitgeber vor kurzem für eine Gruppe von uns Entwicklern bezahlt, die zu Zend Framework: Grundlagen natürlich hier werde ich meine Gedanken und Meinungen über den Verlauf für andere zusammenzufassen. Für diejenigen, um Zeit zu sparen, hier ist meine Zusammenfassung:

Für Entwickler, die nicht Zeit gehabt haben, ein Blick auf die Zend Framework diesem Kurs (Zend Framework: Grundlagen) bietet einen guten Überblick über den Rahmen stellen Ihnen die wichtigsten Bereiche und geben genügend Informationen, um fortzufahren. Für diejenigen, die Zeit damit verbracht haben Blick auf den Rahmen und haben anschließend ein oder zwei Tutorials dieser Kurs nicht viel darüber hinaus.

Hintergrund

Ich bin ein PHP -Entwickler für etwa 5-6 Jahren, und haben begonnen, die Arbeit mit dem Zend Framework auf einem Komponenten-Basis in den letzten 6 Monaten. Ich habe entwickelt und / oder wurde ein Entwickler auf ein paar kleine Zend Framework MVC sites. ich ehrlich sein werde, habe ich nicht eine riesige Menge der Exposition gegenüber anderen Frameworks aus einer Kodierung Sicht, sondern habe mehrere Stunde der Erforschung der Projekt-Websites und Auswertung them. Der Rahmen und die Gemeinde umgebenden Zend Framework ist es ganz spannend und es scheint riesige Möglichkeiten in denen sein Gehen werden.

Über den Kurs

Der Kurs ist über 9 2 Stunden WebEx-Sitzungen geliefert (mit einer 10-minütigen Pause in der Mitte). Die Zeit wird verbracht werde durch eine Reihe von Dias von Zend mit Diskussion vorgesehen ist jederzeit möglich. Sie können ein Mikrofon an den Lehrer zu sprechen, aber um ehrlich zu sein ich habe niemanden gesehen Nutzung nichts mehr als das Chat-Fenster. Zusätzlich wird eine VMWare Ubuntu-Rechner vorgesehen, die Beispiel-Code und Projekte einen eine Testversion von Zend Studio. Die Kursleiterin spricht mit den Teilnehmern entweder über eine integrierte VoIP-Lösung, oder Sie können sich mit einem der vielen weltweiten Einwahlnummern wählen.

Im Laufe des Materials besteht aus einem kurzen Überblick über die Rahmenbedingungen und das MVC-Muster, bevor in eine Probe Gästebuch-Anwendung. Die Diskussion zeigte Bootstrapping Zend_Application, Db-Tabellen, Datenbank-Zugriff, Formulare, Filterung, ACL,, Validierung etc, etc. Im Grunde für alle Themen, die Sie benötigen, um eine grundlegende Website einen die ganze Zeit laufen zu bekommen gibt Ihnen die Werkzeuge, um würden gehen und weiter fortgeschritten, die im Rahmen (auch wenn dieser Betrag sich zu "Siehe die Website 'die meiste Zeit).

Die Zeit ist da, um Code auf einige Beispiele, und die 'Gästebuch' und einfach "Wiki"-Anwendung zu entwickeln. Persönlich fühlte ich, dass das Zurverfügungstellen oder jede App und dann fragen Sie uns zu entwickeln, was im Wesentlichen eine Kopie der Seite nicht wirklich eine gute Lernerfahrung. Ich hätte es vorgezogen, eine Anwendung ähnlich zu entwickeln, aber nicht identisch. auf das Beispiel-Anwendung mit dem Vorteil, dass eine Führung zu verweisen. Alternativ Bau der Anwendungen von Grund auf mit dem Demonstrator würde möglicherweise mehr Fragen, warum und wie geführt, wodurch sich ein besseres Verständnis für die Rahmenbedingungen, nach all you can nachschlagen Besonderheiten nach dem Kurs.

Der letzte Vortrag bestand aus Arbeiten an der Wiki-Anwendung mit Hilfe / Anleitung durch die Ausbilder. Nach dem Kurs Feedback aufgenommen wurde, war es mehrfach betont durch den Kurs, dass Zend übernimmt Feedback sehr ernst, in der Tat offensichtlich unsere Version des Kurses war ziemlich neu. Einige der anderen Entwickler in den Unternehmen werden den Kurs bald so wird es interessant sein zu sehen, ob dies geschehen ist.

Der Kurs Stil war informell, dürfen für Rückfragen und die Zusammenarbeit zwischen den Teilnehmern und dem Lehrer. Die Kursleiterin war freundlich, zugänglich (E-Mail-Adressen wurden für Fragen gemeinsam), und während seines Vortrags aus dem Schlitten war ein bisschen wackelig schien voll geschäftsfähig im Rahmen. Er war eindeutig jemand, der den Rahmen in regelmäßigen Abständen statt jemanden, der lehrte, den Kurs zu unterrichten wird, mochte ich die 'realen Welt' Erfahrungen in dieser Hinsicht.

Insgesamt fühlen

In gewisser Weise fand ich das natürlich eine Verschwendung von Zeit, in anderen war es sehr praktisch. Hoffentlich werde ich meine Gründe ganz klar zu bekommen, und vielleicht bieten einige Denkanstöße oder nützliches Feedback (knowing me dies unwahrscheinlich ist!).

Für mich war dieser Kurs bei zu niedriger Ebene. Mit der bei der Schnellstart-Anleitung, lesen Rob Allen ist Zend Framework in Action, und arbeitete mit dem Rahmenwerk ich nicht wirklich bekommen etwas zu viel. Ich würde gern den Kurs zu holen aus dem Ende des Quickstart und zusätzliche Fähigkeiten.

Das heißt, wird der Titel des Kurses deutlich state "Zend Framework: Grundlagen" und in dieser Aspekt im Laufe erreicht, was es darlegt zu tun. Weitere Mitglieder des Entwicklungsteams, die nicht die Zeit verbracht haben, suchen in den Rahmen fertig jeder Sitzung mit Begeisterung und Fragen, was wirklich schön war zu sehen.

Alles war nicht verloren, es war gut, Zeit zu verbringen bestätigen die grundlegenden Details des Frameworks und lernen Sie ein paar Fragen in Bereichen, in denen ich war nicht 100% zu stellen. Es wurde auch Zeit, dass ich mich setzen jeden Tag und denke über Codierung mit Rahmen und zukünftige Projekte, etwas, das ich nicht der Lage gewesen wäre, es anders zu machen (können Sie sich vorstellen Ihr Unternehmen vereinbaren, dass?:) Bekam). Last but not least erhalten Sie auch ein schönes Zertifikat von Zend zu sagen, dass Sie den Kurs (wenn auch per E-Mail) besucht.

Zend Framework Zertifizierung

Dies war eine Frage, die in den Sinn kommt im Laufe gehalten, wäre es bereite mir für die Zertifizierung? Die schnelle, einfache ist ein klares Nein. Der Kursleiter war ganz klar auf, dass mit dem zusätzlichen Hinweis, dass für die Zertifizierung sollten Sie wirklich mit dem Rahmen an einem Tag zu Tag und fühle mich sehr wohl und zuversichtlich in seine Nutzung und Methoden.

Zusammenfassung

Da alles, was ich oben geschrieben habe, werde ich alles in zwei einfachen Stichpunkten zusammenfassen:

  • Neu auf Zend Framework: Dieser Kurs ist genau das, was man erwarten würde, gibt es Ihnen eine gute Einführung in die Rahmenbedingungen und eine gute Erdung über die Grundlagen, aus denen Sie aufbauen können. Der Kurs scheint Interesse und Begeisterung für den Rahmen unter Entwicklern zu generieren.
  • Gebrauchte dem Zend Framework: Während es schön war zu stützen einige der wichtigsten Grundlagen spürte ich die Zeit, Mühe und Geld, um den Kurs könnte besser gewesen verbrachte anderswo. Es wird schön sein, SEEA Zend erstellen Sie einen neuen weiterführenden Kurs für Entwickler, um die nächste Stufe -. Zumindest das Niveau der Zertifizierung und darüber hinaus Dafür würde ich unterschreiben sofort.












Panorama Theme by Themocracy

6 Besucher jetzt online
6 Gäste, 0 Bots, 0 Mitglieder
Max Besucher heute: 12 um 02:46 UTC
Diesen Monat: 14 bei 2011.01.11 18.36 UTC
Dieses Jahr: 130 am 28-03-2011 10.40 UTC
Insgesamt: 130 am 28-03-2011 22.40 UTC