eine bedeutende Veröffentlichung des Systems zur verteilten Ereignisverarbeitung , das durch den Wechsel zu einer neuen Architektur besticht, die in Java implementiert ist, anstelle der zuvor verwendeten Programmiersprache Clojure.
Das Projekt ermöglicht eine garantierte Verarbeitung verschiedener Ereignisse in Echtzeit. Storm kann beispielsweise zur Analyse von Datenströmen in Echtzeit, zur Ausführung von Aufgaben im maschinellen Lernen, zur Durchführung kontinuierlicher Berechnungen sowie zur Implementierung von RPC, ETL und vielem mehr eingesetzt werden. Das System unterstützt die Clusterbildung, die Erstellung von ausfallsicheren Konfigurationen und den Modus der garantierten Datenverarbeitung und bietet eine hohe Leistung, die ausreicht, um über eine Million Anfragen pro Sekunde auf einem Clusterknoten zu verarbeiten.
Die Architektur von Storm unterstützt die Integration mit verschiedenen Warteschlangensystemen und Datenbanktechnologien. Storm ist darauf ausgelegt, unstrukturierte, ständig aktualisierte Datenströme zu empfangen und zu verarbeiten, wobei beliebig komplexe Verarbeitungsprogramme und eine Sektionierung zwischen verschiedenen Berechnungsphasen ermöglicht werden. Das Projekt wurde an die Apache-Community übergeben, nachdem Twitter die Firma BackType übernommen hatte, die ursprünglich das Framework entwickelt hat. In der Praxis wurde Storm bei BackType verwendet, um die Reflexion von Ereignissen in Mikrobblogs zu analysieren, indem neue Tweets und die darin enthaltenen Links in Echtzeit abgeglichen wurden (beispielsweise wurde bewertet, wie externe Links oder Ankündigungen auf Twitter von anderen Nutzern weiterverbreitet werden).
Die Funktionalität von Storm wird mit der Plattform Hadoop verglichen, wobei der wesentliche Unterschied darin besteht, dass die Daten nicht in einem Speicher abgelegt werden, sondern extern zugeführt und in Echtzeit verarbeitet werden. Storm verfügt über keine eingebaute Schicht zur Organisation eines Speichers, und analytische Abfragen werden auf die ankommenden Daten angewendet, bis sie abgebrochen werden (während in Hadoop zeitintensive MapReduce-Aufgaben eingesetzt werden, arbeitet Storm mit der Idee von kontinuierlich ausgeführten 'Topologien'). Die Ausführung der Handler kann auf mehrere Server verteilt werden — Storm verteilt die Arbeit an den Streams automatisch auf verschiedene Knoten im Cluster.
Ursprünglich wurde das System in der Programmiersprache Clojure entwickelt und läuft innerhalb der JVM (Java Virtual Machine). Im Apache-Projekt wurde eine Initiative gestartet, um Storm auf einen neuen Kern, der in Java geschrieben ist, zu migrieren, dessen Ergebnisse in der Version Apache Storm 2.0 vorgestellt werden. Alle wesentlichen Komponenten der Plattform wurden in Java neu geschrieben. Die Unterstützung für die Erstellung von Handlern in Clojure bleibt erhalten, wird jedoch jetzt in Form von Bindings angeboten. Für den Betrieb von Storm 2.0.0 ist Java 8 erforderlich. Das Modell der Mehrfachverarbeitung wurde vollständig überarbeitet, was zu In der neuen Version wird auch eine neue typisierte API für Streams angeboten, die es ermöglicht, Handler unter Verwendung von Operationen im Stil der funktionalen Programmierung zu definieren. Die neue API wurde über der bestehenden Basis-API implementiert und unterstützt die automatische Zusammenführung von Operationen zur Optimierung ihrer Verarbeitung. In der API für Windowing wurden Unterstützung für die Speicherung und Wiederherstellung von Zuständen im Backend hinzugefügt.
In der neuen Version wurde ein neuer typisierter API-Streams-Typ eingeführt, der es ermöglicht, Handler mithilfe von Operationen im Stil der funktionalen Programmierung festzulegen. Die neue API basiert auf der vorhandenen Basisk API und unterstützt die automatische Zusammenführung von Operationen zur Optimierung deren Verarbeitung. Im API Windowing für Fensteroperationen wurde die Unterstützung für das Speichern und Wiederherstellen von Zuständen im Backend hinzugefügt.
Im Job-Scheduler für Handler wurde die Unterstützung für die Berücksichtigung zusätzlicher Ressourcen bei Entscheidungsprozessen, die über CPU und RAM hinausgehen, implementiert, einschließlich Netzwerkkonfigurationen und GPU. Es wurden zahlreiche Verbesserungen zur Integration mit der Plattform vorgenommen.
Das Zugriffssteuerungssystem wurde erweitert, wobei die Möglichkeit zur Erstellung von Administratorgruppen und zur Delegierung von Token hinzugefügt wurde. Zudem wurden Verbesserungen in der SQL-Unterstützung und bei Metriken implementiert. Im Administrationsinterface sind neue Befehle zur Fehlerbehebung des Clusterzustands verfügbar. Anwendungsgebiete von Storm:
Echtzeitverarbeitung von neuen Datenströmen oder Datenbankaktualisierungen;
- Kontinuierliche Berechnungen: Storm kann kontinuierliche Abfragen ausführen und laufende Datenströme verarbeiten, indem es die Ergebnisse in Echtzeit an den Client übermittelt.
- Kontinuierliche Berechnungen: Storm kann kontinuierliche Abfragen durchführen und laufende Streams verarbeiten, während die Verarbeitungsergebnisse in Echtzeit an den Client übermittelt werden.
- Verteilte Remote-Verfahren (RPC): Storm kann verwendet werden, um Parallelität bei der Ausführung ressourcenintensiver Anfragen zu gewährleisten. Eine Aufgabe („Topologie“) in Storm stellt eine über Knoten verteilte Funktion dar, die auf den Empfang von Nachrichten wartet, die verarbeitet werden müssen. Nach dem Empfang einer Nachricht verarbeitet die Funktion diese im lokalen Kontext und gibt das Ergebnis zurück. Ein Beispiel für den Einsatz von verteiltem RPC kann die parallele Verarbeitung von Suchanfragen oder die Durchführung von Operationen auf großen Mengen von Datensätzen sein.
Eigenschaften von Storm:
- Einfache Programmiermodell, das die Verarbeitung von Daten in Echtzeit erheblich vereinfacht;
- Unterstützung aller Programmiersprachen. Es gibt Module für die Sprachen Java, Ruby und Python, und die Anpassung an andere Sprachen ist dank eines sehr einfachen Kommunikationsprotokolls, das etwa 100 Zeilen Code benötigt, problemlos möglich;
- Ausfallsicherheit: Um einen Datenverarbeitungsauftrag zu starten, muss eine Jar-Datei mit dem Code erstellt werden. Storm verteilt diese Jar-Datei automatisch über die Knoten des Clusters, verbindet die zugehörigen Prozessoren und organisiert die Überwachung. Nach Abschluss des Auftrags wird der Code automatisch auf allen Knoten deaktiviert.
- Horizontale Skalierbarkeit. Alle Berechnungen erfolgen parallel, und bei steigendem Datenaufkommen genügt es, neue Knoten an das Cluster anzuschließen.
- Zuverlässigkeit. Storm garantiert, dass jede eingehende Nachricht mindestens einmal vollständig verarbeitet wird. Eine Nachricht wird nur dann ein einziges Mal verarbeitet, wenn es bei der Verarbeitung durch alle Prozessoren keine Fehler gibt. Bei Problemen werden die fehlgeschlagenen Verarbeitungsversuche wiederholt.
- Geschwindigkeit. Storm-Code ist auf hohe Leistung ausgelegt und verwendet für schnellen asynchronen Nachrichtenaustausch das System .
Quelle: opennet.ru
