dark

Kostenminimierung durch Nutzung von Cloud-Speicher mit Spring-Data-Eclipse-Store

Johannes Rabauer

Mit Hilfe von Spring Data und EclipseStore können massive Kosten für Datenspeicherung in der Cloud eingespart werden. Wie das funktioniert, zeigt folgender Artikel durch die Spring-Data-Eclipse-Store-Bibliothek.

Früher oder später muss jede Spring-Anwendung Daten speichern. Und natürlich ist der erste und einfachste Schritt die Nutzung von Spring Data JPA. Entwickler können Ihre Datenspeicherung einrichten, ohne zu wissen, welche relationale Datenbank Sie in der Produktion verwenden werden. So können sie einfach mit dem Programmieren beginnen, ohne sich darüber Gedanken zu machen.

Das ist der einfachste und bequemste Weg, Daten zu speichern (in einer relationalen Datenbank wie PostgresDB), doch in der Cloud-Umgebung ist dies auch ein teurer Weg. Die Preise bei AWS RDS beginnen bei 27€/Monat mit tiny-Instanzen und haben immer feste, monatliche Kosten, unabhängig von der Nutzung.

Eclipse Store

Relationale Datenbanken sind für lange Laufzeiten optimiert. Sie brauchen eine gewisse Zeit zum Starten und laufen dann gewöhnlich mindestens einige Tage lang. Dann wird jede Anfrage innerhalb von Millisekunden bearbeitet.

Die Gründer von EclipseStore (ehemals MicroStream) wollten einen anderen Ansatz verfolgen: Sie ermöglichen das Starten und Verwalten der Datenbank in einer nativen Java Applikation.

Das entspricht genau der Cloud-Philosophie: Alles nur nach Bedarf und in Abhängigkeit zur Arbeitslast.

Ein solcher Ansatz bedeutet, dass keine Berechnungen durchgeführt werden, wenn sie nicht benötigt werden. Keine Kosten, wenn es keine Nachfrage gibt.

Auch wenn für EclipseStore keine Server erforderlich sind, benötigt es dennoch Speicherplatz, um die persistierten Daten abzulegen und zu lesen. Normalerweise geschieht dies auf der Festplatte, aber mit ein wenig Konfiguration kann EclipseStore die Daten bei verschiedensten Cloud-Anbietern speichern, einschließlich AWS S3, Azure Storage, Oracle Cloud Object Storage und IBM COS. (alle unterstützten Anbieter ansehen)

Datenspeicher überdenken – Good Times Bad Times

EclipseStore speichert Java-Objekte als Binärdaten. Anstatt also Java POJOs auf eine Tabellenstruktur abzubilden wie JPA, werden die Daten schnell und effizient serialisiert. Dies stellt Entwickler vor ein großes, anfängliches Problem: Sie müssen die Art und Weise, wie die Speicherung funktioniert, neu überdenken. Überdenken, was ihnen ihr ganzes Leben lang über Datenbanken beigebracht wurde. Überdenken, wann und was gespeichert werden soll.

Das ist nicht nur sehr unangenehm, sondern erfordert auch viel Zeit, um sich daran zu gewöhnen.

Ein weiteres Merkmal von EclipseStore ist, dass alle Änderungen an den Live-Daten vorgenommen werden. Das bedeutet, dass alle Änderungen immer im gesamten System propagiert werden. Sie können die Daten von vor der Änderung nicht (einfach) wieder laden.

Mit anderen Worten: Es gibt keine Arbeitskopien (Working copy) der Java Objekten. Dies verbessert die Leistung, da nur die minimal erforderlichen Schritte zum Speichern von Daten durchgeführt werden, kann aber insbesondere bei Anwendungen mit mehreren Threads ein Problem darstellen.

Mit EclipseStore arbeitet die Anwendung direkt auf den Java Objekten im Arbeitsspeicher

Spring-Integration

Aber was wäre, wenn Sie das Beste aus beiden Welten haben könnten: Die abstrakten Repositories von Spring Data JPA und die schnelle Serialisierung mit Cloud-Speichern Ihrer Wahl?

An dieser Stelle empfehle ich XDEVs Spring-Data-Eclipse-Store-Bibliothek. Mit dieser Bibliothek können Sie das Spring Data-Pattern von Repositories nutzen und EclipseStore als Datenspeicher verwenden.

Damit werden zwei Probleme gelöst, die Entwickler mit EclipseStore haben:

  1. Es ist kein Umdenken bei der Speicherung erforderlich. Genau wie in Spring Data JPA haben Sie Ihre Repositories für Ihre verschiedenen Java-Klassen und Ihre Anwendung fragt nur Daten über diese Einstiegspunkte ab bzw. speichert sie.
  2. Jedes Mal, wenn Daten abgefragt werden, wird eine Arbeitskopie dieser Daten erstellt. Das bedeutet, dass verschiedene Threads verschiedene Arbeitskopien des selben Objekts verwenden, die gewünschten Änderungen vornehmen und erst durch das Zurückspeichern der Arbeitskopie die Daten wieder zusammenführen können.
Mit Spring-Data-Eclipse-Store arbeitet die Applikation auf Arbeitskopien der Java Objekte

Verwendung

Spring-Data-Eclipse-Store lässt sich durch das Hinzufügen von drei Codeschnipseln hinzufügen:

  1. Fügen Sie die Abhängigkeit mit der neuesten Version in Ihre pom.xml ein: https://github.com/xdev-software/spring-data-eclipse-store/releases/latest#Installation
  2. Fügen Sie die @EnableEclipseStoreRepositories-Annotation zu Ihrer @SpringBootApplication-Annotation hinzu.
  3. EclipseStore verwendet Reflection, um die Serialisierung zu handhaben. Aus diesem Grund müssen wir die folgenden JVM-Argumente hinzufügen:
    --add-opens=java.base/java.lang=ALL-UNNAMED
    --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
    --add-opens=java.base/java.util=ALL-UNNAMED
    --add-opens=java.base/java.time=ALL-UNNAMED

Wenn Sie Ihre Spring Repositories bereits erstellt haben, können Sie Ihre Anwendung sofort starten. Um ein Repository zu erstellen, müssen Sie lediglich eine Schnittstelle erstellen, die ein Repository-Interface erweitert:

import org.springframework.data.repository.CrudRepository;
public interface CustomerRepository extends CrudRepository<Customer, String>

(aus CustomerRepository.java)

Mit minimalem Aufwand wird also die Nutzung der Spring-Data-Eclipse-Store-Bibliothek als Drop-in replacement ermöglicht.

Fazit

Die Spring-Data-Eclipse-Store-Bibliothek hilft, ein schnelles und vielseitiges Speichersystem mit gewohntem Spring-Data-JPA-Verhalten einzurichten.

Dies kann die Entwicklung beschleunigen und eine Menge Geld in der Cloud sparen.

Mehr Informationen gibt es im Repository unter https://github.com/xdev-software/spring-data-eclipse-store.

Total
0
Shares
Previous Post

Bewährte Praktiken für CI/CD Pipelines

Related Posts