Schnellere Zeitreihenberechnungen durch Parallelisierung

Mittwoch, 10. Januar 2018 10.01.2018 von Felix König 0 Kommentar

Wer sich mit den Prozessen der Energiewirtschaft auseinandersetzt, wird früher oder später auf den Begriff “Zeitreihe” stoßen. Das Prinzip einer Zeitreihe ist einfach: Werte, die an einer Zeitachse angeordnet sind, wie beispielsweise jährlich abgelesener Stromverbrauch. Auf dem Weg des Stroms vom Kraftwerk bis zur Steckdose befinden sich viele Akteure, und alle tauschen Daten miteinander aus. Jahresverbräuche, Echtzeitverbräuche, Prognosen, Verbrauchsaggregate – es wird an jeder Stelle mit Zeitreihen gerechnet.

Da offensichtlich Strom aus der Steckdose kommt, scheinen diese Prozesse gut genug abzulaufen. Doch gut genug kann mit fortschreitender Digitalisierung schnell unzureichend werden, oder einfach unnötige Mehraufwände und Mehrkosten verursachen. Sobald komplexe Geschäftsprozesse in Software abgebildet wurden, können diese in Bruchteilen von Sekunden abgearbeitet werden. Es eröffnet sich die Möglichkeit, beliebig viele Daten auf die Software loszulassen, ohne menschliche Arbeitszeit aufwänden zu müssen.

Nichtsdestotrotz können auch die leistungsstärksten Server an ihre Grenzen stoßen, wenn man sie ausreichend großen Datenmengen aussetzt. Schnell wird hier zu sogenannten “Batch-Jobs” gegriffen, sprich das planmäßige Ausführen lang andauernder Aufgaben, üblicherweise über Nacht. Performance is a feature - ein Grundsatz, den ich persönlich nur unterschreiben kann. Lange Wartezeiten sind nicht nur nervig, sondern können auch die Art, wie mit den Daten umgegangen wird, negativ beeinflussen. Man ist flexibler und produktiver, wenn eine Berechnung zeitnah abgeschlossen wird, anstatt die Berechnung über Nacht planen zu müssen. Deswegen sehe ich hier Verbesserungspotential.

Gut mit großen Datenmengen umgehen zu können, ist allerdings auch aus einem anderen Grund besonders wichtig. Digitalisierung hängt oft aufgrund komplett neuer Möglichkeiten mit grundlegenden Paradigmenwechseln zusammen. Zentrales Beispiel ist hierfür die Umstellung von bisher üblichen elektromechanischen Ferraris-Stromzählern auf sogenannte smart meter, sprich moderne, digitale Stromzähler, die ihre Messwerte in Echtzeit im 15-Minuten-Takt an den Messstellenbetreiber senden können. Verglichen mit der etablierten Vorgehensweise – manuelles jährliches Ablesen des Zählerstandes – wird hier der zukünftige Anstieg der Datenmenge klar. Grundlage hierfür ist nun, dass die beteiligten Systeme mit der Datenmenge schnell genug umgehen können, auch bei sehr großen Kundenbeständen. Die automatisch ausgelesenen Messwerte können dann anstelle von Prognosen zur effizienteren Planung der Netzversorgung verwendet werden. Außerdem können neue Services angeboten werden, wie beispielsweise die Echtzeit-Kontrolle des eigenen Stromverbrauchs oder programmierbare Leistungsanpassung von Geräten basierend auf aktuellen Strompreisen.

Angesichts der entsprechenden Nachfrage nach guter Performanz bei der Verrechnung von Zeitreihen ist im Rahmen meiner Bachelorarbeit ein System entstanden, welches die Berechnungsdauer von Zeitreihen-Aggregaten – wie beispielsweise das Aufsummieren der Jahresstromverbräuche aller Kunden – stark beschleunigen kann. Das System baut auf dem SOPTIM Zeitreihen-Framework auf und lässt sich demnach in bereits existierende SOPTIM Software integrieren, ohne dass der Programmcode bestehender Geschäftsprozesse angepasst werden muss.

Das ganze Geheimnis liegt nun lediglich darin, dass sich solche Berechnungsvorgänge beliebig aufteilen und Zwischenergebnisse genauso beliebig wieder zusammenführen lassen. Solche assoziativen Operationen – wie man in der Mathematik sagt – erlauben es uns, nun die Berechnung in mehreren Teilen parallel auszuführen. Berechnungszeiten können somit anstatt durch stärkere Hardware (sogenannte vertikale Skalierung) einfach durch mehr Hardware (sogenannte horizontale Skalierung) ausgeglichen werden. Besonders interessant ist dies bei Verwendung virtualisierter Hardware, meistens in Form von Cloud-Computing. Diese Systeme lassen sich nämlich im laufenden Betrieb mit meist nur wenigen Klicks umkonfigurieren, um beispielsweise mehr Rechenleistung bereitzustellen.

Soweit zumindest zur Theorie. In der Praxis ist die Rechenleistung allerdings nicht die einzige Stellschraube. Die Daten müssen zunächst von einem Speichermedium gelesen und gegebenenfalls über das Netzwerk verschickt werden. Etwas Abhilfe lässt sich mit sogenannten Lokalitätsoptimierungen schaffen, bei denen an einer Berechnung beteiligte Rechner bevorzugt die Daten verrechnen sollen, die sich auf ihren eigenen Festplatten befinden. Das spart unnötiges Versenden von Daten über das Netzwerk.

Wird letztendlich die Lesegeschwindigkeit der Festplatte zum Flaschenhals - was bei zentralen Datenspeichern wie beispielsweise klassischen relationalen Datenbanken der Fall sein kann - müsste auch diese skaliert werden. Sind vertikale Skalierungsoptionen wie RAID-Systeme oder die Verwendung von Solid State Drives (SSDs) ausgeschöpft, muss auch hier horizontal skaliert werden. Hierbei hat sich in der Big-Data-Welt sogenannte Partitionierung bewährt, sprich das Aufteilen des Datenbestandes auf mehrere Festplatten. Diese können dann parallel ausgelesen werden. Die oben beschriebene Datenlokalitätsoptimierung ist hierbei besonders wichtig. Diese Techniken sind allerdings keine Neuheit. Wie unter anderem 2004 im Paper von Google’s MapReduce beschrieben, waren Techniken wie Partitionierung und Datenlokalität bereits dort zentrale Bestandteile.

Zwar implementiert die erstellte Software keine automatisierte Partitionierung von Datenbeständen, doch ist sie datenquellagnostisch und könnte mit einer partitionierungsfähigen Datenbank wie beispielsweise Apache Cassandra betrieben werden. Hierauf lag allerdings nicht der Fokus. Messungen haben gezeigt, dass die Berechnung bereits durch die Parallelisierung alleine sehr skalierbar ist. So hat eine Testberechnung mit fünf Rechenknoten 25 % der Zeit benötigt. Konstante, nicht parallelisierbare Rechenabschnitte und Mehraufwände durch Netzwerkkoordination sorgen hier für eine Abweichung des erwarteten Bestwertes von 20 % (ein Fünftel bei fünf Knoten, oder allgemein ein n-tel für n Knoten).

Die prototypische Implementierung des Systems ist sehr leichtgewichtig ausgefallen. Sie besteht aus einer einbindbaren Bibliothek und einem installierbaren Softwarepaket. Letzteres wird auf Rechnern platziert, welche als Rechenknoten zur Verfügung stehen sollen. Wenn ein Aggregationsvorgang angestoßen wird, verbindet sich die Bibliothek mit den möglichen Rechenknoten und weist Arbeitspakete zu. Sobald alle beteiligten Knoten zu einem Zwischenergebnis gekommen sind, werden diese zu einem Endergebnis kombiniert.

Bis auf das Installieren der Rechenknoten und das Einbinden und Konfigurieren der benötigten Softwarebibliothek geschehen alle Schritte unsichtbar. Und selbst hier sind weitere Vereinfachungen und Optimierungen in Arbeit, um maximale Leistung bei minimalem Aufwand zu ermöglichen. Teile der PerformanzOptimierungen, welche während der Bearbeitungsphase meiner Bachelorarbeit implementiert wurden, wirken sich bereits jetzt positiv auf existierende Software-produkte aus.

Die horizontale Skalierbarkeit von Zeitreihenberechnungen ist ein Baustein der kontinuierlichen Verbesserung unserer Software, speziell im Bereich der Performanz. Er wird den Arbeitsprozess mit großen Mengen Zeitreihendaten für den Anwender angenehmer und schneller machen und somit die Nutzungserfahrung von SOPTIM Software nachhaltig verbessern.

Kommentar schreiben

Ihr Kontakt Stephanie Lemken Was kann ich für Sie tun?
+49 241 918 790

Direkt anrufen

Verwendung von Cookies

Cookies ermöglichen eine bestmögliche Bereitstellung unserer Dienste. Mit der Nutzung der SOPTIM-Seiten erklären Sie sich damit einverstanden, dass wir Cookies verwenden.

Weitere Informationen erhalten Sie in der Datenschutzerklärung
OK, verstanden