Wie baut man eine Do-it-yourself-Datenverarbeitungsplattform auf? / Sudo Null IT-Nachrichten

Zahlreiche russische Unternehmen sind im Bereich Software mit Einschränkungen konfrontiert. Sie können viele wichtige Tools für die Arbeit mit Daten nicht mehr nutzen. Aber wie sie sagen, eine Tür ging zu und eine andere öffnete sich. Es gibt eine Alternative zu Fremdlösungen: Sie können selbst eine Datenverarbeitungsplattform erstellen. Wir erzählen Ihnen, wie wir das bei ITSumma gemacht haben, welche Komponenten wir verwendet haben, auf welche Einschränkungen wir gestoßen sind und warum das alles überhaupt nötig ist.

Hintergrund (sehr kurz)

Ein Kunde, der sich für unsere Kompetenzen im Bereich Gebäudeinfrastruktur interessierte, schlug ein großes Integrationsprojekt vor. Die Architekten des Kunden entwickelten eine komplexe und große Plattform, die maschinelles Lernen und Datenverarbeitung umfasste und mit Kubernetes verwaltet wurde. Wir erhielten die Aufgabe, das Plattformprojekt umzusetzen, die Konnektivität der Elemente aufzubauen, die Infrastruktur aufzubauen und in Betrieb zu nehmen.

Am Ende hat alles geklappt und der Kunde ist zufrieden. Und wir kamen auf die Idee, unsere Plattform so aufzubauen, dass sie nicht nur für große Unternehmen, sondern auch für mittlere und kleine Unternehmen zugänglich ist. Das heißt, um sicherzustellen, dass Sie großartige Möglichkeiten erhalten und nicht viel Geld bezahlen.

Woraus unsere Datenverarbeitungsplattform besteht

Alle Komponenten werden zu einem Schema zusammengesetzt, das es Ihnen ermöglicht, die Plattform auf zwei oder drei Servern auszuführen. Selbstverständlich verwenden wir nur Open-Source-Software – es ist nicht schwierig, Spezialisten auf dem Markt zu finden, um sie zu warten.

Daraus besteht also die Plattform in ihrer jetzigen Form.

Block 1 – Anfängliche Datenerfassung

Wir verwenden Apache NiFi und Debezium, um Daten aus Quellen zu sammeln, und Apache Kafka, um sie zur Verarbeitung in die Warteschlange zu stellen.

Hauptziele:

  • Sammeln Sie Rohdaten aus allen verbundenen Quellen;
  • Verlieren Sie sie nicht, wenn Sie sie zur Verarbeitung übertragen.
  • die empfangene Datenmenge auszuwerten;
  • die erforderlichen Ressourcen für deren Verarbeitung und Speicherung berechnen.

Block 2 – Datenverarbeitung

Wir verwenden Apache Airflow für die Stapelverarbeitung und Apache Spark für das Streaming.

Die Hauptaufgabe des Blocks besteht darin, Daten für die Analyse vorzubereiten. Das heißt, aus Rohdaten solche Daten zu machen, auf deren Grundlage Sie Abfragen und Grafiken erstellen und die wichtigsten Geschäftsfragen beantworten können.

Block 3 – Datenspeicherung und -analyse

In diesem Block ist die Liste der Aufgaben sehr vielfältig – entsprechend ist auch die Menge der Komponenten.

Die Hauptaufgaben des Blocks:

  • Rohdatenspeicherung – Apache Hadoop;
  • Speicherung verarbeiteter Daten – Greenplum;
  • Sicherstellung der Ausführung von Abfragen basierend auf Daten – Greenplum;
  • Datenanalyse (Erstellen von Berichten und Dashboards basierend auf vorgefertigten Abfragen) – Apache Superset;
  • Sammlung von Data Marts (ermöglicht es Ihnen, einen Teil der Daten zu sehen) – Apache Airflow, ClickHouse.

Block 4 – Plattforminfrastruktur

Die Hauptaufgaben des Blocks:

  • Bereitstellung von IaC, d.h. Kontrolle und Aktualisierung von Konfigurationen von Plattformkomponenten – Ansible, Nexus;
  • Bereitstellung von CI / CD-Prozessen, d.h. Aufrechterhaltung des gesamten Zyklus, von der Entwicklung und Speicherung des Codes bis zur Auslieferung an die Produktion – Gitlab, Jenkins;
  • Überwachung des Zustands von Komponenten, ihrer Verbindungen und Plattformprozesse – eingebautes Überwachungssystem, eigene Exporter für Prometheus.

Kommunikation zwischen Plattformkomponenten

Wie das alles funktioniert

Datensammlung

Dieser Prozess wird mithilfe von Pull/Push-Modellen implementiert.

Für ihn sind folgende Eigenschaften wichtig:

  • Regelmäßigkeit – wie oft Daten empfangen werden;
  • Volumen eingehender Daten;
  • Mengen von Paketen mit diesen Daten.

Die Verbindung zu externen Datenquellen erfolgt über Apache NiFi. Zur Zwischenspeicherung von Daten verfügt die Plattform über einen Bus – Apache Kafka, an den alle Datenströme gesendet werden. Dort stehen sie in der Warteschlange, bis sich ein Handler um sie kümmert, der sie dorthin schickt, wo sie hin müssen.

Modelle zum Abrufen von Daten aus Quellen nach Komponenten werden wie folgt verteilt:

Apache Airflow „zieht“ mithilfe eines Pool-Modells (vom englischen Verb to pull – pull) Daten aus Quellen und überträgt sie direkt in den Data Lake. Wir verwenden diesen Ansatz auf der Plattform für Batching – Paketdatenübertragung.

Apache Kafka und Apache Spark verwenden ein Push-Modell (von Englisch zu push – push). Gleichzeitig sammelt Apache Nifi Daten aus externen Quellen und leitet sie als Datenbus an Kafka-Produzenten weiter. Dann geht der Stream zu Spark und wird dann zur weiteren Verwendung in den Speicher geschrieben. So funktioniert Streaming auf unserer Plattform – Daten in Echtzeit extrahieren, verarbeiten und aufzeichnen.

Unabhängig davon ist Debezium zu erwähnen, das nach dem Prinzip von CDC – Change Data Capture – arbeitet und beide Modelle, Pool und Push, verwenden kann. Dieser Ansatz beschleunigt das Streaming und die Verarbeitung, da Sie die vorhandene Datenbank nicht vollständig in das Staging-Modul „ziehen“ müssen. CDC verbindet sich mit der Datenbank, registriert Änderungen darin, sammelt nur die geänderten Felder und sendet sie an den Datenbus. Dann funktioniert alles wie ein Push-Modell.

Datenverarbeitung

Die Plattform verwendet beide Datenverarbeitungsprinzipien – ETL und ELT. Wir führen die Streaming-Verarbeitung auf Apache Spark aus, wir implementieren die Datenverarbeitungspipeline mit Spark Job. Für die Stapelverarbeitung verwenden wir Airflow, wir führen die Pipeline dafür über DAG-Dateien durch.

Datenspeicher

Daten werden in zwei Entitäten gespeichert:

  1. Datensee (Data Lake), erstellt auf Apache Hadoop.
  2. Data Warehouse ist ein auf Greenplum basierendes Data Warehouse. Greenplum ist eine clusterfähige Lösung, die auf dem kostenlosen objektrelationalen DBMS PostgreSQL basiert. Das bedeutet, dass der Speicher ohne Leistungsverlust horizontal beliebig skalieren kann. Und deshalb in Zukunft – um riesige Mengen strukturierter Daten zu speichern.

Datenvisualisierung

Das wichtigste Visualisierungstool ist Apache Superset, mit dem Diagramme und Dashboards erstellt werden können. Das Problem von Dashboards liegt jedoch in den vielen Beziehungen innerhalb der Datenbank, die die Geschwindigkeit bei der Ausführung komplexer Abfragen und der Anzeige von Informationen erheblich verringern. Daher haben wir der Plattform die Möglichkeit hinzugefügt, Data Marts zu erstellen.

Bei großen Datenmengen empfehlen wir die Verwendung von ClickHouse. Zum Beispiel, wenn Sie ein großes Unternehmen mit vielen Datenquellen haben, die verarbeitet und schnell für die Analyse vorbereitet werden müssen. Aber in der Standardplattformkonfiguration leistet Greenplum hervorragende Arbeit bei der Vorbereitung von Tabellen für die Visualisierung.

Schwierigkeiten bei der Umsetzung

Es gab Kegel und Steine ​​und Rechen. Ein paar Tipps, wie Sie das alles vermeiden können.

Komponentenversionen korrigieren

Die Versionskompatibilität kann Ihnen genug Probleme bereiten. Daher raten wir Ihnen, solche Versionen von Komponenten zu finden, die miteinander kompatibel sind, und versuchen Sie, sie nicht zu ändern.

Suchen Sie nach Versionsaktualisierungen

Nach dem Update kann die Abwärtskompatibilität verloren gehen. Wenn Sie also Versionen aktualisieren, ist alles zusammen.

Stellen Sie sich darauf ein, dass Sie etwas verfeinern müssen

Die native Verbindung zwischen den Komponenten Apache Spark und Greenplum funktionierte auf unserer Plattform nicht. Damit sie korrekt interagieren, mussten wir benutzerdefinierte Konnektoren für sie schreiben.

Dieses Erlebnis ist beschrieben in Dieser Artikel. Aber die Lösung selbst kann von github abholen.

Berücksichtigen Sie die Bedeutung der automatischen Skalierung

Nehmen wir zum Beispiel einen Online-Shop, der seine Produktpalette erweitert hat. Es kamen viel mehr Daten herein, weil die Zahl der Kunden auf der Website zunahm. Die Datenverarbeitung ist schwieriger geworden – Server haben nicht genug Rechenleistung. Skalierung ist erforderlich.

Aber Sie müssen schnell skalieren, wenn die Last zunimmt, daher kommt in diesem Fall die automatische Skalierung in den Vordergrund.

Wir haben dieses Problem gelöst, indem wir Ansible und Terraform bereitgestellt haben. Die Operation ist eine Vorlage: Es reicht aus, sie einmal herauszufinden, und das Problem ihrer Replizierbarkeit auf der Plattform wird gelöst.

Fazit

Unser Ziel war es, komplexe Systeme, die mit Daten arbeiten, kleinen und mittelständischen Unternehmen – wie zum Beispiel Gazprom – zur Verfügung zu stellen. Diese Aufgabe konnte durch eine gewisse Vereinfachung des Plattformaufbaus und die Automatisierung eines Teils der Prozesse gelöst werden.

Normalerweise verwenden kleine Unternehmen so etwas wie Google Cloud Platform und Google Analytics für Analysen. Gleichzeitig müssen Sie für die Möglichkeit bezahlen, Ihre Datenquellen, die Cloud, zu verbinden; Darüber hinaus fehlt es diesen Tools oft an Flexibilität, um spezifische Geschäftsanforderungen zu erfüllen.

Wir haben eine Lösung geschaffen, die eine typische Architektur hat und für die Aufgaben kleiner und mittlerer Unternehmen optimiert ist. Gleichzeitig ermöglicht es Plattformnutzern, eine Vielzahl heterogener Datenquellen zu konsolidieren, zu verarbeiten und zu strukturieren, nach Erkenntnissen zur Entwicklung oder Gewinnsteigerung zu suchen.

Und all dies ist öffentlich zugänglich: Sie können unsere Analyse- und Datenverarbeitungsplattform, die auf der Selectel-Infrastruktur gestartet wurde, im Demomodus unter ausprobieren Verknüpfung.

Similar Posts

Leave a Reply

Your email address will not be published.