Office Grid Computing mit Hilfe Virtuelle Umgebungen - Teil 2
Einführung
Ich arbeite in einer Firma, wo wir laufen viele Batch-Jobs Verarbeitung Millionen von Datensätzen der Daten jeden Tag und ich habe vor kurzem Nachdenken über all die Maschinen, und sitzen um jeden jeden Tag nichts zu tun, für mehrere Stunden. Wäre es nicht gut, wenn wir diese Maschinen verwenden können, um Systeme zu stärken die Rechenleistung unserer? In dieser Reihe von Artikeln werde ich Amt Blick auf die potenziellen Vorteile der Verwendung eines Gitters mit virtualisierten Umgebungen.
In Teil 1 habe ich einen Überblick über das System und Technologien I Büro einen Raster wird mit Hilfe schaffen sowie diskutiert einige der potenziellen Gründe, warum Sie wollen würde.
Job Control
Wenn du gehst zu laufen Arbeitsplätze dann wirst du einen Weg, sie zu verwalten müssen. Ihre Job-Control-System (auf dem Job-Server) muss wirklich gut aus, noch bevor Sie versuchen, ein Büro Netz laufen gedacht. Also erstens, was sind die Aufgaben für eine Job-Control-System:
- Verteilen Sie Arbeitsplätze auf Anfrage von Arbeitnehmern
- Erzähl Arbeiter, welche Art von Jobs ausgeführt
- Track Jobs
- Stellen Sie sicher, dass die Arbeitsplätze nur einmal ausgeführt
- Geben Sie Job-Daten für die Arbeitnehmer, oder wenigstens sagen, wo um es zu bekommen
Das System muss auch erweiterbar sein, eine Lösung, die jetzt in einem einzigen Fall arbeitet kann verlängert werden, um verschiedene Arten von Jobs ausgeführt wie das Unternehmen sieht den Wert in einem Raster Lösung sein. Zum Beispiel, Arbeitsplätze können Prioritäten zu gewinnen, kann mehr als ein Job-Typ bestehen (dh mehrere Code-Basen), eventuell kann man sogar laufen verschiedene Arbeitnehmer Maschinen, die für jede Art von Arbeit optimiert sind (obwohl das bedeutet Abkehr von der "allgemeinen Arbeitnehmer 'Idee). Versuchen Sie immer an die Zukunft denken bei der Entwicklung von Systemen, eine kurzfristige Sicht-bis langfristig Frust und erhöht die Entwicklungszeit führen kann.
Job Server
Wir werden irgendwo müssen unsere Arbeitsplätze Kontrolle aus, das einzige System in Ihrem Netz, die eine feste Resource Locator hat sein sollte, dass eine IP-Adresse, Hostname, URL (mit internen DNS), etc. Dies ist da die Arbeitnehmer müssen wissen, wo sie Arbeit suchen, müssen Arbeitnehmer vor der Job-Control-System (nicht der Job-Control-System finden die Arbeiter) zu finden.
Der Job Server selbst hat nicht wirklich eine komplizierte Aufgabe (in ein Basis-System sowieso), muss er eine Liste von Arbeitsplätzen zu speichern, zu verteilen Arbeitsplätze erhalten Ergebnisse und anschließend speichern Sie sie zum späteren Abruf. Wie diese Teile (wie "Hand Jobs") definiert werden kann, sehr einfach. Später können wir erweitern das System eine Administrationsoberfläche hinzufügen, bearbeiten, löschen, auszusetzen Arbeitsplätze umfassen, aber das ist jenseits dieser Übung.
Es gibt keinen Grund, dann, dass Ihr Job Server konnte nicht einer virtuellen Maschine läuft innerhalb Ihres Processing Server werden, sofern es nicht zu viele Ressourcen Abfluss von ihm. Der Job Server jedoch braucht eine hohe Verfügbarkeit, wenn es nach unten geht an einem Freitag Abend wirst du ein ganzes Wochenende der Verarbeitung verloren sind, potentiell 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
Der grundsätzliche Aufbau für unser Job-Server) bestehen, was ich rufe einen meiner LIMP Servern (also Li nux, m ySql, P PS. Der Code läuft auf thea Arbeitnehmer tatsächlich herauszufinden, was Arbeitsplätze kann es durch die Interaktion mit mit Job-Control-System Datenbanken laufen. Später konnten wir eine Web-Service und sogar die Hand aus, anstatt Arbeitsplätze der Arbeitnehmer nicht die harte Arbeit an sich, sondern für jetzt wollen wir weiterhin mit dem KISS-Prinzip (Keep It Simple, Stupid!).
Also lasst uns schaffen drei mySQL -Tabellen, um Arbeitsplätze behandeln. Diese werden "Arbeitsplätze werden`, `jobRecords` und `jobResults`.
Hier verwende ich SQL Buddy eine große kleine Alternative zu phpMyAdmin , nur weil seine leichter CentOS installieren (für andere zu sehen: 10 Great Alternativen zu phpMyAdmin )
Diese Tabelle besteht aus 5 einfachen Feldern,
- ID: Benennen Sie die Aufgabe
- Name: Konnte IDs eine Kundennummer oder eine beliebige Anzahl von anderen
- Status: Sie müssen wissen, wo die Arbeit an, z. B.
- 0: Nicht gestartet
- 1: Aufgenommene
- 2: Abgeschlossene
- started_by: Wer damit angefangen den Job? Dies ist nicht ganz notwendig ist aber ein nice to have. Ich würde vorschlagen, Tracking Arbeiter durch ihre IP-Adresse in Ihrem Netzwerk
- started_at: Wann hat der Arbeitnehmer Beginn der Arbeit? Durch die Verfolgung Jobs, die nicht innerhalb von X Höhe der Zeit wissen wir, müssen wir holen den Job noch einmal und starten Sie die Verarbeitung durch einen anderen Arbeitnehmer abgeschlossen haben. Die Arbeitnehmer könnten aufhören Verarbeitung / go offline für eine beliebige Anzahl von Gründen, Stromausfall, Absturz, Netzwerk Verlust, etc.
Es ist leicht, wie diese Tabelle mit ein paar zusätzliche Felder erweitert werden könnte, um für die Statistik-Tracking, eine Zielzeit Spalte, um zu sehen, wie lange der Job, nahm einen Zähler, um zu sehen, wie viele Arbeitnehmer und nahm die Arbeit (natürlich muss dies auf eher erlauben 1), Job-Priorität, kann die Liste weiter und weiter. In komplexeren Szenarien Job wäre es möglich, festzulegen, wie viel Speicher die Arbeiter würden den Zugang zu müssen (und deshalb nur geeignete Arbeitnehmer), oder auch, welche Art von Arbeitnehmer erforderlich wäre.
Fügen wir ein paar Beispiel-Jobs:
Die folgende Tabelle ist wieder ganz einfach zu verstehen, das sind unsere Aufgabe Datensätze. Sie entsprechen den Hauptaufgaben Tabelle sind nach einer Spalte stehen `jobs_id`. Das Make up dieser Tabelle hängt sehr stark von den Daten, die Sie benötigen, um Ihre Mitarbeiter liefern, können machen ein sehr einfaches Beispiel, wo wir vier Säulen:
- ID: ID des Datensatzes
- Name: der Name
- Adresse: Person der Adresse
- jobs_id: Der Job-ID, die dieser Datensatz verknüpft
Die dritte und letzte Tisch besteht aus einer Ergebnistabelle, hat es ähnlich machen wie unsere Aufzeichnungen Tisch, und mit der Zugabe von einigen Spalten könnte ein Teil der Datensätze Tabelle werden:
- job_record_id: Link das Ergebnis der Arbeit Tisch
- Ergebnis: Das Ergebnis Daten
... Und das ist alles, was Sie für Job-Kontrolle! (Wenn auch auf einem sehr einfachen Niveau) In meinem Fall habe ich an einen anderen Tisch, wo meine Daten zu verarbeiten befand bin spitz, aber das könnte genauso gut eine Datei, Parameter zur Simulation Code ausführen, you name it.
Auswählen eines Jobs
Wie bereits erwähnt, werden die Arbeiter unserer Job-Management für uns tun jetzt, so brauchen wir wirklich wollen, ist einen Job zu finden, dass die Verarbeitung braucht und nutzen Sie die Informationen. Wie würden wir das tun? Nun holen unsere Aufgabe Auswahlkriterien und suchen Sie nach Jobs, die in SQL habe ich die folgenden:
- Nehmen Sie alle Jobs, die nicht als vollständig, sondern von unserer Arbeiter sind markiert und zurückgesetzt ihnen (Ersatz __ME__ mit einer Kennung, einfachste wäre IP-Adresse):
UPDATE `Jobs` SET `Status` = 0 WHERE `Status` = 1 AND `started_by` = __ME__; - Mit unserem Job Selektionskriterien, wählen Sie einen Job und erzählen die Steuerung, dass diese Arbeitnehmer mit ihm zu tun:
UPDATE `Jobs` SET `Status` = 1, "started_by` = __ME__, `started_at` = NOW () WHERE `Status` = 0 oder (`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL x Stunde)) ORDER BY `id` ASC;
Durch Greifen Arbeitsplätze, die nicht in X-Ergebnisse viel Zeit wir dafür, dass alle Arbeitsplätze im Falle eines Arbeitnehmers abstürzt oder geht AWOL ausgeführt sind zurückgekehrt.
- Weiter greifen die Arbeitsplätze Details durch die Datensätze selbst verfolgt:
SELECT * FROM `Jobs` 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 suspend / resume jederzeit erlauben einige Robustheit in Ihrem Skript. Es könnte sein, dass die Aufgabe auf halbem Weg setzt durch die Aktualisierung der Job-Control-System, so überprüft die Anzahl der Datensätze in einem Job und die Anzahl der Ergebnisse zurück an den Job-Control-System gespeichert wäre eine weise Entscheidung.
Darüber hinaus wird veranschaulicht, wie während dieser Arbeitsplätze werden kann gewählt wirklich und leitete aus einer SQL-Abfrage sollte Frame abstrahieren Ihre Arbeit kontrollieren, so dass, wenn Sie beschließen, wechseln Sie mit einem Web-Service, eine Datei-basierte System XML , oder jede andere Anzahl der Systeme, es wird keinen Einfluss auf den Code oben ist.
Job-Konfiguration
Der nächste Aspekt ist Aufgabe Größe und Konfiguration. Durch das Spiel mit Job-Konfiguration können wir schlagen eine exzellente Balance zwischen Geschwindigkeit, Prozess-Replikation und Zuverlässigkeit. Nehmen Sie ein paar ofa Szenarien:
- Jobs nehmen Sie 1 Tag pro zu laufen: Dies bedeutet, dass Ihre Mitarbeiter Tage benötigen 15 bis Arbeitsprozeß jede (Sie erinnern sich 10% der Energie für 2/3rds der Zeit). Dies ist eindeutig nicht ein weiser Konfiguration ist es Ihre Aufgabe Größe viel zu groß! Es würde mindestens die doppelte Zeit, einen Job verarbeitet werden, sollten die ersten Arbeiter gehen AWOL erhalten (Zeit zu holen, dass es nicht ein Ergebnis plus Wiederaufarbeitung rechtzeitig zurückgegeben). In einer idealen müssten Sie mindestens einen vollen Job leicht über geräumt Ende jeder längerem Stillstand ist auf diese Weise behalten Sie die Jobs tickt und im schlimmsten Fall einen Job würde zwei Tage dauern bis der erste Prozess sollte abhanden kommen.
- Jobs nehmen 1 Minute laufen: Dies bedeutet, dass Ihre Mitarbeiter Minuten dauern etwa 15 bis Joblauf jeder. Dies mag zunächst scheinen ideal, gewinnen Sie zusätzliche Arbeit Verarbeitung während der Mittagspause, Kaffeepausen, Meetings, etc diesem Szenario legt Stamm auf andere Bereiche des Systems und stellt seine eigenen Probleme. Zum Beispiel wird zunächst das Setup / Bearbeitungszeit Verhältnis geht nach rechts unten gehen, daher verlieren und effizientes System. Ihr Netzwerk wird ständig Streaming Job-Informationen zu den verschiedenen Arbeitern frustrierend Personal dong ihrer täglichen Arbeit sind. Sie werden auch mehr Belastung für Ihre Auftragsbearbeitung Server gestellt, wie es austeilen viele, viele kleine Arbeiten auf einer regelmäßigen Basis 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 Aufgaben könnten erstellen 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 viel von den verfügbaren Ressourcen, die Art der Arbeit, Job Bearbeitungszeit Anforderungen, Netzwerkfähigkeit, und so weiter. Doch einige Richtlinien wäre:
- Größe Arbeitsplätze, so dass jeder Arbeiter kann durch mindestens 3-4 Arbeitsplätze in einem Zeitraum von 15 Stunden (wahrscheinlich die längste Zeit im Leerlauf) zu erhalten
- Spielen Sie mit dem Job Größe, so dass Rüstzeit wird ziemlich unbedeutend, um die Verarbeitungszeit (unter Berücksichtigung der oben genannten Stelle) verglichen.
- Wenn ein Job nicht in doppelten runden das viel Zeit (vielleicht auch weniger), die Sie erwarten, dass sie vollständig davon ausgehen, dass es seine gegangen AWOL und startet die Bearbeitung durch einen anderen Arbeitnehmer. Das heißt, Sie können warten müssen, bis zu dem Dreifachen der normalen Länge von ein Job für sie zu vervollständigen (möglicherweise mehr, wenn die anschließende Arbeit ausfällt). Sie können zu verkürzen, aber darauf achten, nicht zu verringern Grundlage es zu viel, wie Sie vielleicht anfangen zu duplizieren Verarbeitung Aufgaben regelmäßig.
- 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 zwei negative Auswirkungen haben wird, wird Sie tagsüber Personal zu finden über das Netzwerk frustrierend und Probleme können mit Anschlüssen Zeitüberschreitung ein Problem, das nur noch zunehmen wird, wie Sie Ihren Rastermaß erlebt werden.
- Stellen Sie sicher, Arbeitsplätze können auf Ihre Mitarbeiter führen. Wenn Arbeitsplätze zu Erinnerung werden Intensiv-oder Festplattenspeicher intensive Beschäftigung startet abgebrochen und das einzige, was Sie feststellen, ist ein Tropfen auf Zahl der Arbeitsplätze ohne wirklichen Grund, warum verarbeitet.
Der Einreichung eines Jobs
Bei der Vorlage der Ergebnisse einer Aufgabe es ist wichtig zu überprüfen, dass die Ergebnisse nicht durch einen anderen Arbeitnehmer eingereicht worden, vor allem, wenn der aktuelle Arbeiter wurde es einige Zeit.
Wenn die Ergebnisse vorgelegt werden sicherstellen, dass die Anzahl der Ergebnisse die Anzahl der Datensätze Spiele im Job.
Wie bereits erwähnt, und kann nicht genug betont werden, bauen die Fehlertoleranz in Wiederfinden und Ergebnisse Unterwerfung. Die Arbeiter können (und wahrscheinlich wird) in den Suspend-Modus gehen am unpassendsten Zeiten und dies muss gesorgt werden. Auch noch einmal abstrahiert weg Ihre Ergebnisse Einreichung hilft sorgen für zukünftige Änderungen an Ihrem Job-Control-System viel einfacher zu handhaben.
Zusammenfassung
In diesem section wir haben, was eine Job-Control-Server tun muss und wie man ein sehr einfaches System einrichten bekommen aussah. Wir diskutierten, wie man einen Job aus der Steuerung abgerufen und wie man am besten Jobs konfigurieren, um das Beste für Ihr Büro unserer Grid-System. Zum Schluss einen Punkt oder zwei auf die Vorlage zurück an den Job-Control-Server vorgestellt wurde.
- Ein Job-Control-Server verwaltet Arbeitsplätze und sorgt dafür, dass alle Arbeiten abgeschlossen sind Einheiten
- Durch Abstraktion Ihren Job wählen / Ergebnisse Vorlage können wir die Technologie der Kontroll-Server ohne viel Probleme ändern
- Konfigurieren Sie Ihren Arbeitsplätzen, um sicherzustellen, dass sie schnell und effizient, ohne zu viel Druck auf die Netzwerkinfrastruktur und ohne doppelte Verarbeitung Aufgaben regelmäßig ausgeführt werden.
- Achten Sie darauf, Fehlertoleranz und Fehler checking bauen in Ihre Routinen können Arbeitnehmer Suspend-und Resume und die ungünstigsten Zeiten. Denken Sie daran, wenn die Ergebnisse bereits von einem anderen Arbeitnehmer eingereicht worden.
Nächste Zeit
In Teil 3 werden wir schaffen unsere virtuelle Maschine einrichten und unsere Windows-Maschinen von Arbeitern zu idle-Zeit.



















































Heya! Gutes Konzept, könnte aber wirklich den Job?