Professional
Nachrichtenzentrale
Entwurf und Implementierung reaktiver Systeme mit Quarkus - Teil 4
Günther, M. und Fresow, B., JavaMagazin, 6/2023, p. 87-93
Abstract: [german]: Im vierten und letzten Teil unserer Reihe wollen wir mehrere reaktive Applikationen nachrichtenbasiert über Apache Kafka miteinander kommunizieren lassen. Spannend ist dabei, welche Werkzeuge und Quarkus an die Hand gibt, um eine möglichst einfache und nahtlose Integration zu ermöglichen.
Netzwerker in Aktion
Entwurf und Implementierung reaktiver Systeme mit Quarkus - Teil 3
Günther, M. und Fresow, B., JavaMagazin, 4/2023, p. 86-92
Abstract: [german] Reaktive Programmierung bietet ein modernes, deklaratives Programmierparadigma, das mit seinem starken Fokus auf die asynchrone Datenverarbeitung verspricht, viele moderne Entwicklungs- und Skalierungsprobleme zu lösen. Im ersten Teil dieser Serie haben wir uns mit den theoretischen Grundlagen dieser Entwicklungsweise beschäftigt. Im zweiten Artikel haben wir mit Mutiny eine Bibliothek kennen gelernt, die ein simples, intuitives API für die reaktive Programmierung zur Verfügung stellt. In diesem Artikel steigen wir nun in die reaktive Anwendungsentwicklung mit Quarkus ein.
Mutiny: intuitiv verständlich?
Entwurf und Implementierung reaktiver Systeme mit Quarkus - Teil 2
Günther, M. und Fresow, B., JavaMagazin, 3/2023, p. 83-88
Abstract: [german] In jüngster Zeit hat sich so manche Bibliothek zur reaktiven Programmierung etabliert, die die Lücke zwischen Benutzerfreundlichkeit und Ausdrucksstärke versucht zu schließen. Eine dieser Bibliotheken ist Mutiny. Mutiny wirbt damit, eine intuitive, nachrichtenorientierte Schnittstelle in die reaktive Programmierung anzubieten und unterstützt Integrationsmöglichkeiten für Vert.x als auch Quarkus. Grund genug, dass wir uns Mutiny im Detail anschauen und erkunden, welche Abstraktionen uns die Bibliothek an die Hand gibt.
Stets zu Diensten
Entwurf und Implementierung reaktiver Systeme mit Quarkus - Teil 1
Günther, M. und Fresow, B., JavaMagazin, 2/2023, p. 82-89
Abstract: [german] Von aktuellen Web Services wird erwartet, dass sie eine ständig wachsende Menge an Daten, Nutzern und Interaktionen performant und ressourcenschonend abarbeiten können. Da die Weiterentwicklung moderner Hardware deutlich langsamer voranschreitet als die Größe der Datenmengen, wird die Lösung in einer Verteilung der Arbeitslast auf viele Maschinen sowie in Programmierparadigmen gesucht, die diese Verteilung ermöglichen und Ressourcen effizient nutzen. Seit einigen Jahren hat sich ein reaktiver Programmieransatz als vielversprechender Weg etabliert, der zunehmend Einzug in das Java-Ökosystem hält. Im ersten Teil der Artikelserie widmen wir uns zunächst den Konzepten reaktiver Programmierung und reaktiver Anwendungen.
Worteinbettungen mit Deeplearning4J NLP
Günther, M., JavaMagazin, 6/2022, p. 60-68
Abstract: [german] KI-gestützte Verfahren mit Anwendungsfokus auf Natural Language Processing (NLP) verarbeiten natürlichsprachliche Texte, um daraus neue Erkenntnisse zu gewinnen. Den Verfahren liegt ein neuronales Netz zugrunde und dieses Netz kann zunächst mit syntaktischen Elementen in natürlicher Sprache nicht besonders viel anfangen. Eine Möglichkeit ist es, ein Wort als Vektor zu verstehen, der in einen mehrdimensionalen Vektorraum, auch Wortvektorraum, eingebettet ist. Den zugehörigen Vektor nennt man Wortvektor oder auch Worteinbettung. Eine Worteinbettung repräsentiert linguistische Merkmale wie Wortbedeutung oder Wortstellung in einer für Computer zugänglichen, weil rechenbaren, Form.
Deeplearning4j NLP unterstützt das Erzeugung von Worteinbettungen und liefert dafür eine Implementierung des word2vec-Algorithmus. Neben word2vec (Google) sind GloVe (Stanford) und fastText (Facebook) ebenfalls populäre Verfahren. All diese Algorithmen verfolgen das gleiche Ziel, nämlich einen möglichst bedeutungsvollen Ort innerhalb des Wortvektorraumes für ein gegebenes Wort zu finden, auf Basis dessen man neue Informationen ableiten kann. Im Rahmen dieses Artikels beschäftigen wir uns ausschließlich mit word2vec, dessen Konzept und Arbeitsweise und zeigen, wie man ein Modell mit word2vec trainieren kann. Das trainierte Modell setzen wir dann ein um zu einem gegebenen Wort diejenigen Wörter zu finden, die in ähnlichem Kontext auftreten. Wir werden sehen, dass dies die Grundlage für eine Reihe von spannenden Anwendungsfällen darstellt.
Hexagonale Architektur mit JPMS und Spring
Günther, M. und Fresow, B., JavaMagazin, 12/2021, p. 36-42
Abstract: [german] Egal, ob es um die Neu- oder Weiterentwicklung von Applikationen geht: Die elementaren Fragen zur optimalen Architektur und Umsetzungsstrategie sollten initial stets die Punkte Wie? und Womit? beantworten. Der Lösungsraum ist bei beiden Fragen im Java-Ökosystem seit langer Zeit gewaltig, die zugrunde liegenden Prinzipien sind jedoch in der Regel klar. Wir möchten einer modularen Architektur folgen, die test- und wartbar ist und eine technologische Basis nutzt, die diesem Ideal Vorschub leistet und eine möglichst große Reife und Verbreitung besitzt. In diesem Beitrag zeigen wir, warum die Wahl einer hexagonalen Architektur mit JPMS und Spring eine valide Möglichkeit ist, eine wartbare Architektur im Java-Ökosystem zu etablieren.
Pulsar Schema Registry
Einführung in Apache Pulsar - Teil 3
Günther, M. und Fresow, B., JavaMagazin, 2/2021, p. 70-80
Abstract: [german] Wann immer zwei Systeme über ein Netzwerk Daten miteinander austauschen ist die elementare Frage in welchem Format dies stattfinden soll, unabhängig ob dieser Austausch synchron oder asynchron stattfindet. Bei Message-basierten Systemen hat diese Fragestellung einen besonderen Charakter, da die teilnehmenden Systeme voneinander so wenig Kenntnis wie möglich haben sollten und die Datenmodellierung somit eine besonders hohe Priorität besitzt. Im Rahmen dieses Artikels möchten wir diskutieren welche Möglichkeiten Apache Pulsar von Haus aus bietet um mit Hilfe der enthaltenen Schema Registry einen performanten, zukunftssicheren und einfachen Austausch von Nachrichten zu ermöglichen.
Das Persistenzmodell von Apache Pulsar
Einführung in Apache Pulsar - Teil 2
Günther, M. und Fresow, B., JavaMagazin, 11/2020, p. 70-77
Abstract: [german] Egal, ob es sich um ein Event-getriebenes System oder um die Verteilung von Massendaten handelt: Robuste, performante und skalierfähige Datenhaltung ist für eine hochperformante Messaging-Lösung von elementarer Bedeutung. Im zweiten Teil unserer Artikelreihe zum Thema Apache Pulsar möchten wir daher unser Augenmerk auf das Persistenzmodell legen, das Pulsar mit Hilfe von Apache BookKeeper zur Verfügung stellt, und die grundlegenden Konzepte sowie einige mögliche Anwendungsfälle und Beispiele vorstellen.
Grundlagen und Konzepte von Apache Pulsar
Einführung in Apache Pulsar - Teil 1
Günther, M. und Fresow, B., JavaMagazin, 10/2020, p. 52-58
Abstract: [german] Messagingsysteme sind in aller Munde, und während sich in den letzten Jahren besonders Apache Kafka sehr großer Beliebtheit erfreut, gibt es mit Apache Pulsar jetzt einen neuen Konkurrenten. Angetreten ist der mit dem selbstbewussten Versprechen, die Stärken des hochperformanten Streamingansatzes von Kafka mit zusätzlichen Garantien und Funktionen abzurunden. Zum Auftakt der Artikelreihe werden wir uns Pulsar von der technisch-konzeptionellen Seite nähern und mit praktischen Beispielen zeigen, wie Pulsar in einem Projekt eingesetzt werden kann.
Anwendungsentwicklung mit dem Axon Stack
Günther, M., Entwickler Magazin - Spezial Vol. 24 - DDD, 2020, p. 88-96
Abstract: [german] Obgleich das Zielbild sowohl ein Monolith als auch eine Microservice-Architektur sein kann - das Axon Framework offeriert einen leichtgewichtigen Ansatz zur Implementierung Event-basierter Anwendungen. Dabei stützt sich das Framework auf gängige Muster aus dem Domain-driven Design und begünstigt die Umsetzung einer Anwendung nach dem Architekturprinzip Command Query Responsibility Segregation (CQRS) und der Persistenzstrategie Event Sourcing. Durch diese Flexibilität und die Tatsache, dass das Axon Framework bestens mit dem Spring Framework integriert ist und damit ein quasistandardisiertes Programmiermodell unterstützt, ist es für den modernen Java-Entwickler einen Blick wert.
Die Java-Elefantenrunde: Java 14 unter der Lupe
JavaMagazin, 05/2020, p. 28-32
Abstract: [german] Pünktlich zum Erscheinen von Java 14 hat das JavaMagazin / JAXenter sich mit Experten aus der Softwareindustrie zum Themenschwerpunkt der Ausgabe unterhalten. Das gemeinsame Interview mit den Kollegen Oliver B. Fischer, Markus Günther, Dr. Heinz Kabutz, Tim Riemer, Jens Schauder und Michael Vitz geht der Frage nach dem Lieblingsfeature von Java 14 nach, thematisiert der Wünsche der Experten für nachkommende Java-Versionen und stellt schlussendlich auch die Frage, ob sich Java anderen Programmiersprachen annähert.
Die Online-Fassung des Interviews mit Markus Günther ist unter der nachstehenden Publikation kostenlos abrufbar.
Java 14: Interview mit Markus Günther
erschienen am 20. März 2020 auf JAXenter
Abstract: [german] Pünktlich zum Erscheinen von Java 14 haben wir uns mit Markus Günther, Java-Experte und freiberuflicher Softwareentwickler und -architekt, über die Features der neuen JDK-Version unterhalten, die ihm besonders gut gefallen. Im Interview gibt er zudem Auskunft über seine Wünsche für Java 15 und Antwort auf die Frage, ob Java anderen JVM-Sprachen wie Kotlin und Scala mittlerweile ähnlicher wird.
Click here for an english translation of this interview.
Anwendungsentwicklung mit dem Axon Stack
Günther, M., JavaMagazin, 02/2020, p. 30-38
Abstract: [german] Obgleich das Zielbild sowohl ein Monolith als auch eine Microservice-Architektur sein kann - das Axon Framework offeriert einen leichtgewichtigen Ansatz zur Implementierung Event-basierter Anwendungen. Dabei stützt sich das Framework auf gängige Muster aus dem Domain-driven Design und begünstigt die Umsetzung einer Anwendung nach dem Architekturprinzip Command Query Responsibility Segregation (CQRS) und der Persistenzstrategie Event Sourcing. Durch diese Flexibilität und die Tatsache, dass das Axon Framework bestens mit dem Spring Framework integriert ist und damit ein quasistandardisiertes Programmiermodell unterstützt, ist es für den modernen Java-Entwickler einen Blick wert.
Der Weg zu einer modularisierten Java-Anwendung
Günther, M., JavaMagazin, 03/2019, p. 10-18
Abstract: [german] Mit der Veröffentlichung von Java 11 als Long-Term-Support-Version hält das Java Platform Module System (JPMS) endgültig Einzug in die Realität eines jeden Java-Entwicklers. Grund genug, die Möglichkeiten des JPMS in einem praxisorientierten Beitrag zu betrachten. Im Fokus des Artikels steht die Migration einer kleinen Beispielanwendung hin zu einer modularisierten Applikation unter Verwendung des JPMS.
Gemeinsam stark - Property-based Testing mit ScalaCheck
Günther, M., JavaMagazin, 06/2018, p. 29-36
Abstract: [german] Mit ScalaCheck erhält Property-based Testing Einzug in die Scala-basierte Entwicklung und ergänzt den Werkzeugkasten des Entwicklers um eine mächtige Testmethodik. Dabei ist der Property-basierte Ansatz keineswegs als Ablösung zu beispielbasiertem Testen mittels Unit-Tests zu verstehen, sondern als Ergänzung, insbesondere da Property-based Tests allgemeiner formuliert sind und üblicherweise andere Klassen von Fehlern identifizieren. In diesem Beitrag diskutiere ich, was man unter Property-based Testing versteht, wie es sich von traditionellen Unit-Tests unterscheidet und wie man Property-based Testing sinnvoll in die eigene Testbasis integrieren kann.
Nachrichten aus dem Archiv
Teil 3: Eventgestützte Applikationen mit Spring Kafka
Günther, M. und Fresow, B., JavaMagazin, 03/2018, p. 90-98
Abstract: [german] Viele reale Anwendungen lassen sich ganz natürlich über Event Sourcing abbilden. Eine Bank setzt beispielsweise bei einer Überweisung den Kontostand des Empfängers nicht auf einen dedizierten Wert in der Datenbank, sondern persistiert die Tatsache, dass ein Geldeingang erfolgt ist. Der tatsächliche Kontostand ergibt sich dann aus der Folge der gespeicherten Events für das Konto. Nachdem wir uns in den ersten beiden Beiträgen zu diesem Leitthema mit einer Einführung in Spring Kafka und der Verarbeitung von Massendaten gewidmet haben, beantworten wir in diesem Artikel, warum sich Apache Kafka als Event Store für eine Event Sourced Applikation eignet und wie wir eine solche Applikation mit Spring Kafka auf eine solide technische Basis stellen können.
Briefe vom Windrad
Teil 2: Eventgestützte Applikationen mit Spring Kafka
Günther, M. und Fresow, B., JavaMagazin, 02/2018, p. 80-87
Abstract: [german] Wer schon einmal ganz nah vor einer Windkraftanlage gestanden hat, dem ist die Dimension eines solchen Giganten erst wirklich bewusst. Allerdings verstecken sich neben den gewaltigen Bauteilen auch viele kleine im Inneren eines Windrads: Sensoren zum Beispiel. Jeder einzelne von ihnen, ob Drehzahl- oder Schwingungssensor, produziert ständig Daten. Zusammen wird aus den Informationen eine wahre Datenflut. Mithilfe von Spring Kafka lassen sich die Daten im großen Stil verarbeiten.
Frühlingsbotschaften
Teil 1: Eventgestützte Applikationen mit Spring Kafka
Günther, M. und Fresow, B., JavaMagazin, 01/2018, p. 73-77
Abstract: [german] Apache Kafka erfreut sich als Messaging-Middleware immer größerer Beliebtheit und Verbreitung in der Entwicklercommunity. Dem trägt jetzt auch Spring Rechnung und bietet mit Spring Kafka eine sehr einfache Möglichkeit, Kafka in eine Spring-basierte Applikation zu integrieren. Zum Auftakt der Artikelserie möchten wir anhand praktischer Beispiele zeigen, wie Spring Kafka für die Entwicklung eventgestützter Microservices verwendet werden kann.
Datenserialisierung mit Apache Avro
Günther, M., JavaSPEKTRUM, 5/2017, p. 35-38
Abstract: [german] Apache Avro ist ein Werkzeug zur Datenserialisierung, das in jüngster Zeit deutlich an Popularität und Verbreitung zugenommen hat. Durch ein kompaktes Binärformat und evolvierbare Schemata spielt Avro seine Stärken insbesondere im Umfeld von Big-Data-Anwendungen oder Fast-Data-Architekturen aus. Darüber hinaus kann man Avro ebenso als vollwertiges RPC-Framework benutzen. Dieser Beitrag diskutiert die Vorzüge von Avro gegenüber anderen Serialisierungslösungen und illustriert anhand von Code-Beispielen die Integration von Avro zur Datenserialisierung sowie seine Nutzung als RPC-Framework.
Streaming-Applikationen mit Kafka Streams
Günther, M., JavaSPEKTRUM, 4/2017, p. 54-58
Abstract: [german] Kafka Streams ermöglicht eine Stream-orientierte Verarbeitung von Daten, die über Apache Kafka zur Verfügung gestellt werden. Dieser Beitrag stellt Kafka Streams als ergänzende Bibliothek in einer Kafka-gestützten Architektur vor, diskutiert die Herausforderungen bei der Modellierung und zeigt anhand von Codebeispielen, wie man unter Verwendung der domänenspezifischen Sprache Kafka Streams DSL Daten transformieren, aggregieren und anreichern kann.
Skalierfähige, asynchrone Nachrichtenverarbeitung mit Apache Kafka
Günther, M., JavaSPEKTRUM, 3/2017, p. 48-51
Abstract: [german] Apache Kafka ist eine hochgradig verteilte Lösung für das Publish-Subscribe Messaging, die für eine effiziente Datenannahme und -verteilung mit niedriger Latenz optimiert ist. Das macht das System zu einem geeigneten Kandidaten für die Umsetzung von Streaming-Architekturen, in denen der Fokus auf einer kontinuierlichen Verarbeitung von eingehenden Daten liegt. Apache Kafka bricht dabei mit den Ansätzen traditioneller Messaging-Systeme, um diese Ziele zu erreichen. Dieser Beitrag stellt Kafkas innovativen Ansatz vor und zeigt anhand von Code-Beispielen, wie man einen einfachen Nachrichtenkanal aufsetzt.
Strömungslehre - Streams und Collections in Java 8
Günther, M. and Lehmann, M., heise Developer, 2014/03/21
Abstract: [german] Die wesentliche Neuerung von Java 8 ist die Erweiterung der Sprachmittel um Lambda-Ausdrücke. Sie erlauben einen funktionalen Programmierstil in der ja eigentlich rein objektorientierten Sprache. Dieser Artikel zeigt, wie sich Lambda-Ausdrücke und Patterns wie Filter-Map-Reduce in den ebenfalls neuen Streams nutzen lassen, wenn auf Collections operiert wird.
Keine Einbahnstraße: WebSockets in Java EE 7
Grammes R. and Günther, M. and Lehmann, M., JavaSPEKTRUM, 6/2013, p. 30-33
Abstract: [german] Das WebSocket-Protokoll ist eine leichtgewichtige Alternative zu HTTP und ermöglicht die bidirektionale Kommunikation zwischen einem Client und einem Server. Die neue Java-Enterprise-Edition Java EE 7 enthält mit JSR 356 eine standardisierte Java-Bibliothek für WebSocket-Clients und -Server, die der Artikel vorstellt.
Ausdrucksstark: Lambda-Ausdrücke in Java 8
Günther, M. and Lehmann, M., JavaSPEKTRUM, 3/2013, p. 8-11
Abstract: [german] Das JDK 8 erweitert die Java-Sprache erneut um moderne Sprachfeatures. Mit dem Java Specification Request 335 werden sogenannte Lambda-Ausdrücke eingeführt, die insbesondere in der Welt der funktionalen Programmiersprachen auch als anonyme Funktionen bekannt sind. Der Artikel illustriert sowohl die technischen Details dieser Spracherweiterung als auch die idiomatische Benutzung von Lambdas.
Java 7: Das Fork-Join-Framework für mehr Performance
Günther, M. and Lehmann, M., JavaSPEKTRUM, 5/2012, p. 36-39
Abstract: [german] Mehr Performance wird dem Softwareentwickler nicht länger durch immer schnellere Prozessoren geschenkt. Stattdessen muss man mehrere parallele Prozessoren effizient ausnutzen. Wie aber implementiert man parallele Algorithmen fehlerfrei und effizient? Klassische Java-Threads reichen nicht aus, da sie keine geeignete Abstraktion für die inhärente Parallelisierung eines Problems mitbringen. Java 7 bietet mit dem Fork-Join-Framework eine leichtgewichtige Alternative und unterstützt den Entwickler bei der Umsetzung parallelisierbarer Aufgaben. Am Beispiel der Berechnung von Fraktalen zeigt der Artikel, wie ein parallelisierbares Problem in Java durch Zerlegung in Teilprobleme (Fork) und anschließende Zusammenführung der Teilergebnisse (Join) umgesetzt werden kann.
Academic
Agrarmeteorologische Beratung mit der Visualisierungssoftware NinJo
Bock, L. and Günther, M. and Schaal, K., GIL Jahrestagung 2012, p. 47-50
Abstract: [german] NinJo ist eines der weltweit größten meteorologischen Visualisierungssysteme. Die Software wird seit 2007 operationell in der Wetterberatung eingesetzt. Für die agrarmeteorologische Beratung im Deutschen Wetterdienst (DWD) wurde für NinJo eine Komponente zur Visualisierung agrarmeteorologischer Daten entwickelt, der sogenannte AMBER-Layer. Dieser Artikel stellt den AMBER-Layer innerhalb des Gesamtsystems NinJo mit seiner Systemarchitektur dar und geht dabei insbesondere auf die speziellen Anforderungen innerhalb der agrarmeteorologischen Beratung ein.
Cooperative Traffic Management for Video Streaming Overlays
Pussep, K. and Lehrieder, F. and Gross, C. and Oechsner, S. and Günther, M. and Meyer, S., Computer Networks, Special Issue on Measurement-based Optimizations of P2P Networking and Applications, 2011
Abstract: Peer-to-Peer (P2P) based overlays often ignore the boundaries of network domains and make traffic management challenging for network operators. Locality-aware techniques are a promising approach to alleviate this impact, but often benefit only network operators and fail to provide similar benefits to end-users and overlay providers. This is especially severe with video streaming overlays that are responsible for large amount of Internet traffic. In this paper we present and evaluate a collaborative approach where a network operator measures the behavior of overlay users and promotes a subset of them in terms of up- and download bandwidth. This creates an incentive to users and overlay providers to cooperate by using locality awareness according to the operator’s policies. We evaluate our approach both with a real application and via extensive simulations to analyze the user selection metrics and the impact on different network operators. Our study shows that this cooperative traffic management approach leads to a situation that is beneficial for users, content providers, and network operators.
Adaptives Bandbreitenmanagement in hybriden Peer-unterstützten Video-on-Demand Systemen
Günther, M., Technische Universität Darmstadt, 2010 (MSc. Thesis)
Abstract: [german] Das Betrachten von Video-Inhalten über Video-on-Demand Dienste erfreut sich einer wachsenden Beliebtheit unter den Benutzern. Jedoch erzeugen insbesondere Videos in hoher Qualität (SD- bis HD-Standard) eine hohe Last auf den Servern von Content Providern. Eine Peer-to-Peer basierte Verteilstrategie kann hier Abhilfe schaffen, führt jedoch ein enormes Kostenproblem für einen ISP durch erhöhtes Verkehrsvolumen auf Inter-ISP-Verbindungen ein. Existierende Mechanismen aus den Bereichen des Traffic Shaping, Hardware Provisioning und Locality Aware Peer Selection adressieren die Reduktion dieses kostenintensiven Datenverkehrs. Dies schränkt jedoch potentiell die Verfügbarkeit von Daten ein und beeinträchtigt damit die Performanz eines solchen Dienstes, was weder im Interesse des Content Providers, noch des Benutzers liegt.
Die vorliegende Arbeit versucht, durch adaptives Bandbreitenmanagement die Interessen aller Beteiligten zu wahren. Die Basis hierfür stellt eine hybride Verteilstrategie: Der primäre Distributionspfad ist durch ein P2P-System realisiert, während ein sekundärer Distributionspfad über adaptive Server im Falle eines Performanz-Verlusts als Ausweichlösung dient. Die adaptiven Server basieren auf der sog. Supporter-Strategie.
Der Beitrag der Arbeit ist zweierlei. Zunächst erfolgt die prototypische Implementierung und Evaluation der Supporter-Strategie. Die Ergebnisse dieser Evaluation zeigen, dass die Supporter-Strategie eine Kompromisslösung zwischen Server-Last und Leistung erzielt. Sie ist insbesondere für Content Provider interessant, die den Peer-Bedarf a priori nicht kennen oder deren Server-Auslastung über die Zeit starken Schwankungen unterzogen ist. Diese Resultate greift die Arbeit auf, um den Einsatz der Supporter-Strategie innerhalb der hybriden Systemarchitektur zu rechtfertigen. Darauf aufbauend erfolgt die Erarbeitung eines Konzepts zum adaptiven Bandbreitenmanagement. Die Idee hinter dem Mechanismus ist, das Zugangsprofil ausgewählter Peers zu erhöhen. Die Ergebnisse der Arbeit zeigen, dass sich durch eine geschickte Auswahl von sich besonders günstig verhaltenden Peers eine deutliche Besserung des Systemzustands erreichen lässt. Dies wirkt sich nicht nur positiv auf das Inter-ISP-Datenvolumen aus, sondern resultiert auch in einer Reduktion der Last auf Servern des Content Providers. Ein Benutzer erfährt durch Einsatz des Ansatzes – je nach Konfiguration und Szenario – eine gleichbleibende, wenn nicht sogar bessere Dienstgüte in Form reduzierter Abspielverzögerungen. Die Arbeit stellt somit eine ganzheitliche Lösung für Peer-to-Peer basiertes Video-on-Demand in einer hybriden Systemarchitektur vor, in der alle beteiligten Interessengruppen einen Gewinn erzielen.