2018-09-24 05:21:17

IoT benötigt hochskalierbare Datenbanken

Jodok Batlogg

Jodok Batlogg

IoT-Anwendungen verarbeiten Daten, die von Millionen von Sensoren und Geräten erzeugt werden und analysieren sie in Echtzeit, um Connected-Cars, vernetzte Maschinen oder Smart-Cities intelligent zu überwachen und zu steuern. Dieser extensive Datenbank-Workload stellt Entwickler entsprechender Lösungen vor neue Herausforderungen. Ohne eine Datenbank, die beliebig skalierbar ist, geht es nicht; von Jodok Batlogg *)

Datenbankmanagementsysteme müssen im IoT-Umfeld bis zu Millionen von Datenpunkten pro Sekunde aufnehmen, die Daten in quasi Echtzeit verarbeiten, eine Vielzahl unterschiedlicher Datenstrukturen behandeln, komplexe Abfragen wie Zeitreihen, Geodaten, Textsuche und maschinelles Lernen ausführen sowie Prozessdaten on-the-edge oder in der Cloud bearbeiten.

Tatsächlich bedeutet IoT in der Praxis einen neuen Höhepunkt der Datenlast. Gartner Research weist etwa darauf hin, dass IoT gänzlich neue neue Herausforderungen in Bezug auf Datenvolumen, Daten- und Abfragekomplexität und -integration stellt. Ebenso hat TPC, ein unabhängiger Standardsetter für Benchmarks von Datenbankmanagementsystemen, einen neuen Mixed-Workload-Benchmark für IoT erstellt, der aufzeigt, welche neuen spezifischen Anforderungen sich ergeben.

Die Datenbank CrateDB wurde mit der Vision entwickelt, IoT-Daten ohne Limitierungen zu verarbeiten. Dafür waren richtungsweisende DBMS-Designentscheidungen notwendig, um den neuen IoT-Workload zu unterstützen.

Architektur: Verteilt, Shared-Nothing, Container-Nativ

CrateDB arbeitet in einer Shared-Nothing-Architektur als Cluster von identisch konfigurierten Servern (Nodes), die sich nahtlos und automatisch aufeinander abstimmen. Die Ausführung von Schreib- und Abfrageoperationen wird automatisch auf die Knoten im Cluster verteilt.

So kann die Datenbankkapazität bzw. der Durchsatz einfach durch das Hinzufügen oder Entfernen der Knoten erhöht oder verringert werden. Dabei ist einfache Nutzung in der Anwendung in der Konzeption mit erheblichen Entwicklungsanstrengungen verbunden. So wurde etwa das Sharding, die Replikation (für Fehlertoleranz) und das Rebalancing der Daten automatisiert, sobald sich die Größe des Clusters ändert. CrateDB wurde in der Container-Ära geboren und ermöglicht die einfache Skalierung und Verwaltung über Container-Orchestrierungsplattformen wie Docker oder Kubernetes in einer Microservice-Umgebung.

Zugang: Standard SQL

Crate hat sich für ANSI 99 SQL als Datenzugriffssprache entschieden, um Millionen von Entwicklern den Zugang zu CrateDB zu vereinfachen. SQL ist bekannt, leistungsstark und macht die Integration einfach. CrateDB ist mit den meisten SQL-Tools kompatibel und kann über das PostgreSQL-Wireprotokoll, JDBC, ODBC und eine REST-Schnittstelle angeschlossen werden.

Eine verteilte SQL-Engine ist komplex. Um eine funktionale ANSI-SQL-Kompatibilität mit Unterstützung für Joins, Aggregationen, Indizes, Unterabfragen, benutzerdefinierte Funktionen usw. zu entwickeln, bedurfte es großer Innovationen. Darüber hinaus wurde SQL um zusätzliche Features erweitert, wie sie bei NoSQL üblich sind, wie etwa Volltextsuche, geospatiale Abfragen und verschachtelte JSON-Objektspalten.

 Speicherung und Indizierung: NoSQL-Stil

Dadurch verbindet CrateDB die Vertrautheit von SQL mit der Skalierbarkeit und Datenflexibilität von NoSQL-Datenbanken. Dies wurde erreicht, indem die verteilte SQL-Engine auf der Grundlage einer eigenen sowie anderer Open-Source-NoSQL-Technologien anstelle von traditionellen relationalen DBMS-Techniken erweitert wurde.

CrateDB verwendet Bits verschiedener Open-Source-Projekte als Grundlage:

●      Lucene für Speicherung und Indizierung, einschließlich Textsuche und Geodaten,

●      Elasticsearch für masterloses Clustering und Transaktionsprotokollierung,

●      Netty für asynchrone, ereignisgesteuerte, vollmaschige Vernetzung zwischen Knoten.

CrateDB ist in eine einzige Binärdatei gepackt, die einfach zu installieren und zu starten ist, zB mit „docker run crate“

Schema: Dynamisch

Ein weiterer Vorteil der SQL-/NoSQL-Architektur von CrateDB ist die Flexibilität des Schemas. Traditionelle relationale Schemata sind starr und ihre Veränderung ist nicht trivial. In CrateDB kann man einerseits zur Laufzeit jederzeit Spalten hinzufügen bzw wenn JSON-Dokumente gespeichert werden, können diese Struktur sofort ändern.

Beispielsweise sammelt ein globaler Verpackungshersteller Daten von 900 verschiedenen Sensortypen auf jeder seiner Produktionslinien. In SQL Server wurden diese Daten in 900 verschiedenen Tabellen gespeichert, also eine pro Sensortyp. Nach dem Wechsel zu CrateDB können nun alle Messwerte in nur einer Tabelle abgelegt werden. Abfragen werden nun 40-mal schneller ausgeführt, bei geringeren Cloudkosten

Schreiben: Hochgeschwindigkeits-Inserts

IoT-Systeme nehmen maschinengenerierte Datenströme auf. Crate hat sich für ein konsistentes, nicht blockierendes Dateneinfügungsmodell entschieden. Dadurch kann CrateDB zehntausende von Datenpunkten pro Sekunde pro Knoten einfügen und gleichzeitig die Daten abfragen. In echten Produktionsumgebungen sind so schon Millionen Inserts pro Sekunde erzielt worden.

Auch die Dauerhaftigkeit und Konsistenz der Daten sind wichtig. Crate hat Maßnahmen ergriffen, um diese so wenig wie möglich zu beeinträchtigen. Um die Langlebigkeit der Daten zu gewährleisten, wurde ein Write-ahead-Logging implementiert. Um die Konsistenz zu gewährleisten, enthält CrateDB eine Versionierung der Datensätze, eine optimistische Gleichzeitigkeitskontrolle und eine Einstellung der Aktualisierungsfrequenz auf Tabellenebene, die die Konsistenz der CrateDB-Daten in regelmäßigen Abständen (alle n Millisekunden) erzwingt.

Abfragen: Echtzeit über In-Memory-Spaltenindizierung

Echtzeit-Datenbanken benötigen normalerweise alle Daten im Hauptspeicher, sogenannte In-Memory Datenbanken, aber das schränkt die Datenmenge ein, die Sie verwalten können, weil die Datenmenge im Arbeitsspeicher Platz finden muss Die Lösung für eine Echtzeit-Performance ohne Datenvolumenbeschränkungen war die Implementierung von speicherresidenten, spaltenförmigen Feldcaches auf jedem Knoten. Die Caches sagen der Abfrage-Engine, ob es auf diesem Knoten Datensätze gibt, die den Abfragekriterien entsprechen, und wo sich die Datensätze befinden. Da der Speicherbedarf nur mit der Kardinalitat der Daten steigt, und diese bei Logs, IoT Daten etc gering ist, kann in-Memory Perfomance auch auf riesigen Datenmengen erreicht werden, obwohl günstige Cloud-Instanzen oder Computer verwendet werden. 

CrateDB ist Open Source plus eine Enterprise Edition und steht unter crate.io zum Download bereit. Auch eine fully managed DBaaS ist verfügbar.

Was kommt als nächstes?

IoT entwickelt sich weiter und damit auch die CrateDB. Sie geht mittlerweile in die dritte Version, und mit der Crate Machine Data Platform können kommerzielle Betreiber von IoT-Plattformen und Unternehmen Maschinendaten schnellstmöglich nutzen, indem der zeitaufwändige Aufbau der Sensorenanbindungen und der Betrieb eines Echtzeit-Datenmanagementsystems stark vereinfacht wird. So verhilft die Plattfrom Kunden zu einem Vorteil bei der Time-to-Value, indem der Zeit- und Kostenaufwand für den Aufbau dieser Dateninfrastruktur weitgehend beseitigt werden. Crate unterstützt Kunden dabei, Lösungen schneller auf den Markt zu bringen und profitabler zu betreiben. Die Plattform ist ein Cloud-Native-Stack und als gehostetes Angebot auf Microsoft Azure oder auch als On-Premise-Lösung verfügbar.

*) Autor Jodok Batlogg:

Jodok Batlogg gründete die CRATE Technology GmbH im Jahr 2013 gemeinsam mit Christian Lutz und ist als Chief Technology Officer und Executive Director im Unternehmen tätig. Zuvor war Jodok Chief Technology Officer der deutschen Netzwerke "MeinVZ" und "SchülerVZ" sowie Chief Executive Officer bei Lovely Systems.

JB

Druckversion

Zum Thema