Spieleentwicklung als Inspirationsquelle Innovative Architekturen für KI und Big-Data

Ein Gastbeitrag von Christian Del Monte* 7 min Lesedauer

Anbieter zum Thema

Big Data spielt in Zeiten von KI und maschinellem Lernen eine immer wichtigere Rolle. Für Software-zentrierte Systeme, die auf Ansätzen der objektorientierten Programmierung basieren, stellt dies allerdings eine Herausforderung dar. In der Gaming-Branche finden sich einige interessante Lösungsansätze.

Als hochgradig innovatives Gebiet kann die Spieleentwicklung als Inspirationsquelle für die Software-Entwicklung dienen.(Bild:  Mohamed Hassan /  Pixabay)
Als hochgradig innovatives Gebiet kann die Spieleentwicklung als Inspirationsquelle für die Software-Entwicklung dienen.

Bei der Verarbeitung von Big Data ist eine datenzentrierte Architektur unabdingbar, um das enorme Volumen, die Geschwindigkeit und die Vielfalt der Informationen zu bewältigen. Obwohl dieses Prinzip offensichtlich erscheint, ist es im Kontext der objektorientierten Programmierung (OOP) nicht selbstverständlich.

Grenzen der OOP-Ansätze

Die gängigsten OOP-Ansätze konzentrieren sich oft nicht auf die Daten als solche, sondern betrachten sie als Teil des Objektzustands zu einem bestimmten Zeitpunkt. Ein Beispiel hierfür ist die beliebte Schichtenarchitektur, die oft in unterschiedlichem Maße nach den Prinzipien des Domain Driven Design (DDD) modelliert wird.

DDD stellt die Geschäftsdomäne in den Mittelpunkt und bezieht sich auf den spezifischen Wissens- und Tätigkeitsbereich, für den die Software entwickelt wurde, einschließlich der Geschäftsregeln, Prozesse und Verhaltensweisen. In diesem Zusammenhang dienen die Daten hauptsächlich dazu, den Zustand der Domäne darzustellen und die Geschäftsvorgänge zu unterstützen.

Darüber hinaus kann sich OOP als wenig flexibel erweisen, da der Zustand und das Verhalten in den Klassen eng miteinander verknüpft sind. Wenn sich die Daten und ihre zugrunde liegenden Schemata ändern oder an neue Geschäftsanforderungen angepasst werden müssen, besteht die Gefahr, dass Klassen umgeschrieben oder neu erstellt werden müssen.

OOP-Entwurfsmuster erhöht die Flexibilität statischer Datenstrukturen

Ein Beispiel für ein UML-Klassendiagramm und ein Sequenzdiagramm für das Entwurfsmuster Visitor.(Bild:  W3sDesign_Visitor_Design_Pattern_UML.jpg /Vanderjoe / CC BY-SA 4.0)
Ein Beispiel für ein UML-Klassendiagramm und ein Sequenzdiagramm für das Entwurfsmuster Visitor.

Die Verwendung spezifischer Entwurfsmuster kann diese Starrheit verringern, indem sie dazu beiträgt, die Geschäftslogik von der Datenstruktur zu trennen und/oder die Datenstruktur dynamisch komponierbar zu machen. Ein gängiges Entwurfsmuster ist das Visitor-Pattern, das die Geschäftslogik von der Datenstruktur entkoppelt. Hierfür verwendet es sogenannte „Visitor“-Objekte, die es ermöglichen, neue Operationen hinzuzufügen, ohne die Klassen der Entity-Objekte zu ändern.

Ein Beispieldiagramm für das Entwurfsmuster Dynamic Object Model.(Bild:  sjsu.edu)
Ein Beispieldiagramm für das Entwurfsmuster Dynamic Object Model.
(Bild: sjsu.edu)

Das Dynamic Object Model (DOM) bietet auch dynamische Konfigurierbarkeit zur Laufzeit durch die Verwendung eines Metamodells, das es ermöglicht, die Struktur von Objekten zu erweitern oder zu ändern, ohne ihre Klassen neu schreiben zu müssen. Beide Muster werden auch in einem „Visitor-DOM“-Designmuster kombiniert.

Obwohl diese Entwurfsmuster die große Flexibilität von OOP demonstrieren, haben sie auch negative Auswirkungen:

  • Das Visitor-Pattern führt eine Abhängigkeit zwischen den besuchten Entity-Objekten und den „Visitor“-Objekten ein, was die Flexibilität des Systems verringert.
  • Das Dynamic Object Model wiederum ist zwar sehr flexibel, bringt aber eine höhere Komplexität bei der Verwaltung der dynamischen Beziehungen zwischen den Objekten mit sich, was sich negativ auf die Wartbarkeit des Codes auswirkt.
  • Beide Techniken führen außerdem zusätzliche Abstraktionsebenen ein, was die Softwareleistung verlangsamen kann, da es Auswirkungen auf die Speicher-Zugriffsgeschwindigkeit und CPU-Caching gibt.

Spieleentwicklung als treibende Kraft für Innovationen in der Softwareentwicklung

Eine Architektur, die Big Data effizienter verarbeiten kann, erfordert alternative Ansätze zu den in den letzten Jahrzehnten entwickelten Lösungen. Die Branche der Spieleentwicklung ist eine hervorragende Quelle dafür: Es ist ein hochgradig innovatives Gebiet, das die Grenzen der Softwareentwicklung kontinuierlich vorantreibt.

Moderne Spiele stellen enorme Anforderungen an die Hardware und erfordern effiziente Algorithmen und Datenstrukturen, um flüssige Echtzeitgrafiken zu ermöglichen. Dies hat zu Innovationen in Bereichen wie Multithreading, SIMD-Instruktionen und Cache-Optimierung geführt. Zudem wurden leistungsfähige 3D-Grafik-APIs wie DirectX und OpenGL sowie fortschrittliche Rendering-Techniken wie Raytracing und globale Beleuchtung entwickelt.

Die Gaming-Branche hat auch die Entwicklung von KI-Systemen vorangebracht. Systeme zur Pfadfindung, Entscheidungsbäume und neuronale Netze für Spieleragenten haben zu Fortschritten im Bereich der KI und des maschinellen Lernens beigetragen.

Der ECS-Architekturmuster

Ein besonders bemerkenswerter Beitrag der Spieleentwicklung zur Softwarearchitektur ist das Entity Component System (ECS). Dieses Architekturmuster wurde vom Data Oriented Design (DOD) inspiriert und basiert auf der Trennung von Daten (Komponenten) und der Verhaltenslogik (Systeme). Innerhalb der Entity-Component-System-Architektur werden Entitäten zu einfachen Identifikatoren.

Ein Beispiel für ein Entity Component System (ECS)(Bild:  Unity)
Ein Beispiel für ein Entity Component System (ECS)
(Bild: Unity)

Die Struktur ermöglicht eine bessere Datenlokalität und Cache-Nutzung, was insbesondere für Big-Data-Anwendungen von Vorteil ist. Der komponentenbasierte Ansatz erleichtert das Hinzufügen, Entfernen und Ändern von Datenstrukturen zur Laufzeit und unterstützt die parallele Datenverarbeitung, was zu einer Leistungssteigerung bei Big-Data-Workloads führt. Die genannten Eigenschaften qualifizieren das ECS-Architekturmuster als flexible und effiziente Lösung für die moderne Softwareentwicklung.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Cloud Computing

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Das ECS-Architekturmuster bietet mehrere Vorteile für den Umgang mit Big Data:

  • Trennung von Daten und Logik ermöglicht eine bessere Datenlokalität und Cache-Nutzung
  • Komponenten-basierter Ansatz erleichtert das Hinzufügen, Entfernen und Ändern von Datenstrukturen zur Laufzeit
  • Systeme können parallel auf Datenkomponenten zugreifen, was die Leistung bei Big Data-Workloads verbessert
  • Hohe Kohäsion und lose Kopplung durch strikte Trennung von Verantwortlichkeiten

Experiment zur Evaluierung des ECS-Ansatzes

Die Einführung eines Entity Component System (ECS) im Kontext von Big Data ist zweifellos mit Herausforderungen verbunden, kann aber die Betriebseffizienz verbessern, indem die Speicherverwaltung und die Leistung optimiert werden und eine neue Antwort auf die Variabilität der Schemata und die kontinuierlichen Anpassungsanforderungen der Analysepipelines gegeben wird.

In einem Experiment wird untersucht, ob das ECS in der Lage ist, die operative Logik klar von den Daten zu trennen und gleichzeitig die Betriebseffizienz im Kontext von Big Data zu verbessern. Der Code für die Ausführung des Experiments ist auf GitHub unter folgendem Link verfügbar: https://github.com/cdelmonte-zg/ecs-for-big-data.

Drei vereinfachte Softwarelösungen zur Betrugserkennung bei Finanztransaktionen, die auf unterschiedlichen Architektur- und Designmustern basieren, wurden implementiert und verglichen, um Komplexität und Leistungsfähigkeit zu bewerten:

  • ECS-OOP-Lösung: Basiert auf dem Entity-Component-System im OOP-Paradigma.
  • ECS-funktionale Lösung: Basiert auf dem Entity-Component-System im DOD-Paradigma.
  • Schichtenarchitektur + Visitor-DOM Design Pattern Lösung: Kombiniert das Visitor Pattern und das Dynamic Object Model (DOM) in einer Schichtenarchitektur, um die Flexibilität von ECS zu bieten.

Für jede Lösung wurden Python-Skripte erstellt, die den Betrugserkennungsprozess implementieren. Diese Skripte wurden dann mit Radon analysiert, um die zyklomatische Komplexität zu bewerten. Zusätzlich wurden Performance-Tests durchgeführt, um die durchschnittlichen Ausführungszeiten zu messen, wobei die Prozesse isoliert wurden, um genaue Ergebnisse zu gewährleisten und Interferenzen zwischen den Tests zu minimieren. Die Ergebnisse sind in der nachstehenden Tabelle zusammengefasst:

Lösung Durchschnittliche
zyklomatische
Komplexität
Durchschnittliche
Ausführungszeit (s)
für 100.000 Testdaten
Durchschnittliche
Ausführungszeit (s)
für 500.000 Testdaten
Durchschnittliche
Ausführungszeit (s)
für 1.000.000 Testdaten
ECS-OOP 1.0 9,66247174 89,6456137 300,299488
ECS-funktional 1.0 8,87341613 89,8852031 295,687468
Visitor-Dom 01. Mrz 114,175368 625,746348 1345,66638

Die Lösungen ECS-OOP und ECS-funktional weisen alle eine zyklomatische Komplexität der Stufe A auf, was auf einfache Implementierungen hinweist. Die Lösung Visitor + DOM hat eine etwas höhere Komplexität (1,3), bleibt aber ebenfalls in der Kategorie A und ist somit beherrschbar, wenn auch komplexer.

Ergebnisse des Experiments.(Bild:  Christian Del Monte, GitHub)
Ergebnisse des Experiments.

Hinsichtlich der Ausführungszeit ist die ECS-Funktionale Lösung am effizientesten. Die ECS-OOP-Lösung weist eine ähnliche Effizienz auf. Die Visitor-DOM-Lösung hat die höchste Ausführungszeit aufgrund der zusätzlichen Komplexität, die die Effizienz reduziert. Die vollständigen Berichte sind im GitHub-Repository des Autors zu finden.

Schlussfolgerungen

Die durchgeführten Experimente haben gezeigt, dass alle untersuchten Lösungen hinsichtlich ihrer Komplexität handhabbar sind. Die ECS-Lösungen überzeugen durch ihre Flexibilität und Leistungsfähigkeit. Der ECS-funktionale Ansatz eignet sich insbesondere für übersichtliche Projekte mit geringer Komplexität und hoher Performance.

Für komplexe und dynamische Projekte wird die ECS-OOP-Lösung empfohlen, da sie ein ausgereiftes Management der Verhaltenslogik und der Daten bietet. Die Kombination von Modularität und Wartbarkeit gewährleistet eine leichte Wartbarkeit des Systems sowie dessen langfristige Skalierbarkeit.

In der Gesamtheit lässt sich festhalten, dass sich die ECS-Architektur für moderne Softwareentwicklungsprojekte im Kontext von Big Data als wertvolle Option erweist, da sie sich durch Flexibilität und Leistungsfähigkeit auszeichnet. Die klare Trennung von Daten und Verhaltenslogik ermöglicht eine effiziente Gestaltung von Projekten sowie eine bessere Anpassung an zukünftige Anforderungen. Die Integration von ECS sowohl in funktionale als auch in objektorientierte Programmiersysteme (OOP) ermöglicht Entwicklern eine effiziente Bewältigung der Herausforderungen, die sich aus Big Data und maschinellem Lernen ergeben.

* Über den Autor
Christian Del Monte (adesso SE) ist Softwarearchitekt und -ingenieur mit mehr als 20 Jahren Erfahrung. In verschiedenen Projekten im B2B- und B2C-Bereich hat er mit einer Vielzahl von Softwarearchitekturen gearbeitet, die mit unterschiedlichen IT-Technologien und Frameworks umgesetzt wurden. Sein besonderes Interesse gilt Data Lakes, DevOps und hochverfügbaren, ereignisgesteuerten Architekturen.

Bildquelle: adesso SE

(ID:50058543)