Workloads von Stapeljobs
IBM Cloud® Code Engine ist eine vollständig verwaltete, serverunabhängige Plattform, die Ihre containerisierten Workloads, einschließlich Stapeljob-oder Anwendungsworkloads, ausführt. Erfahren Sie mehr über die Ausführung von Batch-Jobs in Code Engine.
Was sind Stapeljobworkloads?
Ein Job in Code Engine führt eine oder mehrere Instanzen Ihres ausführbaren Codes aus. Im Gegensatz zu Anwendungen, die HTTP verarbeiten, sind Jobs so konzipiert, dass sie einmal laufen und dann beendet werden, so dass die Ressourcen für die Ausführung der Job-Workloads frei werden.
Sie können Batch-Jobs skalieren, indem Sie mehrere Instanzen definieren. Workloads können in parallele Tasks aufgeteilt werden, um die Rechenzeit zu reduzieren. Sie können festlegen, dass der Job mit automatischer Wiederholung ausgeführt wird, um fehlgeschlagene Workloads in einer Jobinstanz zu adressieren. Sie können Batch-Jobs manuell, programmgesteuert und nach Ereignissen wie Object Storage-Ereignissen auslösen.
Wenn Sie einen Auftrag erstellen, können Sie die Workload-Konfigurationsinformationen angeben, die bei jeder Ausführung des Auftrags verwendet werden sollen.
Typische Stapelverarbeitungsaufgaben sind:
- Training von Maschinenmodellen
- Analyse von Dateien, z. B. Sprachanalyse oder Bilderkennung
- Komprimieren oder Dekomprimieren von Dateien
- Archivierung von Informationen
Wenn Sie einen Job erstellen, können Sie Informationen für die Workloadkonfiguration angeben, die bei jeder Ausführung des Jobs verwendet werden.
Wie lautet der Lebenszyklus eines Batch-Jobs?
Wenn Sie einen Batch-Job übergeben, wird er vollständig ausgeführt. Normalerweise rufen Batch-Jobs Eingabedaten ab, führen Rechenarbeit aus und speichern die Ergebnisse in persistenten Datenspeichern. Wenn der Batch-Job abgeschlossen ist, werden Ressourcen, die zum Ausführen des Jobs verwendet werden, entfernt und es entstehen keine Kosten für Standby-Ressourcen.
Was sind Job-Arrays und Job-Array-Status?
Die Spezifikation des Job-Arrays ist Teil des Jobs und der Job-Ausführungskonfiguration. Ein Job-Array hat zwei Funktionen:
- Es bestimmt die Anzahl der gleichzeitigen Instanzen, die für die Ausführung des Auftrags gestartet werden.
- Es ermöglicht dem Benutzercode, anhand des ihm bereitgestellten individuellen Array-Index zu bestimmen, welchen Teil der Arbeit jede Instanz ausführen soll.
Geben Sie ein Job-Array entweder durch die Array-Größe oder durch eine Reihe von Array-Indizes an:
-
Wenn Sie eine Array-Größe mit dem Wert n angeben, dann ist die Anzahl der Instanzen, die für die Job-Ausführung gestartet werden, n. Jeder Instanz wird ein Array-Index (entweder 0, 1, 2 usw. bis n-1 ) unter Verwendung der Umgebungsvariablen
JOB_INDEXzugewiesen. Die UmgebungsvariableJOB_ARRAY_SIZEist auf n gesetzt, es sei denn, Sie geben einen bestimmten Wert dafür an. -
Wenn Sie einen Satz von einem oder mehreren Array-Indizes angeben, entspricht die Anzahl der gestarteten Instanzen der Anzahl der Indizes. Jeder Instanz wird mithilfe der Umgebungsvariablen
JOB_INDEXeiner der angegebenen Indizes zugewiesen. Die UmgebungsvariableJOB_ARRAY_SIZEwird auf die Anzahl der angegebenen Indizes gesetzt, sofern Sie keinen bestimmten Wert dafür angeben.
Die Umgebungsvariable JOB_ARRAY_SIZE ist auch für Benutzercode verfügbar und ist standardmäßig auf die Anzahl der Indizes eingestellt.
Wenn eine Instanz mit einem erfolgreichen Rückgabecode endet, ändert sich der Status des zugehörigen Array-Index in "abgeschlossen". Andernfalls wird Code Engine eine neue Instanz für denselben Index gestartet, wenn die konfigurierte Anzahl von Wiederholungen noch nicht überschritten wurde. Wenn eine Instanz fehlschlägt und keine weiteren Wiederholungen zulässig sind, ändert der zugehörige Array-Index seinen Status in "Fehlgeschlagen".
Welche Schlüsselfunktionen bietet die Arbeit mit Code Engine-Stapeljobs?
In den folgenden Abschnitten finden Sie weitere Informationen zum Arbeiten mit Batch-Jobs in Code Engine.
- Isolation
- Protokollierung
- Warteschlangensteuerung
- Retries
- Stapeljobs ausführen
- Skalierung
- Status
- Ähnliche Batch-Jobs übergeben
- Stapeljobs mit Ereignissen auslösen
Isolation
Code Engine ist ein regionaler Multi-Tenant-Service, bei dem Tenants dieselbe Netz- und Recheninfrastruktur gemeinsam nutzen. Insbesondere die Netz- und Recheninfrastruktur sind gemeinsam genutzte Ressourcen und einige Managementkomponenten werden von allen Tenants einheitlich verwendet. Tenants und ihre Workloads werden jedoch mithilfe von Code Engine-Projekten voneinander isoliert. Code Engine verhindert die Kommunikation zwischen Projekten und ermöglicht die Isolation Ihrer Anwendungen in einer Multi-Tenant-Umgebung. Darüber hinaus gibt es Zugriffssteuerungen, die auf Ressourcenebene ausgeführt werden, damit nur berechtigte Benutzer bestimmte Operationen für Projektressourcen ausführen können, wie z. B. Anwendungen oder andere Code Engine-Workloads.
Weitere Informationen zur Workload-Isolation finden Sie unter Code Engine-Workload-Isolation.
Protokollierung
Wenn Sie mit Code Engine in der Konsole mit aktivierter Protokollierung arbeiten, werden die Protokolle an eine IBM Cloud Logs weitergeleitet, die mit Ihrem Code Engine verbunden ist. In der Dienstinstanz IBM Cloud Logs werden die Protokolle indiziert, was eine Volltextsuche durch alle generierten Nachrichten und eine bequeme Abfrage nach bestimmten Feldern ermöglicht. Siehe Protokolle für Jobs abrufen.
Systemereignisinformationen können auch bei der Fehlersuche bei der Ausführung von Aufträgen hilfreich sein. Sie können Systemereignisinformationen mit der CLI anzeigen. Siehe Systemereignisinformationen für Jobs abrufen.
Weitere Informationen finden Sie unter Protokolle anzeigen.
Warteschlangensteuerung
Übergebene Stapeljobs werden automatisch in die Warteschlange gestellt und befinden sich bis zur Zuteilung im Wartestatus. Stapeljobs werden basierend auf den verfügbaren Rechenressourcen ausgeführt, die in Ihrem Code Engine-Projekt definiert
sind. Stapeljobs mit dem Status pending können aus der Warteschlange entfernt werden. Sie können Stapeljobs überwachen, die anstehen, ausgeführt werden oder abgeschlossen sind, indem Sie die Konsole oder die Befehlszeilenschnittstelle
von Code Engine verwenden.
Retries
Jede Jobinstanz wird bis zum Abschluss ausgeführt. Im Workloadcode kann jedoch während der Jobausführung ein Fehler auftreten. Wenn eine Jobinstanz mit einem Rückkehrcode ungleich null beendet wird, startet Code Engine die Jobinstanz neu. Mit Code Enginekönnen Sie die Anzahl der Wiederholungen begrenzen, um das erneute Starten fehlgeschlagener Jobinstanzen zu vermeiden.
Stapeljobs ausführen
Unabhängig davon, ob Ihr Code als Quellcode in einer lokalen Datei oder in einem Git Repository vorliegt, oder ob Ihr Code ein Container-Image ist, das in einer öffentlichen oder privaten Registry existiert, bietet Code Engine eine optimierte Möglichkeit, Ihren Code als Job auszuführen.
Sie können Batch-Jobs in Code Engine wie folgt erstellen und ausführen:
- Führen Sie ein vorhandenes Container-Image aus. Erstellen Sie einen Job und geben Sie einen Verweis auf Ihr Image an, der bei der Übergabe des Jobs verwendet werden soll. Ein Beispiel finden Sie unter Job erstellen und ausführen.
- Beginnen Sie mit Quellcode. Wenn Sie mit Quellcode beginnen, der sich in einem Git-Repository oder auf Ihrer lokalen Workstation befindet, können Sie auf die Position Ihrer Quelle verweisen, und Code Engine erstellt das Image für Sie. Siehe Job aus Repository-Quellcode erstellen und Job aus lokalem Quellcode erstellen.
Weitere Informationen finden Sie unter Mit Jobs arbeiten.
Skalierung
Ein Job in Code Engine (Stapeljob) besteht aus mindestens einer Jobinstanz. Während Jobinstanzen unabhängig voneinander ausgeführt werden, führen sie denselben Code aus. Angenommen, Sie haben eine Datenbank mit 100 zu analysierenden Datensätzen.
Sie können Ihren Job so ausführen, dass jede Jobinstanz jeweils 10 Datensätze analysiert. Die erste Jobinstanz analysiert beispielsweise die Datensätze 0 bis 9, die zweite Jobinstanz kann die Datensätze 10 bis 19 analysieren usw. In diesem
Beispiel empfängt jede Jobinstanz den vom System bereitgestellten Jobeingabeparameter JOB_INDEX als Umgebungsvariable, die Sie verwenden können, um den Bereich der Datenbanksätze zu berechnen, die von den einzelnen Jobinstanzen
analysiert werden. Die Anzahl der Jobinstanzen wird bei der Übergabe des Stapeljobs angegeben.
Wenn Sie einen Batch-Job ausführen, bleiben Jobinstanzen während der Startzeit möglicherweise im Wartestatus, wenn die Instanzen gestartet werden. Die Zeiten für anstehende Jobinstanzen können aufgrund der System-und Netzinfrastruktur variieren, da das System Anpassungen vornimmt, um den Ressourcenbedarf im Zusammenhang mit dieser Ausführung des Jobs zu erfüllen. Wenn die Systeminfrastruktur auf einen hohen Nutzungsbedarf reagiert, kann das Ergebnis eine Verzögerung von mehreren Minuten beim Start für Jobs sein, da Jobinstanzen gerade rechtzeitig bereitgestellt werden.
Status
Ein Batch-Job hat den Status Succeeded, wenn alle Jobausführungsinstanzen abgeschlossen sind.
Ein Batch-Job hat den Status Failed, wenn mindestens eine Jobausführungsinstanz das Wiederholungslimit erreicht. Wenn die Ausführung eines Jobs zu lange dauert, befindet sich der Job im Status Failed, sobald die maximale
Ausführungszeit erreicht ist. Weitere Informationen finden Sie unter Jobstatus.
Ähnliche Stapeljobs übergeben
Wenn Sie einen Job erstellen, können Sie Informationen für die Workloadkonfiguration angeben, die bei jeder Ausführung des Jobs verwendet werden. Wenn Sie eine allgemeine Gruppe von Konfigurationsdaten für Batch-Jobs mit Code Engineverwenden, können Sie zusätzliche Parameter mit der Jobübergabe angeben, um die Stapeljobparameter für diese bestimmte Jobübergabe zu überschreiben.
Auslösen von Stapeljobs mit Ereignissen
Stapeljobs können automatisch auf der Basis von Ereignissen wie periodischen Zeitgebern, Object Storage-Ereignissen oder Kafka-Themen übergeben werden.
Angenommen, Sie möchten Ihren Batch-Job automatisch auf der Basis einer Subskription für ein IBM Cloud Object Storage-Bucket auslösen, das Ereignisse generiert, wenn eine Datei geändert oder zum Object Storage-Bucket hinzugefügt wird. Überprüfen
Sie das Code Engine cos-event-job-Beispiel auf Informationen zum Erstellen von Object Storage-Ereignissen und verwenden
Sie die Ereignisse zum Auslösen von Batch-Jobs.
Weitere Informationen zur Verwendung des Ereignisverfahrens mit Code Engine-Jobs finden Sie in den folgenden Abschnitten: Mit dem Ereigniserzeuger des periodischen Zeitgebers(cron)arbeiten, Mit dem Ereigniserzeuger IBM Cloud Object Storage arbeiten und Mit dem Ereigniserzeuger Kafka arbeiten.
Benötigen Sie weitere Codebeispiele? Sehen Sie sich die Beispiele für IBM Cloud Code Engine GitHub repoan.
Wie kann ich mit Stapeljobs beginnen?
Informationen zum Erstellen und Ausführen einer einfachen Code Engine-Stapeljobanwendung mit dem icr.io/codeengine/firstjob-Beispielbild finden Sie unter Ersten Code Engine-Job ausführen.
Sie können auch ein Lernprogramm für Batch-Jobs ausprobieren (siehe Jobs ausführen und aktualisieren).
Weitere Informationen zum Arbeiten mit Stapeljobs finden Sie unter Mit Jobs und Jobausführungen arbeiten.