In-Memory â ein Satz von Konzepten zur Datenspeicherung, bei denen Daten im Arbeitsspeicher der Anwendung gespeichert werden, wĂ€hrend die Festplatte fĂŒr Backups verwendet wird. In klassischen AnsĂ€tzen werden Daten auf der Festplatte gespeichert, und der Arbeitsspeicher fungiert als Cache. Zum Beispiel fordert eine Webanwendung mit Backend zur Datenverarbeitung Daten aus dem Speicher an: sie erhĂ€lt, transformiert und ĂŒbertrĂ€gt viele Daten ĂŒber das Netz. Bei In-Memory werden Berechnungen direkt an die Daten gesendet â in den Speicher, wo sie verarbeitet werden, und das Netzwerk wird weniger belastet.

Welche weiteren Möglichkeiten bietet In-Memory und was ist dieser Ansatz, wird Wladimir Pligin â Ingenieur bei der Firma GridGain. Dieses Ăbersichtsmaterial wird Entwicklern von Backend-Webanwendungen nĂŒtzlich sein, die nicht mit In-Memory gearbeitet haben und es ausprobieren möchten oder sich fĂŒr moderne Trends in der Softwareentwicklung und Architekturdesign interessieren.
Hinweis. Der Artikel basiert auf der Transkription von Wladimirs Vortrag auf der Konferenz #GetIT Conf. Vor der EinfĂŒhrung der Selbstisolierung fĂŒhrten wir regelmĂ€Ăig Meetups und Konferenzen fĂŒr Entwickler in Moskau und St. Petersburg durch: wir diskutierten Trends, aktuelle Entwicklungsthemen, Probleme und deren Lösungen. Jetzt können keine Konferenzen stattfinden, aber es ist die richtige Zeit, um nĂŒtzliche Materialien aus der Vergangenheit zu teilen.
Wer und wie nutzt In-Memory
In-Memory wird hĂ€ufig dort eingesetzt, wo eine schnelle Interaktion mit dem Benutzer oder die Verarbeitung groĂer Datenmengen erforderlich ist.
- Banken nutzen In-Memory beispielsweise, um Verzögerungen bei der Nutzung von Anwendungen durch Kunden zu verringern oder um Kundenanalysen vor der Kreditvergabe durchzufĂŒhren.
- FinTech nutzt In-Memory, um die Leistung von Dienstleistungen und Anwendungen fĂŒr Banken zu verbessern, die die Datenverarbeitung und -analyse auslagern.Â
- Versicherungsunternehmen: zur Risikobewertung, zum Beispiel durch die Analyse von Kundendaten ĂŒber mehrere Jahre.
- Logistikunternehmen. Sie bearbeiten viele Daten, um beispielsweise die optimalen Routen fĂŒr Fracht- und Personentransporte mit Tausenden von Parametern zu berechnen und den Status der Sendungen zu verfolgen.
- Einzelhandel. In-Memory-Lösungen helfen dabei, die Kunden schneller zu bedienen und groĂe Informationsmengen zu verarbeiten: Auslieferungen, Rechnungen, Transaktionen, VerfĂŒgbarkeit von Tausenden von Produkten im Lager und die Erstellung analytischer Berichte.
- Im IoT In-Memory ersetzt traditionelle Datenbanken.
- Pharmazeutische Unternehmen nutzen In-Memory, beispielsweise um Kombinationen von Arzneimitteln zu durchlaufen.Â
Ich werde einige Beispiele nennen, wie unsere Kunden In-Memory-Lösungen nutzen und wie Sie diese bei sich implementieren können.
In-Memory als primÀre Speicherung
Einer unserer Kunden ist ein groĂer Anbieter medizinischer ForschungsausrĂŒstung aus den USA. Sie verwenden die In-Memory-Lösung als primĂ€re Datenspeicherung. Alle Daten werden auf der Festplatte gespeichert, wĂ€hrend eine Untermenge der aktiv genutzten Daten im Arbeitsspeicher gehalten wird. Die Zugriffsverfahren auf den Speicher sind standardisiert â GDBC (Generic Database Connector) und die Abfragesprache SQL.

Dies wird zusammen als In-Memory-Datenbank (IMDB) oder Memory-Centric Storage bezeichnet. Diese Klasse von Lösungen hat viele Namen, das sind nicht die einzigen.Â
Besonderheiten der IMDB:
- Die Daten, die in In-Memory gespeichert und ĂŒber SQL abgerufen werden, sind identisch mit denen in anderen AnsĂ€tzen. Sie sind synchronisiert, nur die PrĂ€sentationsweise und der Zugriff unterscheiden sich. Zwischen den Daten gibt es TransaktionsfĂ€higkeit.
- IMDB sind schneller als relationale Datenbanken, da das Abrufen von Informationen aus dem Arbeitsspeicher schneller ist als von der Festplatte.Â
- Die internen Optimierungsalgorithmen haben weniger Anweisungen.
- IMDB eignen sich fĂŒr die Verwaltung von Daten, Ereignissen und Transaktionen in Anwendungen.
IMDB unterstĂŒtzen teilweise ACID: AtomaritĂ€t, Konsistenz und Isolation. Aber sie unterstĂŒtzen keine "Dauerhaftigkeit" â beim Stromausfall gehen alle Daten verloren. Um dieses Problem zu lösen, können Snapshots verwendet werden â ein "Snapshot" der Datenbank, Ă€hnlich einem Backup einer DB auf die Festplatte, oder Transaktionen (Logs) aufgezeichnet werden, um die Daten nach einem Neustart wiederherzustellen.
FĂŒr den Aufbau ausfallsicherer Anwendungen
Stellen wir uns die klassische Architektur einer ausfallsicheren Webanwendung vor. Sie funktioniert so: Alle Anfragen werden von einem Web-Load-Balancer zwischen Servern verteilt. Dieses System ist widerstandsfÀhig, weil die Server sich gegenseitig duplizieren und im Fall von VorfÀllen abfangen.

Der Load-Balancer leitet alle Anfragen einer Sitzung strikt an einen einzigen Server. Dies ist der Mechanismus der Sticky-Sessions: Jede Sitzung wird an zu einem Server, wo sie lokal gespeichert und verarbeitet wird.Â
Was passiert, wenn einer der Server?

Server ausfÀllt? Der Dienst wird nicht beeintrÀchtigt, da die Architektur dupliziert ist. Aber wir verlieren eine Teilmenge der Sitzungen des ausgefallenen Servers. Und damit auch die Benutzer, die an diesen Sitzungen hÀngen. Zum Beispiel bestellt ein Kunde etwas und wird plötzlich aus dem Konto geworfen. Er wird unzufrieden sein, wenn er sich erneut anmeldet und feststellt, dass er alles noch einmal bestellen muss.
Das Webanwendung muss in der Lage sein, eine groĂe Anzahl von Benutzern zu unterstĂŒtzen, ohne dass es zu Verzögerungen kommt, damit sie komfortabel arbeiten können. Aber im Falle eines Ausfalls wird das Zeitintervall fĂŒr die Kommunikation mit dem Sitzungsspeicher bei jeder weiteren Anfrage immer lĂ€nger. Dies erhöht die durchschnittliche Latenz fĂŒr die anderen Benutzer. Aber sie möchten nicht lĂ€nger warten als gewohnt.
Dieses Problem kann wie bei einem anderen unserer Kunden â einem groĂen PASS-Anbieter aus den USA â gelöst werden. Er verwendet In-Memory, um Web-Sitzungen zu clusterisieren. DafĂŒr werden sie nicht lokal, sondern zentral in einem In-Memory-Cluster gespeichert. In diesem Fall sind die Sitzungen viel schneller verfĂŒgbar, da sie bereits im Arbeitsspeicher liegen.

Wenn der Server ausfÀllt, leitet der Load-Balancer die Anfragen des ausgefallenen Servers an andere Server weiter, genau wie in der klassischen Architektur. Aber es gibt einen wichtigen Unterschied: Die Sitzungen werden in einem In-Memory-Cluster gespeichert und die Server haben Zugriff auf die Sitzungen des ausgefallenen Servers.
Dieser Aufbau erhöht die Ausfallsicherheit des gesamten Systems. DarĂŒber hinaus kann man auf den Mechanismus der Sticky-Sessions ganz verzichten.
Hybride transaktional-analytische Verarbeitung (HTAP)
Normalerweise werden transaktionale und analytische Systeme getrennt gehalten. Wenn sie getrennt sind, belastet die Hauptdatenbank die Last. FĂŒr die analytische Verarbeitung werden die Daten in eine Replik kopiert, damit die analytische Verarbeitung die transaktionalen Prozesse nicht stört. Aber die Kopierung erfolgt mit Verzögerung â ohne Verzögerung ist eine Replikation nicht möglich. Wenn wir das synchron machen, wird die Hauptdatenbank ebenfalls verlangsamt und wir erzielen keinen Gewinn.
Bei HTAP funktioniert alles anders â dasselbe Datenschatz wird sowohl fĂŒr die transaktionale Last von Anwendungen als auch fĂŒr analytische Abfragen verwendet, die lange dauern können. Wenn die Daten im Arbeitsspeicher liegen, werden analytische Abfragen schneller ausgefĂŒhrt, und der Datenbankserver wird weniger belastet (im Durchschnitt).

Der hybride Ansatz âdurchbricht die Mauerâ zwischen Transaktionsverarbeitung und Analyse. Wenn wir Analysen im selben Speicher durchfĂŒhren, werden analytische Abfragen auf Daten aus dem Arbeitsspeicher ausgefĂŒhrt. Sie sind viel prĂ€ziser, besser interpretierbar und adĂ€quater.
Integration von In-Memory-Lösungen
Eine einfache (relativ) Möglichkeit â alles von Grund auf neu zu entwickeln. Wir halten die Daten auf der Festplatte, wĂ€hrend die heiĂen im Speicher liegen. Das hilft, Serverneustarts oder AusfĂ€lle zu ĂŒberstehen.
Hier gibt es zwei Hauptszenarien, wenn die Daten auf der Festplatte gespeichert sind. Im ersten möchten wir AbstĂŒrze oder regulĂ€re Neustarts des Clusters oder von Teilen ĂŒberstehen â wir möchten ihn als einfache Datenbank nutzen. Im zweiten Szenario, wenn die Datenmenge zu groĂ ist, liegt ein Teil davon im Speicher.
Wenn es nicht möglich ist, alles von Grund auf neu zu erstellen, kann In-Memory möglicherweise in die bereits bestehende Architektur integriert werden.. Aber nicht alle In-Memory-Lösungen sind dafĂŒr geeignet. Es gibt drei zwingende Voraussetzungen. Die In-Memory-Lösung muss unterstĂŒtzen:
- eine Standardverbindung zur Datenbank, die darunter liegen wird (z. B. MySQL);
- eine Standardsprache fĂŒr Abfragen, damit die Logik zum Umgang mit dem Speicher nicht umgeschrieben und verĂ€ndert werden muss;
- TransaktionalitĂ€t â das bedeutet, die Semantik der Interaktion zu bewahren.
Wenn alle drei Voraussetzungen erfĂŒllt sind, ist die Integration möglich. Wir stellen ein In-Memory-Datenraster zwischen der Anwendung und der Datenbank bereit. Jetzt werden Schreibanfragen an die untergeordnete Datenbank delegiert, wĂ€hrend Leseanfragen an die Datenbank gerichtet werden, wenn die Daten im Cache nicht vorhanden sind.

Wenn Ihnen der schnelle Zugriff auf Daten und deren Verarbeitung, beispielsweise fĂŒr die GeschĂ€ftsanalyse, wichtig ist, sollten Sie ĂŒber die Implementierung von In-Memory nachdenken. FĂŒr die Umsetzung können Sie beide Methoden bei der Planung einer neuen Architektur verwenden.
Quelle: habr.com
