Hatte es mit Apache Storm? Heron stürzt zur Rettung

Letztes Jahr hat Twitter zwei Bomben abgeworfen. Erstens würde Apache Storm in der Produktion nicht mehr verwendet. Zweitens hatte es es durch ein einheimisches Datenverarbeitungssystem, Heron, ersetzt.

Trotz der Veröffentlichung eines Papiers über die Architektur von Heron blieb die Alternative von Twitter zu Storm in den Rechenzentren von Twitter verborgen. Das hat sich letzte Woche geändert, als Twitter Heron unter einer Open-Source-Lizenz veröffentlichte. Was ist Heron und wo passt es in die Welt der Datenverarbeitung im Maßstab?

Heron ist eine DAG-Datenverarbeitungs-Engine (Direct Acyclic Graph) und ein weiterer Eintrag in einem sehr überfüllten Bereich. Aber Heron ist kein "Schau, ich auch!" Lösung oder der Versuch, DAG-Engines in das Big-Data-Äquivalent von FizzBuzz zu verwandeln.

Heron entstand aus echten Bedenken, die Twitter mit seiner großen Bereitstellung von Storm-Topologien hatte. Dazu gehörten Schwierigkeiten bei der Profilerstellung und Argumentation für Storm-Mitarbeiter bei der Skalierung auf Daten- und Topologieebene, die statische Natur der Ressourcenzuweisung im Vergleich zu einem System, das auf Mesos oder YARN ausgeführt wird, mangelnde Unterstützung des Gegendrucks und vieles mehr.

Obwohl Twitter Apache Spark oder Apache Flink hätte übernehmen können, hätte dies das Umschreiben des gesamten vorhandenen Codes von Twitter erforderlich gemacht. (Vergessen Sie nicht, dass Twitter Storm länger als alle anderen verwendet hat und BackType, Storms Schöpfer, bereits 2011 erworben hat, bevor es Open Source war.) Stattdessen verfolgte Twitter einen anderen Ansatz: ein neues Stream-Verarbeitungs-Framework mit einer Storm-kompatiblen API .

An diesem Punkt unseres Durchgangs durch ein neues Framework würde ich normalerweise einige Beispiele durchgehen, um Ihnen zu zeigen, wie sich das Codieren im Framework anfühlt, aber Heron hat wenig Sinn - Sie schreiben Storm-Bolzen und -Tupel genauso wie du würdest mit Storm. Alles, was Sie tun müssen, um Ihren Storm-Code auf Heron auszuführen, ist, diesen Abschnitt zu den Abhängigkeiten Ihrer pom.xml hinzuzufügen:

 com.twitter.heron

 heron-api

 SNAPSHOT

 compile

 com.twitter.heron

 heron-storm

 SNAPSHOT

 compile

Dann entfernen Sie Ihre Storm-Code- und Clojure-Plugin-Abhängigkeiten. Neukompilieren und Ihr Code wird auf Heron ausgeführt, ohne dass weitere Änderungen erforderlich sind. Einfach! (Meistens jedenfalls, aber wir werden darauf zurückkommen.)

Operativ läuft die aktuelle Implementierung von Heron auf Apache Mesos und verwendet Apache Aurora, das von Twitter entwickelte Mesos-Planungsframework (Überraschung!). Seit der Umstellung aller Storm-Topologien auf Heron konnte Twitter die für die Topologien bestimmten Hardwareressourcen um den Faktor drei reduzieren und gleichzeitig den Durchsatz erhöhen und die Latenz bei der Verarbeitung verringern - nicht schlecht.

Vielleicht ist einer der interessantesten Aspekte von Heron, dass Code dafür in Java (oder Scala) geschrieben wird und die webbasierten UI-Komponenten in Python geschrieben werden, den kritischen Teilen des Frameworks, dem Code, der die Topologien verwaltet und Netzwerkkommunikation sind überhaupt nicht in einer JVM-Sprache geschrieben.

Im Herzen von Heron finden Sie Code in einer Sprache, die Sie vielleicht nicht erwarten: C ++. Ich denke, dies ist ein Aspekt der Big-Data-Welt, von dem wir in den kommenden Jahren mehr sehen werden. 

Die Apache Storm-Betreuer haben viele Elemente ihres ursprünglichen Clojure-Codes zugunsten von Java-Neuimplementierungen entfernt, und das Apache Spark-Projekt generiert derzeit Java-Code im laufenden Betrieb, um die DataFrame-Verarbeitung zu beschleunigen. Aber beide sind immer noch an die JVM gebunden - und die JVM hat Probleme im Maßstab. Verstehen Sie mich nicht falsch, die JVM ist eine erstaunliche Kreation, die sich seit 20 Jahren bewährt hat. Wenn Sie jedoch auf Computern mit sehr viel RAM und enormen Datenmengen arbeiten, treten Probleme mit der Speicherbereinigung auf, egal was passiert ausgefallenes Sammlerschema, das Sie verwenden.

Ab diesem Zeitpunkt sieht die Rückkehr zu einer Sprache wie C ++ ansprechend aus. Zum Beispiel hat Scylla, eine C ++ - Neuimplementierung von Apache Cassandra, den zehnfachen Durchsatz von Cassandra, ohne eine der GC-Pausen, für die Cassandra bei großen Bereitstellungen berüchtigt ist. Ich bin ziemlich zuversichtlich, dass sich Herons Ansatz bald auf andere Frameworks ausweiten wird. Dies kann durch den Versuch von Project Panama unterstützt werden, die Schnittstelle zwischen Java und anderen Sprachen zu verbessern.

Angesichts der Tatsache, dass Heron weniger Ressourcen benötigt und mehr Durchsatz und weniger Latenz als Apache Storm bietet, sollten Sie jetzt alle Ihre Topologien auf Heron übertragen, ja? Vielleicht. Heron ist derzeit an Mesos gebunden. Wenn Sie also keine Mesos-Infrastruktur haben, müssen Sie diese ebenfalls einrichten, was kein kleines Unterfangen ist. Wenn Sie die DRPC-Funktionen von Storm nutzen, sind sie in Heron veraltet.

Auf der positiven Seite ist, dass Heron seit mehr als einem Jahr alle Verarbeitungsanforderungen von Twitter in der Produktion ausführt, sodass es in der Lage sein sollte, alles zu handhaben, was Sie darauf werfen können. Außerdem weist Twitter darauf hin, dass Heron bei Microsoft und anderen Fortune 500-Unternehmen verwendet wird, sodass Sie relativ sicher sein können, dass es bestehen bleibt.

Auf der anderen Seite stand Storm nicht still. Das Apache Storm-Team könnte sich mit Twitter's Beschreibung von Heron als "nächste Generation von Apache Storm" streiten. Während Twitter an Heron arbeitete, erreichte Apache Storm 1,0 - was Unterstützung für Gegendruck, verbesserte Debugging- und Profiling-Optionen, eine Verringerung der Latenz um 60 Prozent und eine bis zu 16-fache Geschwindigkeitsverbesserung umfasst.

Darüber hinaus fügt Storm 1.0 den Schrittmacher hinzu, einen Daemon zum Abladen des Heartbeat-Datenverkehrs von ZooKeeper, wodurch größere Topologien vom berüchtigten ZooKeeper-Engpass befreit werden. Die Geschwindigkeitsverbesserungen von Heron werden anhand des abweichenden Storm 0.8.x-Codes gemessen, nicht anhand der aktuellen Version. Wenn Sie bereits auf Storm 1.0 migriert sind, werden Sie möglicherweise keine wesentlich bessere Verbesserung gegenüber Ihren aktuellen Storm-Topologien feststellen, und es kann zu Inkompatibilitäten zwischen der Implementierung neuer Funktionen wie der Unterstützung des Gegendrucks zwischen Storm und Heron kommen.

Alles in allem glaube ich nicht, dass Heron die Akzeptanz von Datenverarbeitungs-Frameworks wie Apache Spark, Apache Flink oder Apache Beam erheblich beeinträchtigen wird. Ihre übergeordneten Abstraktionen und APIs bieten eine viel entwicklerfreundlichere Erfahrung als die untergeordneten Storm / Trident-APIs. Ich glaube jedoch, dass die Mischung von JVM-Code mit Nicht-JVM-Modulen für die kritischen Pfade in Zukunft ein beliebterer Ansatz sein wird, und in diesem Aspekt zeigt Heron uns alle Richtungen, in die wir in den Monaten und Jahren reisen werden kommen.