Hochgradig parallele Arbeitslasten, auch als Embarrassingly-Parallel-Arbeitslasten bezeichnet, sind in den Finanz-, Medien- und Life-Science-Unternehmen üblich. Bei parallelen Arbeitslasten wie diesen stellen Unternehmen in der Regel einen Cluster aus Rechenknoten bereit. Jeder Knoten kann unabhängige Verarbeitungsaufgaben in einer Konfiguration ausführen, die als Grid-Computing bezeichnet wird. Zur Verarbeitung von Daten für parallele Arbeitslasten können Sie Apache Beam mit Dataflow verwenden. Weitere Informationen über Apache Beam finden Sie im Apache Beam-Programmierhandbuch.
Die Verwendung von Dataflow für hochparallele Arbeitslasten bietet viele Vorteile.
- Erstellen Sie einen vollständig verwalteten Workflow mit Datenverarbeitung und Orchestrierung in derselben Pipeline.
- Die Dataflow-Benutzeroberfläche und ‑API enthalten Funktionen zur Beobachtbarkeit.
- Dataflow bietet zentrale Logging-Funktionen für alle Pipelinephasen.
- Dataflow bietet Autoscaling, um die Leistung zu maximieren und die Ressourcennutzung zu optimieren.
- Dataflow ist fehlertolerant und bietet dynamisches Load Balancing.
- Dataflow bietet die Erkennung und Korrektur von Nachzüglern.
- Verwenden Sie ein einziges System für alle Aspekte der Pipeline, sowohl für die Vor- als auch für die Nachbearbeitung und für die Aufgabenverarbeitung. Sie können sogar den vorhandenen C++-Code in der Pipeline verwenden.
- Verwenden Sie die integrierte genau einmalige Verarbeitung von Dataflow.
Darüber hinaus bietet Dataflow verschiedene Sicherheitsfunktionen:
- Verwenden Sie mit Ihrer Pipeline den vom Kunden verwalteten Verschlüsselungsschlüssel (Customer-Managed Encryption Key, CMEK).
- Definieren Sie Firewallregeln für das Netzwerk, das mit Ihrem Dataflow-Job verknüpft ist.
- Verwenden Sie ein VPC-Netzwerk.
Bei diesen Arbeitslasten ist die Verteilung von Daten an Funktionen erforderlich, die über viele Kerne ausgeführt werden. Diese Verteilung erfordert oft hochparallele Lesevorgänge, gefolgt von einem großen Daten-Fan-Out, das von nachgelagerten Systemen aufgefangen wird. Die Kernkompetenzen von Dataflow sind die Verteilung von Batch- und Stream-Arbeitslasten auf Ressourcen sowie die Verwaltung von Autoscaling und dynamischem Arbeitsausgleich auf diesen Ressourcen. Daher werdenLeistung, Skalierbarkeit, Verfügbarkeit und Sicherheitsanforderungen automatisch verarbeitet, wenn Sie Dataflow für Ihre hochparallelen Arbeitslasten verwenden.
Externen Code in die Pipeline einbinden
Apache Beam hat derzeit integrierte SDKs für Java, Python und Go. Viele hoch parallele Arbeitslasten verwenden jedoch Code, der in C++ geschrieben ist. Sie können Dataflow und andere Google Cloud -Dienste verwenden, um C++-Binärdateien (Bibliotheken) als externen Code mit Apache Beam auszuführen. Wenn Sie C++-Binärdateien einschließen, können Sie diese Arbeitslasten über vollständig verwaltete Dienste nutzen. Außerdem haben Sie so die Möglichkeit, vollständige Pipelines mit einem ausgefeilten gerichteten azyklischen Graphen (Directed Acyclic Graph, DAG) zu erstellen.
Derselbe Ansatz zum Ausführen von C++-Binärdateien ist auch für Code relevant, der in anderen Sprachen geschrieben wurde, wenn Sie eine eigenständige Binärdatei kompilieren.
Hochparallele End-to-End-Pipelines
Mit Dataflow können Sie die Verarbeitung von E/A-Lese-/Schreibvorgängen, Analysen und Aufgabenausgabe in derselben Pipeline ausführen, sodass Sie vollständig parallele Pipelines ausführen können.
Eine hochparallele HPC-Arbeitslast kann beispielsweise die folgenden Schritte enthalten:
Rohdaten sowohl aus internen als auch externen Quellen aufnehmen Die Daten können aus unbegrenzten oder begrenzten Quellen stammen. Unbegrenzte Quellen werden in der Regel in begrenzte Quellen umgewandelt, um den für die Task-Farming-Technologien erforderlichen Anforderungen gerecht zu werden.
Die Rohdaten werden in eine Datenform und Codierung umgewandelt, die die Task-Farming-Komponente verwenden kann.
Mit einem System die Berechnungen auf Hosts verteilen und Daten aus einer Quelle abrufen und dann die Ergebnisse für die Nachanalyse materialisieren.
Führen Sie eine Nachanalyse durch, um die Ergebnisse in die Ausgabe umzuwandeln.
Mit Dataflow können Sie alle diese Schritte in einer einzigen Pipeline verwalten und dabei die Vorteile der Dataflow-Funktionen nutzen:
Da ein einzelnes System für alle Phasen verantwortlich ist, benötigen Sie kein externes Orchestrierungssystem, um das Ausführen mehrerer Pipelines zu koordinieren.
Bei der Datenlokalisierung müssen Sie die Phasengrenzen nicht explizit materialisieren und dematerialisieren, was die Effizienz erhöht.
Durch eine bessere Telemetrie innerhalb des Systems stehen Informationen zur Gesamtzahl der Byte in der Phase zur Verfügung, was zum Entwerfen späterer Phasen hilfreich ist.
Wenn sich die Daten im System befinden, werden die Ressourcen beim Autoscaling basierend auf den Datenvolumen skaliert, während sich die Daten durch die Pipelinephasen bewegen.
Die hochparallele Dataflow-HPC-Pipeline verwendet moderne DAG-Ausführungsengines. Alle gängigen Pipelineprozesse können in einer einzigen DAG und damit in einer einzigen Dataflow-Pipeline ausgeführt werden. Sie können einen von Apache Beam generierten DAG verwenden, um die Form der Pipeline zu definieren.
Wenn Sie von einem Task-Farm-System zu einem hochparallelen Workflow migrieren, müssen Sie von Aufgaben zu Daten wechseln. Eine PTransform
enthält eine DoFn
mit einer Verarbeitungsfunktion, die ein Datenelement entgegennimmt.
Der Datenpunkt kann ein beliebiges Objekt mit einem oder mehreren Attributen sein.
Mit einem DAG und einer einzelnen Pipeline können Sie alle Daten im System während des gesamten Workflows laden. Sie müssen keine Daten in Datenbanken oder Speicher ausgeben.
Google Cloud Komponenten, die mit hochparallelen Workflows verwendet werden
In Grid-Computing-Anwendungen werden Daten an Funktionen verteilt, die auf vielen Kernen ausgeführt werden. Dieser Ansatz erfordert oft hochgradig parallele Lesevorgänge und ist häufig von einem großen Daten-Fan-Out gefolgt, der von nachgeordneten Systemen aufgefangen wird.
Dataflow ist in andere verwaltete Dienste von Google Cloud eingebunden, die parallelisierte Daten-I/O im großen Maßstab verarbeiten können:
- Pub/Sub: Spaltenorientierter Speicher für Caching und Bereitstellung
- Bigtable: Dienst zur globalen Aufnahme von Ereignisstreams
- Cloud Storage: Einheitlicher Objektspeicher
- BigQuery: Data-Warehouse-Dienst im Petabyte-Bereich
In Kombination bieten diese Dienste eine überzeugende Lösung für hoch parallele Arbeitslasten.
Eine gängige Architektur für hochparallele Arbeitslasten, die aufGoogle Cloud ausgeführt werden, umfasst Folgendes:
Den Dataflow-Runner für Apache Beam. Der Runner verteilt die Aufgaben an die einzelnen Grid-Knoten in Form eines Verarbeitungsablaufs, der von einem DAG abgeleitet wird. Mit einem einzelnen Apache Beam-DAG können Sie komplexe mehrstufige Pipelines definieren, in denen parallele Pipelinephasen mithilfe von Side Inputs oder Joins zusammengeführt werden können.
Cloud Storage. Dieser Dienst stellt einen Speicherort für die C++-Binärdateien bereit. Wenn große Dateien gespeichert werden müssen, wie es zum Beispiel in Medienunternehmen der Fall ist, befinden sich diese Dateien ebenfalls in Cloud Storage.
Bigtable, BigQuery und Pub/Sub. Diese Dienste werden als Quellen und als Senken verwendet.
Das folgende Diagramm zeigt die allgemeine Architektur für einen Beispiel-Workflow.
Sie können auch andere Speichersysteme verwenden. Einzelheiten entnehmen Sie der Liste der Speichersysteme und Streamingquellen auf der Pipeline-I/O-Seite der Apache Beam-Dokumentation.
Dataflow-Runner für Apache Beam
Mit Dataflow können Sie Ihre Daten sowohl im Streaming- als auch im Batch-Modus transformieren und anreichern. Dataflow basiert auf Apache Beam.
Cloud Storage
Cloud Storage ist ein einheitlicher Objektspeicher, der die Bereitstellung von Livedaten, Datenanalyse, maschinelles Lernen (ML) und Datenarchivierung umfasst. Für hochgradig parallele Arbeitslasten mit Dataflow bietet Cloud Storage Zugriff auf C++-Binärdateien. In einigen Anwendungsfällen ist Cloud Storage auch der Speicherort für Daten, die in der Verarbeitungsphase benötigt werden.
Sie müssen die Leistungsmerkmale von Cloud Storage kennen, um mit den für das Grid-Computing typischen High-Burst-Lasten umgehen zu können. Weitere Informationen zur Datenbereitstellungsleistung von Cloud Storage finden Sie in den Richtlinien für die Anforderungsrate und Zugriffsverteilung in der Dokumentation zu Cloud Storage.
Bigtable
Bigtable ist ein leistungsstarker NoSQL-Datenbankdienst für umfangreiche analytische und operative Arbeitslasten. Bigtable ist eine Ergänzung zu Dataflow. Die Hauptmerkmale von Bigtable, Lese- und Schreibvorgänge mit niedriger Latenz (6 ms beim 90. Perzentil), ermöglichen die Verarbeitung vieler Tausender gleichzeitiger Clients und Heavy-Burst-Arbeitslasten. Diese Features machen Bigtable in der Verarbeitungsphase von Dataflow zu einer idealen Senke und Datenquelle für die DoFn
-Funktion.
BigQuery
BigQuery ist ein schnelles, kostengünstiges und vollständig verwaltetes Data Warehouse, mit dem Unternehmen umfangreiche Datenanalysen realisieren können. Grid-Ergebnisse werden häufig für Analysen verwendet und ermöglichen die Ausführung umfangreicher Zusammenfassungen auf Basis der Grid-Datenausgabe.
Pub/Sub
Pub/Sub ist ein asynchroner, skalierbarer Messaging-Dienst, der Dienste entkoppelt, die Nachrichten von Diensten erzeugen, die diese Nachrichten verarbeiten. Sie können Pub/Sub für Streaminganalysen und Pipelines zur Datenintegration verwenden, um Daten aufzunehmen und zu verteilen. Es ist als nachrichtenorientierte Middleware für die Dienstintegration oder als Warteschlange zur Parallelisierung von Aufgaben gleichermaßen effektiv.
Dataflow-DAG
Mit dem Apache Beam SDK können Sie komplexe DAGs entwerfen, um damit problemlos mehrstufige Stream- oder Batch-Pipelines zu erstellen. Für die Datenverschiebung ist der Runner zuständig, wobei die Daten als PCollection
-Objekte ausgedrückt werden. Diese sind unveränderbare Sammlungen von parallelen Elementen.
Das folgende Diagramm veranschaulicht diesen Ablauf.
Mit dem Apache Beam SDK können Sie einen DAG definieren. Im DAG wiederum können Sie benutzerdefinierten Code als Funktionen hinzufügen. Normalerweise wird dieselbe Programmiersprache (Java, Python oder Go) sowohl für die Deklaration des DAG als auch für den benutzerdefinierten Code verwendet. Sie können auch nicht vordefinierten Code wie C++ für den benutzerdefinierten Code verwenden.
Nächste Schritte
Best Practices für die Arbeit mit hochparallelen Dataflow-HPC-Pipelines
Folgen Sie der Anleitung, um eine Pipeline zu erstellen, die benutzerdefinierte Container mit C++-Bibliotheken verwendet.