title: Practical framework for Byzantine fault-tolerant systems
Creators: name: Djokic, Adrian
Publisher: name: TU Wien
Year: 2014
Subjects: subject: Byzantinische Fehlertoleranz
subject: Byzantinisches fehlertolerantes System
subject: BFT
subject: Netzwerk-Coding
subject: verteilte Algorithmen
subject: verteilte Systeme
subject: Byzantine fault-tolerance
subject: Byzantine fault-tolerant system
subject: BFT
subject: network coding
subject: distributed algorithms
subject: distributed systems

description: Ein verteiltes System führt ein Programm oder einen Algorithmus auf mehreren Knoten aus, die über ein Netzwerk miteinander verbunden sind. Mit den heutzutage immer schneller wachsenden Computernetzwerk-Systemen wird es zunehmend schwieriger, deren Robustheit zu gewährleisten. Einige Probleme, die in einem Computernetzwerk auftreten können, sind: übernommene Systeme nach einer Hacker-Attacke, unzuverlässige Daten-Übertragungsmedien sowie Hardware-Ausfälle. Das byzantinische Fehlermodell umfasst alle möglichen Fehler eines Systems. Darunter gehören Abstürze sowie Timing-Fehler und verlorengegangene Übertragungsdaten. Die stetige Entwicklung neuer Technologien macht es zwingend notwendig, dass Fehlertoleranz in unternehmens- und überlebenswichtigen Systemen richtig erfasst wird. Wir präsentieren ein System, das erleichtertes Testen und Benchmarking eines verteilten Systems ermöglicht. Dieses Framework bietet eine Basis an, die einen aussagekräftigen Leistungsvergleich von verteilten fehlertoleranten Protokollen erlaubt. Die Praktikabilität des Frameworks ist von vorrangiger Bedeutung: Es soll einfach sein, das Framework einzusetzen, auszuführen und zu warten. Ein modulares Design ermöglicht eine einfache Erweiterung des Quellcodes und der Konfiguration. Darüber hinaus ist die Dokumentation des Frameworks sehr umfangreich. Sie beinhaltet eine umfassende Code-Dokumentation und visuelle Darstellungen wie Klassendiagramme, die das Verständnis des Frameworks erleichtern. Die Um- setzung des Frameworks in Java ermöglicht die Bereitstellung und Ausführung des Programms auf mehreren Plattformen sowie ein objektorientiertes Design, was einen großen Vorzug für Modularität bietet. Das modulare Framework ermöglicht es, verteilte Algorithmen zu testen. Zusätzlich sind wir in der Lage, neue Ideen für Storage-Netzwerke, wie z.B. Netzwerkkodierung, einzusetzen. Netzwerkkodierung ist eine Möglichkeit, um die Effizienz eines Netzwerkes und die Widerstandsfähigkeit gegen Angriffe zu steigern. Das Kodierungsverfahren stellt auch eine alternative Methode dar, um byzantinische Fehlertoleranz zu gewährleisten, während andere Methoden nur auf Kryptographie basieren. Netzwerkkodierung ist im wesentlichen ein Verfahren, das ein größeres Paket in kleinere Päckchen zerstückelt, oder diese wieder in die ursprüngliche Form zurückversetzt. Obwohl der aktuelle Stand des Frameworks keinen Kodierungssalgorithmus anbietet, integriert die Standardimplementierung des fehlertoleranten-Protokolls die Methodenaufrufe zu einer abstrakten Java-Klasse, die zum Codieren und Decodieren der Daten dient. Die Erweiterung des Frameworks mit einem Codierungsschema, wie z.B. Reed-Solomon, würde somit die volle Funktionalität anbieten.
description: A distributed system executes one program or algorithm on multiple networked nodes. As computer network systems continue growing, it becomes increasingly complex to maintain their robustness. Some of the issues that have to be dealt with in a network are: subverted systems following an adversarial attack, unreliable transmission of data, as well as hardware failures. The Byzantine fault model encompasses all possible faults in a system, which, among others, include crash, timing, and omission failures. Continuous discoveries of new technologies make it imperative that fault tolerance is addressed properly in mission-critical systems. We present a system that provides functionality for testing and benchmarking on a distributed system. This framework offers a common ground to be able to make a fair performance comparison of distributed fault-tolerant protocols. The framework's practicality is of primary concern. This means that it should be easily deployed, run, and maintained. Its modular design allows the code baseline to be extended and configured with ease. Moreover, the documentation of the framework, which includes comprehensive code documentation, as well as visual representations such as class diagrams, facilitate an easier understanding at both a lower and higher level. Implementing the framework in Java allows for cross-platform deployment and execution, as well as an object-oriented design, which eases modularity. Having a modular framework to test distributed algorithms enables the use of novel ideas for storage networks, such as network coding, for Byzantine fault-tolerant algorithms. Network coding is a way to improve a network's efficiency and resilience to attacks, and poses an alternative methodology to provide Byzantine fault tolerance compared to those solely relying on cryptography. Coding essentially breaks up data into smaller packets or combines data packets into the original form. Although the current state of the framework does not provide a coding algorithm, the default fault-tolerant protocol implementation integrates the calls to an abstract coding scheme to encode and decode data. Extending the framework with a coding scheme, such as Reed-Solomon, would enable the full use of this functionality.