Reaktive Systeme

Antwortbereit, robust und elastisch: Wer diese Anforderungen an seine Anwendungen stellt, ist mit Reaktiven Systemen gut beraten.

Warum Reaktive Systeme?

Heutige Anwendungen und Systemlandschaften sind von Haus aus von verteilter Natur: Selbst eine einfache Webanwendung besteht üblicherweise aus einem Webserver, einem Applikationsserver und einer Datenbank – ohne dabei Infrastrukturkomponenten wie Caches, Reverse-Proxies, Router oder Firewalls zu berücksichtigen.

Darüber hinaus sind heute nur noch wenige Anwendungen komplett eigenständig. Gewöhnlich benötigt eine Anwendung Daten oder Dienste von anderen, was in mannigfaltigen Integrationen zwischen den verschiedenen Anwendungen resultiert. Diese sind meist Online-Interfaces, weil periodische Aktualisierungen in der Regel nicht den Anforderungen entsprechen.

Schließlich bestehen moderne Anwendungen üblicherweise aus einer Vielzahl kleinerer Dienste, die auf zahlreichen Plattformen und Geräten laufen und über das Netzwerk miteinander kommunizieren.

Solche Anwendungen stellen uns vor die folgenden Herausforderungen:

  • Mögliche Fehler lassen sich aufgrund der zahlreichen zusammenarbeitenden Teile kaum vorhersagen
  • Die Netzwerkkommunikation stellt eine zusätzliche Fehlerquelle dar
  • Dennoch müssen diese Anwendungen hochverfügbar sein und auf mögliche Fehler so reagieren, dass die Anwender diese nicht oder zumindest nicht als störend wahrnehmen
  • Zusätzlich müssen solche Anwendungen in der Lage sein, sich dynamisch an unterschiedliche Lastbedingungen anzupassen und dabei ihre rasche Antwortbereitschaft aufrechterhalten

Reaktive Systeme adressieren genau diese Herausforderungen: Sie ermöglichen, Anwendungen aus zahlreichen, über das Netzwerk zusammenarbeitenden Teilen zu erstellen, die hochverfügbar sind, kurze Antwortzeiten bieten, robust gegenüber möglichen Fehlern sind und sich dynamisch an unterschiedliche Lastbedingungen anpassen.

Was sind Reaktive Systeme?

Reaktive Systeme werden im Reaktiven Manifest (http://www.reactivemanifesto.org) mit den folgenden Qualitäten beschrieben:

  • Antwortbereit – das System antwortet unter allen Umständen zeitgerecht, solange dies überhaupt möglich ist
  • Robust – das System bleibt selbst bei Ausfällen von Hard- oder Software antwortbereit
  • Elastisch – das System bleibt auch unter sich ändernden Lastbedingungen antwortbereit
  • Nachrichtenorientiert – das System verwendet asynchrone Nachrichtenübermittlung zwischen seinen Komponenten

Die erste Eigenschaft – Antwortbereitschaft – stellt das übergeordnete Ziel Reaktiver Systeme dar, denn es ist die Grundlage für Funktion und Benutzbarkeit. Robustheit und Elastizität sind die wichtigsten nichtfunktionalen Eigenschaften eines Systems, welche dessen Antwortbereitschaft überhaupt erst ermöglichen. Die letzte Eigenschaft – Nachrichtenorientierung – stellt die bevorzugte Möglichkeit dar, die anderen Eigenschaften zu gewährleisten und damit Reaktive Systeme zu implementieren, weil dadurch sichergestellt werden kann, dass die Systemkomponenten lose gekoppelt und voneinander isoliert sind und Fehler an übergeordnete Komponenten übermittelt werden können.

Wie können wir Reaktive Systeme implementieren?

Aktuell stellen Erlang/OTP sowie Akka die populärsten Optionen zur Implementierung von Reaktiven Systemen dar. Für Java-Entwickler ist Akka die naheliegende Wahl, weil Erlang eine eigene virtuelle Maschine und ein eigenes Ökosystem hat sowie als dynamisch typisierte und rein funktionale Sprache eine steile Lernkurve aufweist.

Akka hingegen ist in Scala geschrieben, einer objekt-funktionalen Programmiersprache für die Java Virtual Machine (JVM), und bietet gleichwertige APIs für Java und Scala. Das bedeutet, dass Akka ohne Abstriche von Java aus verwendet werden kann, falls das gewünscht oder erforderlich ist. Genauso gut kann Scala eingesetzt werden, was in der Regel zu deutlich weniger und besser verständlichem Code führt.

Akka ist ein etabliertes Open-Source-Projekt unter der Apache-Lizenz, das maßgeblich von der Firma Lightbend vorangetrieben wird, die auch kommerzielle Produkte wie Support, Monitoring-Werkzeuge etc. anbietet. Darüber hinaus gibt es ein lebendiges und umfangreiches Ökosystem rund um Akka sowie zahlreiche „externe“ Contributoren.

Zusammengefasst besteht Akka aus einer Menge von aufeinander aufbauenden Bibliotheken zur Erstellung von Reaktiven Systemen. Akkas Kern ist – wie in Erlang – eine Implementierung des Aktorenmodells. Dieser kann direkt zur Implementierung von Reaktiven Systemen verwendet werden und stellt die Basis für die verschiedenen höheren Bibliotheken dar, wie z.B. Akka Cluster Sharding, Akka Streams oder Akka HTTP.

Neben Akka stellen Reactive Streams eine weitere wichtige Komponente zur Erstellung von Reaktiven Systemen dar. Dabei geht es um die Spezifikation eines Standards für die Steuerung von Datenströmen über asynchrone Grenzen hinweg mittels nicht-blockierendem Rückdruck. Reactive Streams ermöglichen nicht nur die Interoperabilität zwischen den verschiedenen Implementierungen, sondern definieren auch deren wesentliche Eigenschaften – angesichts der zunehmenden Bedeutung von Datenströmen ist es nicht verwunderlich, dass Reactive Streams möglicherweise Bestandteil von Java 9 werden. Aktuell gibt es bereits diverse kompatible Implementierungen, u.a. Akka Streams, Vert.x, Reactor und RxJava.

Nehmen Sie Kontakt mit uns auf.

Jetzt informieren!

Ansprechpartner

Heiko Seeberger
Fellow

Zum Experten-Profil

Das könnte Sie auch interessieren

SCHULUNGEN

Fast Track to Scala

SCHULUNGEN

Advanced Scala