1

Ich erstelle eine kleine Monolith-ETL-Software neu, die in Python geschrieben wurde. Ich finde eine Microservice-Architektur geeignet, da sie uns die Flexibilität gibt, bei Bedarf verschiedene Technologien zu verwenden (Python ist meiner Meinung nach nicht die beste Sprache für Unternehmenssoftware). Wenn wir also drei Microservices hätten (nennen wir sie Extract, Transform, Load), könnten wir in Zukunft Java for Transform Microservice verwenden.Microservice-Architektur für ETL

Das Problem ist, es ist hier nicht möglich, das Ergebnis eines Serviceaufrufs in einer API-Antwort (sagen wir HTTP) zu übergeben. Die Ausgabe von Extract wird Gigabytes an Daten sein.

Eine Idee besteht darin, Extract aufzurufen und die Ergebnisse in einer Datenbank speichern zu lassen (was wirklich das ist, was das Modul im Monolith macht, also einfach zu implementieren). In diesem Fall gibt der Dienst nur eine Ja/Nein-Antwort zurück (war der Prozess erfolgreich oder nicht).

Ich fragte mich, ob es eine bessere Möglichkeit gäbe, sich dem zu nähern. Was wäre eine bessere Architektur? Ist das, was ich vorschlage, vernünftig?

+0

Ich bin gespannt, warum Sie Micro Services für Ihre Lösung finden? Abgesehen von der Flexibilität, welche anderen nicht funktionalen Funktionen Sie suchen. Ich würde HTTP nur verwenden, wenn ich kein anderes schnelleres Protokoll in meinem ETL-Prozess verwenden kann. Wenn ich auf deine Frage schaue, habe ich das Gefühl, dass du nach verteilter Architektur und einer Trickglot-Anwendung suchst. Ist Ihr aktuelles ETL-Tool eine Desktopanwendung? – Sumanth

+0

Ist die Verwendung von HTTP zwingend erforderlich, damit die Architektur als Micro-Service-basiert betrachtet werden kann? Ich erwog andere Formen der Integration verschiedener Komponenten, z. Amazon Daten Pipeline (im Grunde ruft Dienste in einer bestimmten Reihenfolge usw.) – lfk

Antwort

1

Dies ist ein interessantes Problem. Die beste Lösung hierfür könnte Reactive Spring Boot sein. Sie können den Extract-Dienst als Reactive Spring Boot-App verwenden und statt der Übertragung von GB Daten die Daten an den erforderlichen Dienst streamen.

Jetzt wundern Sie sich vielleicht, dass während des Streamings, könnte es auf dem Arbeitsfaden halten. Die Antwort ist nein. IT arbeitet auf Betriebssystemebene. Es hält keine Anfrage Thread zum Streamen der Ergebnisse. Das ist die Schönheit des Reactive Spring Boot.

gehen durch diese und
https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0-m1

+0

Wäre das begrenzt mich nicht auf Java, daher den Zweck zu besiegen, eine Micro-Architektur? Im Moment verwenden wir nicht einmal Java - wir könnten es in Zukunft verwenden oder eine andere Technologie. Aber ich möchte, dass die Service-Schnittstellen technologieunabhängig sind. – lfk

+0

Leider, ja. Aber mal sehen, was wir tun müssen, sobald die Funktion im Frühjahr 5 freigegeben wird. –

0

erkunden Wenn Ihr ETL-Prozess auf einzelne Datensätze (einige parallelize-fähige Einheiten Berechnung) funktioniert, dann gibt es eine Menge von Optionen, die Sie mit gehen könnte, sind hier ein paar :

Messaging System-basierte

Sie Ihre Verarbeitung um ein Messaging-System stützen könnten, wie Apache Kafka. Es erfordert eine sorgfältige Konfiguration und Konfiguration (abhängig von den Anforderungen an Haltbarkeit, Verfügbarkeit und Skalierbarkeit Ihrer spezifischen Anwendungsfälle), kann Ihnen jedoch eine bessere Anpassung als eine relationale Datenbank bieten.

In diesem Fall würden die ETL-Schritte völlig unabhängig arbeiten und nur einige Themen verbrauchen, in einigen anderen Themen produzieren. Diese anderen Themen werden dann von dem nächsten Schritt usw. aufgenommen. Es würde keine direkte Kommunikation (Anrufe) zwischen den E/T/L-Schritten geben.

Es ist eine saubere und leicht verständliche Lösung mit unabhängigen Komponenten.

Off-the-shelf-Verarbeitungslösungen

Es gibt ein paar OTS-Lösungen für die Datenverarbeitung/Berechnung und Transformation: Apache Flink, Apache Storm, Apache Spark.

Obwohl diese Lösungen Sie offensichtlich auf eine bestimmte Technologie beschränken würden, könnten sie besser sein, als ein ähnliches System von Grund auf neu aufzubauen.

Nicht persistente

Wenn die aktuellen Daten-Streaming/Rekord-basiert, und es ist nicht die Ergebnisse zwischen den Schritten bestehen bleibt erforderlich, konnten Sie nur mit Lang Abfrage der HTTP-Ausgabe des wegkommen vorheriger Schritt.

Sie sagen, dass es einfach zu viele Daten, aber dass Daten nicht in die Datenbank zu gehen (wenn es nicht erforderlich ist), und konnten nur statt, um zum nächsten Schritt gehen. Wenn die Daten kontinuierlich (nicht alles in einem Stapel) im selben lokalen Netzwerk produziert werden, halte ich das nicht für ein Problem.

Dies wäre technisch sehr einfach zu tun, sehr einfach zu validieren und zu überwachen.