Kategorie: Artikel

Office-Grid Computing mit virtuellen Umgebungen - Teil 1

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung von Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die 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 passen.

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

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

Warum Bereitstellen einer Office Computing Grid?

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

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

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

Vorteile von Office Computing Grid

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

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

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

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

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

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

Technologies

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

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

Typische Jobs

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

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

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

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

Was werden wir erreichen?

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

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

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

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

Nächstes Mal

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

Office-Grid Computing mit virtuellen Umgebungen - Teil 2

Mit , Freitag 4. Dezember 2009 23.23 Uhr

Einführung

Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung von Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die 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 benutzen werden, sowie einige der möglichen Gründe, warum Sie 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. Ihr Job-Steuerung (auf der 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:

  • 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 Jobs ausgeführt 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 bestehen können (dh mehrere Code-Basen), schließlich kann man sogar laufen verschiedene Arbeiter Maschinen, die für jede Art von Arbeit optimiert werden (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öht die Entwicklungszeit führen.

Job Server

Wir werden irgendwo müssen 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, weil die Arbeiter müssen wissen, wo nach Jobs 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 ein Basis-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 ihm. Der Job-Server jedoch braucht eine hohe Verfügbarkeit, wenn es runter geht an einem Freitag Abend wirst du ein ganzes Wochenende der Verarbeitung zu verlieren, möglicherweise kostet Sie ein paar Wochen im Wert von Verarbeitungszeit (wann Sie Ihre wichtigsten Processing Server im Vergleich zur alleinigen) . Vielleicht möchten Sie in Erwägung ziehen, Ihren Job Server auf einem load balanced Umfeld für hohe Verfügbarkeit.

Basic Setup

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

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

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

Diese Tabelle besteht aus 5 einfachen Feldern,

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

Es ist leicht, wie diese Tabelle mit ein paar zusätzliche Felder ausgedehnt werden könnte, um für die Statistik-Tracking, ein Endzeit-Spalte, um zu sehen, wie lange der Job annahm, einen Zähler, um zu sehen, um zu neigen, wie viele Arbeiter nahm den Job (natürlich muss dies erlauben 1), Job-Priorität, kann die Liste weiter und weiter gehen. In komplexeren Szenarien Job wäre es möglich, festzulegen, wie viel Speicher die Arbeiter würden den Zugang zu (und damit nur geeignete Arbeitnehmer), oder auch, welche Art von Arbeiter benötigt würden müssen.

Lets fügen Sie ein paar Beispiel-Jobs:

Beispiel Arbeitsplätze

Die nächste Tabelle ist wieder ganz einfach zu verstehen, das sind unsere Job Datensätze. Sie sind die wichtigsten Aufträge Tabelle eine Spalte `jobs_id` verknüpft. Das Make-up dieser Tabelle hängt sehr stark von den Daten, die Sie benötigen, um Ihre Mitarbeiter liefern, können Sie ein sehr einfaches Beispiel, wo wir vier Säulen:

  • id: ID des Datensatzes
  • Name: Person Name
  • Adresse: Person Adresse
  • jobs_id: Die Job-ID, dass dieser Datensatz 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 um den Job Tisch
  • Ergebnis: Das Ergebnis Daten

... Und das ist alles, was Sie für Job-Kontrolle! (Wenn auch auf einer sehr grundlegenden Ebene) In meinem Fall bin ich zu einem 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.

Auswählen eines Jobs

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

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

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

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

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

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

Job-Konfiguration

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

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

In der Realität wird es niemand ideale Konfiguration für Ihr Netz eingerichtet werden, hängt stark von der verfügbaren Ressourcen, Arten von Arbeit, Job Bearbeitungszeit 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 dem Job-Größe, so dass Rüstzeiten wird ziemlich unbedeutend im Vergleich zu der Verarbeitungszeit (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 können warten, bis das Dreifache der normalen Länge der einen Job für ihn in Anspruch (möglicherweise mehr, wenn die nachfolgende Auftrag fehlschlägt). 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, werden Sie tagsüber Personal zu finden über das Netzwerk frustrierend und Probleme 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 führen. Wenn Arbeitsplätze zu Erinnerung werden intensive oder Speicherplatz intensive Beschäftigung startet Abbruch und das einzige, was werden Sie feststellen, ist ein Tropfen an der Zahl der Arbeitsplätze mit keinen 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 wahrscheinlich wird) in den Suspend-Modus zu den ungünstigsten Zeiten und dies muss Rücksicht genommen werden. Auch noch einmal 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 eine Job-Control-Server muss nicht sah und wie man ein sehr einfaches System einzurichten. Wir diskutierten, wie man einen Auftrag aus 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ätze zur Einreichung Ergebnisse zurück an die 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 Ihren Job, um sicherzustellen, dass sie schnell und effizient sind, ohne zu viel Druck auf Ihrem Netzwerk-Infrastruktur zu betreiben, und ohne doppelte Verarbeitung Aufgaben auf einer regulären Basis.
  • Achten Sie darauf, Fehlertoleranz und Fehler checking in Ihre Routinen zu bauen, können die 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

Mit , 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 der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, um jeden zu sitzen und jeden Tag nichts zu tun für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen benutzen konnte, um die Rechenleistung der Systeme zu stärken? In dieser Reihe von Artikeln werde ich auf die möglichen Vorteile des Einsatzes ein Büro aussehen Gitter mit virtualisierten Umgebungen.

In Teil 4 sahen wir uns im Umgang mit Werkzeugen, um sicherzustellen, dass wir mit der neuesten 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 gibt Sie und eine Sache allein es ist Benchmark Ihr aktuelles System! Egal was Sie Kollegen darüber, wie viel zusätzliche Arbeit auf Ihrem System tun zu sagen, 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 mehr 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 sich / erwarten, von 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 es, Ihre Zeit auf größere Veränderungen wie diese zu nehmen. Aktualisieren Sie Ihre Verarbeitung Code funktioniert mit der neuen Methodik Benchmark erneut. Möglicherweise richten Sie Ihre Processing Server zu einer virtuellen Maschine laufen, nach all Ihren 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, Überwachung des Netzwerkverkehrs, wie die Arbeiter Gastgeber an einem Tag zu Tag Grundlage durchzuführen. Möglicherweise müssen Sie Ihre Job-Konfiguration in Reaktion auf Ihre Ergebnisse verä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 abgesetzt hat, sollten Sie jetzt Verarbeitung 33% mehr Arbeitsplätze als die erste Benchmarks. Prü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 glücklich 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. Ändern Sie einfach Ihre Verarbeitung Skript mit einem exit (0) or die () oder eine andere Anweisung zur Verarbeitung Job zu töten. Ein wichtiger Grund, warum wir immer versuchen, um die neuesten Verarbeitung Skript vor jedem Lauf zu aktualisieren!

Demonstration System

Um diese Reihe 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 Werkzeuge zur Konfiguration und Überwachung, was los war. Keineswegs habe ich ausgegangen und gesättigten ein ganzes Büro mit Verkehrs-und noch habe ich Zugang zu einem regelmäßigen Mitarbeiter-PC zu sehen, wie Host-Performance beeinträchtigt wurde.

Meine 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 an der Maschine angegeben und lasst sie gehen.

Die virtuelle Maschine wurde mit PHP, Subversion und mySQL gesetzt. Ich checkte ein Zweig mit dem Namen "Arbeiter" von meinem Job Control-Server-Repository und sorgte dafür, dass es aktualisiert konnte mit 'svn update' werden. Weiter habe ich sie 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 der Cron-Job.

Mein Verarbeitung script 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, aber 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 diesem Punkt 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 diesem lang. 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 ihren Maschinen ein Morgen warten (ich häufig länger warten, dass diese für eine Windows-Defender Update stattfinden soll), sofern sie gemacht wurden bewusst (nützlicher Zeit zu einem Kaffee am Morgen packen!).

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 können skaliert werden die Ressourcen eines Büro-Maschinen hat. Wenn ich nicht bis zu dem Punkt, dies zu tun zu tun bekommen würde ich mich sehr daran interessiert zu wissen / sehen, wenn es jemand anderes tut.

Schlussfolgerungen / Evaluation

Die 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 sich, die Technologie und Effizienz unter Beweis stellen kann ein wenig schwierig. Grid / Distributed Computing ist sehr beliebt ist manchen Kreisen und hat einige große Anwendungen (BIONC, SETI @ Home, Folding @ Home, etc). Ich wusste nicht, finden aber in kleinerem Maßstab und einfaches System wie dieses in meinem Suchen, die innerhalb einer Büroumgebung gerollt werden konnte.

Ich habe eine grundsätzlich frei-System mit allem Open-Source-Software und Tools in fast jedem Büro. Die Technologien waren im Grunde bewiesen und zeigen Leistungsbereitschaft und wie erwartet funktioniert. Hoffentlich habe ich zeigen, dass mit nicht viel Arbeit und mit einer sehr einfachen Setup können Sie ein Büro Grid-Computing-System, die leistungsfähig, preiswert, Â und skalierbare alle zur gleichen Zeit einsetzen.

Sobald ein System zum Laufen gibt es fast kein Ende, die Menge an Anpassung und Verbesserungen, die Sie machen können. Zum Beispiel Statistik / 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 erreichen.

Ich hoffe, Sie haben Freude beim Lesen dieser Serie von Artikeln und deren euch Denkanstöße für ein Büro Grid-System. Die hier vorgestellte Lösung wird nicht unbedingt in allen Situationen, sollte aber anpassungsfähig sein, damit Sie sich 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 aktualisiert, um Spiel zu halten.

Zend Framework: Grundlagen - Review

Mit , Samstag 28. November 2009 22.42 Uhr

Mein Arbeitgeber vor kurzem für eine Gruppe von uns Entwickler bezahlt, die zu Zend Framework: Grundlagen natürlich hier werde ich meine Gedanken und Meinungen über den Verlauf für andere zusammenfassen. 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 die Rahmenbedingungen 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 Jahre, und haben begonnen, die Arbeit mit dem Zend Framework auf einem Bauteil Basis in den letzten 6 Monaten. Ich habe entwickelt und / oder bereits 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 sehr aufregend, und es scheint, riesige Möglichkeiten in denen seine gehen werden.

Über den Kurs

Der Kurs ist über 9 2 Stunden WebEx-Sitzungen geliefert (mit einem 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. Der Kursleiter 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 das Rahmenprogramm und das MVC-Muster, bevor in eine Probe Gästebuch-Anwendung. Die Diskussion zeigte Bootstrapping Zend_Application, DB-Tabellen, Datenbank-Zugriff, Formulare, Filtering, ACL,, Validierung etc, etc. Grundsätzlich 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 war zu "Siehe die Website 'viel von der Zeit).

Die Zeit ist da, um Code auf ein paar Beispiele, und die "Gästebuch" und einfach "Wiki"-Anwendung zu entwickeln. Persönlich fühlte ich, dass die Bereitstellung des Codes oder jedes 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 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 genommen wurde, war es mehrfach betont durch den Kurs, dass Zend nimmt Feedback sehr ernst, in der Tat offensichtlich unsere Version des Kurses war ganz neu. Einige der anderen Entwickler in den Unternehmen wird den Kurs bald so wird es interessant sein zu sehen, ob dies geschehen ist.

Der Kurs Stil war informell, darf für Rückfragen und Zusammenarbeit zwischen Teilnehmern und dem Lehrer. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. Er war eindeutig jemand, der die Rahmenbedingungen regelmäßig eher als jemand, der lehrte, den Kurs zu unterrichten wird, mochte ich die 'realen Welt' Erfahrung 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!).

For myself this course was aimed at too low a level. Nachdem sich durch den Schnellstart-Anleitungen, lesen Sie Rob Allen ist Zend Framework in Action, und arbeitete mit dem Framework ein wenig ich nicht wirklich bekommen etwas zu viel. Ich würde gerne den Kurs zu holen aus dem Ende des Schnellstart und zusätzliche Fähigkeiten.

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

Alles war nicht verloren, es war gut, Zeit zu verbringen Bestätigung der 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 den Sinn kämen, während der Kurs gehalten, wäre es bereite mir für die Zertifizierung? Die schnelle, einfache ist ein klares Nein. The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Zusammenfassung

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • 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 das Rahmenprogramm unter Entwicklern zu generieren.
  • Gebrauchte dem Zend Framework: Während es schön war, Ufer, 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 ein neues höheres Niveau natürlich die Entwickler auf die nächste Stufe zu nehmen -. Zumindest den Standard der Zertifizierung und darüber hinaus Dafür würde ich unterschreiben sofort.

Html Tabelle generieren Class (HtmlTable.php)

Mit , Dienstag 5. Mai 2009 21.11 Uhr

I required to generate a HTML table from PHP data for a project that I was working on. Unfortunately after a bit of Googling I couldn't really find anything that was suitable so I decided to create my own.

I realise that this may not be the best table generating class ever and there's probably a few bugs still in it, but I'd prefer to share and if anyone wants a better version I'll look into it :) I originally wanted to create a table built up of seperate objects eg cell object, row object (built up of cell objects), but I realised the overhead on this would be HUGE! So I've gone back to an array setup.

The class will calculate the maximum number of columns used in the header, footer, or body and write out that number of columns. Headers, Footers, and the Caption are optional. Attributes are made up of an array where the key is the attribute name and the value is the attribute value. Attributes are applied to table tag (on table creation – class initialisation), table rows (array[row][attribute]), and table cells (array[row][column][attribute]) this applies for headers, footers, and the table body.

Beispiel

I always find the best way to look at something is to use an example so here we go:

$table = new HtmlTable( array('class' =>'sortable',
                'style' => 'width: 550px;'));
$header[0][0]['content'] = 'ID';
$header[0][1]['content'] = 'Title';
$header[0][2]['content'] = 'Date';
$header[0][3]['content'] = 'Site';

$table->addHeader($header);
 $ I = 0;
foreach ($newsList AS $newsItem) {
$itemLink = "{$newsItem['title']}";
$tableBody[$i] = array(0 => array('content' => $newsItem['id'],
'attributes' => array('style' => 'font-weight: bold;')),
1 => array('content' => $itemLink),
2 => array('content' => $newsItem['date_posted']),
3 => array('content' => $newsItem['site']) );
 $ I + +;
 }
$table->addBody($tableBody);
echo $table->drawTable();
Identifikation Titel Datum Standort
9 News 1 2009-04-04 10:40:00 Site-Namen
10 News 2 2009-04-04 12:44:11 Site-Namen

And the HTML looks like this:

 < table  class =  "sortable" style =  "width: 550px;" >
< thead >
	< tr    >
		< th   >ID</ th > 
 < th   >Title</ th >
		< th   >Date</ th >
		< th   >Site</ th >
</ tr >
</ thead >
< tbody >
	< tr    >
		< td  style =  "font-weight: bold;" >9</ td > 
		 <Td    > News 1 </ td> <td    > 2009.04.04 10.40.00 </ td> <td    > < tr > Site-Namen </ td> </ tr> <tr    = "font-weight: bold;" >10</ td > < td > <Td style = "font-weight: bold;"> 10 </ td> <td    > News 2 </ td> 
  <Td    > 2009.04.04 00.40.00 </ td>
		 <Td    > Site-Namen </ td>
 </ Tr> 
  </ Tbody>
 </ Table> 

Code

HtmlTable.php
Wenn Sie irgendwelche Kommentare bitte machen sie unten, wäre es toll, einige hören. Wenn Sie am Ende mit es auch lassen Sie mich wissen und ich werde es in Zukunft zu erweitern:)

Melden Sie sich an die DB mit dem Zend Framework

Mit , Dienstag 14. April 2009 21.06 Uhr

Ich habe es geschafft, eine Website zum Laufen zu bringen mit dem Zend Framework , alles ist schön Protokollierung FireBug / FirePHP so nächste Schritt, um die DB-Protokoll wurde. Ich wollte auch einige zusätzliche Informationen über die Rahmenbedingungen wie User-Agent, Datum und Uhrzeit, GET und POST-Variablen log. So erweitern das Handbuch ein wenig hier, was ich getan habe:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

$ ColumnMapping = array ('priority' => 'Priorität',
'message' => 'message',
'datetime' => 'timestamp',
'user_agent'=> 'user_agent',
'get_vars' => 'get_vars',
'post_vars' => 'post_vars',
'site' => 'site'
);

$writerDb = new Zend_Log_Writer_Db($db, 'error_logging', $columnMapping);
$logger = new Zend_Log($writerDb);

$logger->setEventItem('datetime',date('Ymd H:i:s'));
$logger->setEventItem('user_agent',$_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars',print_r($_GET,true));
$logger->setEventItem('post_vars',print_r($_POST,true));
$logger->setEventItem('site',SITE);

$logger->info('Informational message');

Where the array keys in $columnMapping are my column names. 'Priority' and 'message' are understood by Zend_Log_Writers but the additional fields were added to give me some additional information.

Obviously this assumes that you have logging working using one of the other writers first :)

UK Names Directory and Facebook Application

By , Friday 10th April 2009 9:33 am

One of the fun things I've been involved in whilst working for Tracesmart is the names directory . Basically we took our huge information database and pulled out a big pile of stats about various names.

The process is all one big SEO effort in order to draw more traffic to the site, but it also provides some interesting information and name statistics.

Here's an example for my name Lloyd Watkin , or I suppose more correctly Steven Watkin . Take a minute to look up your name on the Tracesmart site, might be interesting ;)

We've also got names statistics data on the names directory page which tells you what names have been searched and how recently. Its quite interesting to see famous people's names fly up the stats when they appear in the news. A recent example is that of Liam Neeson who's wife died from a skiing accident recently, although obviously people aren't quite right on the spelling (hence the huge numbers of hits on this name) — Liam Nilson .

Facebook Applikation

Once the names directory was created we set about creating a facebook application which we duely named ' My Name '. The facebook application is an extension of the names directory and provides some additional statistics. In order to add the names directory to your facebook account please visit:

http://apps.facebook.com/my-name/

Disabled Form Fields are not submitted…

By , Thursday 4th September 2008 11:01 am

As a quick note, as part of the ongoing estate agency software project I've gone back to editing date entry within the system. Now instead of allowing users to enter any old bit of text I've switched over to a Javascript date/time picker (for the short term) that allows user to 'pick' and date and time from a pop up window.

Now, for my old system the picker would pop up when the user clicked on the input field . This however would allow the user to ignore the text field and still go and type any old thing into the field. This wasn't ideal. So my solution was to ' disable ' the form field and put a span next to it with an onclick event calling the date/time picker. This meant that the user was almost forced into using the nice date/time picker so dates would go in with the correct format (although that still has to be validated!).

So I started passing my nicely formatted date-time(s) through the form and picking trying to pick them up with PHP 's $_GET or $_POST variables. Unfortunately'disabled' fields are not passed through form submissions This was very annoying. The solution was to enable the input element using javascript when the form was submitted using the onsubmit event.

This meant that the form data was passed through as required and was nicely formatted ready for validation…Â

Search Array Keys and Return Matches

By , Wednesday 13th August 2008 4:26 pm

I've had the need to search through an array and return the elements that have keys that match a search term. So I thought I'd share.

'W hy would I need this?' would probably be the first question you'd ask, well if I wanted to search through an array for all the elements that related to the dimensions of an item then I could pull out the appropriate keys by using this little function:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

So for example if I wanted to search an array of item data for the dimension data then I could do the following (and print to screen presumably):

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

Which would return something like:

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

Custom php.ini with Plesk

By , Wednesday 13th August 2008 3:53 pm

We have a dedicated server with ukFast  on which we run a number of domains that exist on virtual servers running under Plesk . Anyway, on most of my domains I want to hide away warnings and for security keep errors to the log files, however on some of my domains (such as those I'm developing on) I want to show every little nasty warning and error that appears.

If I edit my PHP .INI”>php.ini this affects each and every domain on the server, not a good idea especially when several of the sites are fully live versions  So in order to get around this you need to put a file called vhosts.conf in your conf directory, for example, /var/www/vhosts/<my_domain>/conf/vhost.conf .

Once you've added your additional code, again for example I included,

 php_value error_reporting E_ALL php_value display_errors On 

followed by running the following command (this reconfigures all of your domains its just schneller lazier than typing in the domain name ,

 # /usr/local/psa/admin/bin/websrvmng -a 

If you're feeling a bit nimble then you can always type out the full version which is,

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

After this command if you look to httpd.include file, will see that your httpd.include will have an include line for your vhost.conf, something like this:

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












Panorama Theme by Themocracy

8 Besucher jetzt online
3 guests, 5 bots, 0 members
Max visitors today: 14 at 08:16 am UTC
Diesen Monat: 48 am 2011.12.09 02.18 UTC
Dieses Jahr: 130 am 28-03-2011 10.40 UTC
All time: 130 at 28-03-2011 10:40 pm UTC