Persistenz für Microservices?

Tooltipp: MicroStream

Gerald Kammerer

© Zarya Maxim Alexandrovich/Shutterstock.com

Der heutige Tooltipp wirft ein Schlaglicht auf MicroStream: Zur Speicherung von Daten ist es eine leichtgewichtige und performante Alternative zu JPA. Und es gibt eine Reihe weiterer Vorteile.

Wer Daten in Java speichern möchte, benötigt ein ORM Framework wie Hibernate und ein relationales Datenbanksystem wie MySQL. Da Festplattenzugriffe und der Datentransfer über das Netzwerk sowie permanentes OR-Mapping im Hintergrund viel Performance kosten, kommt meist noch ein Data-Cache wie Ehcache dazu. Außerdem muss der Entwickler das Datenmodell in der Datenbank anlegen und seine Entity-Klassen korrekt auf das Datenbankmodell mappen. JPA mit einem darunterliegenden monolithischen Datenbankserver ist für viele Anwendungsfälle zu schwergewichtig, besonders wenn es um Microservices geht, die Daten speichern sollen. Hier verspricht MicroStream eine leichtgewichtige und hochperformante Java-native Persistence. Beliebige Java-Objektgraphen lassen sich speichern und dynamisch laden. Die Engine gibt dabei keine eigene Datenstruktur vor, sie persistiert die Java-Objektgraphen so, wie sie auf dem Heap liegen. Ein rechenzeitintensives Mapping entfällt.

Der Objektgraph im RAM repräsentiert eine Datenbank. Dazu gehört jeweils ein Storage, der an einem beliebigen Ort liegen kann und aus gewöhnlichen Dateien besteht. Zur Transaktionssicherheit: Bei jedem Schreibvorgang werden die Daten im Storage hinten angehängt. Geht bei der Speicherung etwas schief, werden bereits geschriebene Datenfragmente verworfen, was einem Rollback bei einem relationalen System entspricht.

MicroStream kann mit allen gängigen Java-Typen und beliebigen Objektmodellen umgehen. Man muss weder Annotations setzen noch spezielle Interfaces implementieren oder von einer speziellen Superklasse ableiten. Beim Laden werden überwiegend einzelne Objektreferenzen mit Lazy Loading nachgeladen und in den Objektgraphen im RAM gemergt. Der Storage kann um ein Vielfaches größer sein als der RAM, er wird nur durch die Festplattenkapazität begrenzt. Das Speichermanagement liegt bei der JVM, damit in der Hand des Entwicklers. Man muss jedoch darauf achten, wie viele Objekte man in den Speicher lädt, damit es nicht zu einer Out of Memory Exception kommt.

Lesen Sie auch: Daten schemafrei mit Hibernate in PostgreSQL speichern

Abfragen werden auf dem Objektgraphen durchgeführt. Mit Java 8 Streams lassen sich auch große und komplexe Objektgraphen in Mikrosekunden durchsuchen. Mit Parallel Streams und nach JIT-Compileroptimierung sind Abfragen im Nanosekundenbereich möglich. Die Struktur des Objektgraphen kann frei modelliert werden und sollte spätere Suchvorgänge berücksichtigen.

Ein großes Problem früherer Ansätze war die Änderung bestehender Klassen. Diese führte dazu, dass sich Objekte in der Anwendung von den persistierten Objekten im Storage unterschieden. MicroStream bietet zur Laufzeit ein dynamisches Type-Mapping. Einfache Typen werden von der Engine automatisch gemappt, für komplexere kann man eigene Type Mapper schreiben.

Durch die Append-Strategie, Klassenänderungen, fehlgeschlagene Transaktionen etc. wird Datenmüll von einem GC-Prozess nach JVM-Vorbild regelmäßig beseitigt. Schreib- und Leseoperationen können in MicroStream parallel ablaufen, was bei entsprechender Hardware einen sehr hohen Datendurchsatz ermöglicht.

Kernaufgabe der Engine ist es, Java-Objektgraphen hocheffizient zu speichern und dynamisch zu laden. Mit MicroStream ersetzt der Java-Anwendungsserver den konventionellen Datenbankserver. Der Objektgraph repräsentiert die Datenbank, die direkt im Hauptspeicher der Anwendung liegt. Die eigene Businesslogik ersetzt das Datenbankmanagementsystem und muss sich um Validierungen, Concurrency und Schnittstellen nach außen kümmern, es gibt keinen klassischen Datenbankadmin.

MicroStream ist eine interessante Alternative, wenn der Einsatz von JPA zu aufwendig ist für die Speicherung von Meta- oder temporären Daten bei Microservices und Anwendungen, die Daten echtzeitnah verarbeiten müssen. Die Entwicklung verteilter Anwendungen ist derzeit aufwendig. Das soll sich mit dem geplanten MicroStream Cluster ändern. Nach Herstellerangaben ist MicroStream bereits seit vier Jahren in businesskritischen Projekten in der Versicherungsbranche im Einsatz. Seit September ist es offiziell verfügbar und auch für kommerziellen Einsatz lizenzkostenfrei.

Geschrieben von
Gerald Kammerer

Gerald Kammerer arbeitet seit über fünfzehn Jahren mit Java und entwickelt als Freelancer Enterprise-Applikationen für Industrieunternehmen. Seit knapp zehn Jahren beschäftigt er sich intensiv mit Webentwicklung und Eclipse-Plug-ins. Gerald Kammerer ist als freier Autor für verschiedene Fachmagazine bekannt.

Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: