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.
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:
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:
- 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__;
- 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.
- 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:
- 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.
- 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.