Fault-tolerant systems are ubiquitous—not only in the world of IT, but in every critical system we design and build in our natural environment. Approaches aimed at equipping systems with the resilience they need to withstand both internal and external disturbances are multitudinous. Among these approaches, State Machine Replication (SMR) stands out due to the remarkable guarantees it provides system designers with in regard to the types of failures it can tolerate. Unfortunately, however, replicating state machines comes with high resource costs, and the architectural requirements of this technique are difficult to fulfill without incurring additional, significant decreases in performance. This thesis contributes to several research endeavors addressing the performance issues SMR solutions commonly face. The primary goal of this work is the advancement of the state-of-the-art regarding solutions that equip SMR systems with the means to self-optimize during runtime. The thesis first identifies a common drawback of existing optimization methods that are based on deterministic multithreading, and provides an immediate solution in the form of a novel, runtime-reconfigurable scheduling algorithm. This forms the basis for the following research efforts contained in this work, which improve on prior systems using two main approaches: (i) The first approach aims at enabling SMR systems to scale vertically during runtime, which unlocks significant potential in regard to cost efficiency of these solutions. (ii) The second approach looks at the performance of SMR systems as experienced by clients, i.e., using metrics such as throughput and request latencies, and improves these by introducing several novel optimization solutions. In addition to detailing these approaches and their results, the thesis also introduces background knowledge about fault-tolerant systems, deterministic multithreading, and optimization methods that is required to understand and follow this work. The resulting contributions consist of multiple novel algorithms in the contexts of deterministic scheduling, deterministic distributed measurements, and performance optimization. Additionally, several proof-of-concept implementations are presented and used for thorough evaluations, showing significant advantages over unoptimized approaches or related work. Among these implementations, an architecture for vertically scalable SMR systems is presented, and a fully self-optimizing SMR setup is introduced and evaluated. Finally, the thesis details the development of a Reinforcement Learning-based framework for the creation of autonomous agents capable of self-optimizing SMR systems during runtime. Some of these novel mechanisms are orthogonal to prior work and can be combined with existing solutions to further boost the performance of deterministically multithreaded systems in the context of SMR., Fehlertolerante Systeme sind weltweit nicht mehr aus unserer Gesellschaft wegzudenken, sichern sie doch in vielerlei Hinsicht unseren hohen Lebensstandard. Die Ansätze mit denen DesignerInnen und IngenieurInnen die diese Systeme entwerfen letztendlich Fehlertoleranz sicherstellen, sind vielfältig und Kernthema verschiedenster Forschungsdisziplinen. Unter all diesen Ansätzen stechen replizierte Zustandsautomaten (State Machine Replication, Abk. SMR) hervor, da sie ein hohes Level an Fehlertoleranz bieten, welches von den meisten anderen Mechanismen nicht erreicht werden kann. Leider wird diese hohe Fehlertoleranz jedoch durch intensiven Ressourceneinsatz erkauft, und die zahlreichen Anforderungen an die Architektur von SMR-Systemen haben oftmals starke Performanceeinbußen zur Folge. In dieser Arbeit werden mehrere Lösungsansätze verfolgt, die Performance von SMR-Systemen zu verbessern. Das Hauptziel dieser Dissertation ist, SMR-Systeme mit der Fähigkeit auszustatten, sich während der Laufzeit selbst und so autonom wie möglich zu optimieren, um auf Änderungen an Umgebungsvariablen reagieren zu können und ihre Performance im Vergleich zu unoptimierten Systemen allgemein zu steigern. Als erstes wird diesbezüglich eine gemeinsame Schwäche aller vorheriger auf deterministischem Multithreading basierender Optimierungsmethoden identifiziert, und ein neuartiger deterministischer Schedulingalgorithmus als Lösung vorgeschlagen. Dieser bildet zugleich die Basis für die weiteren Forschungsansätze der Arbeit, welche den aktuellen Stand der Forschung hinsichtlich der folgenden Themen vorantreiben: (i) Der erste Ansatz zielt darauf ab, SMR-Systeme zu befähigen, während ihrer Laufzeit vertikal zu skalieren. Dies ermöglicht immense Kosteneinsparungen im Betrieb cloudbasierter SMR-Installationen. (ii) Im zweiten Ansatz wird die Leistung von SMR-Systemen aus Perspektive der Clients betrachtet, und die entsprechenden Metriken, wie Request-Durchsatz und -Latenzzeiten mit innovativen Optimierungsmethoden verbessert. Zusätzlich zur Beschreibung dieser Forschungsansätze beinhaltet die Arbeit ausführliche Hintergrundinformationen zu den Kernthemen des deterministischen Multithreadings und der Systemoptimierung, um LeserInnen die Möglichkeit zu geben, der Arbeit auch ohne viel Vorwissen folgen zu können. Die aus den Forschungsansätzen resultierenden Ergebnisse und Beiträge der Arbeit zum aktuellen Forschungsstand bestehen aus mehreren neuartigen Algorithmen, mitunter für deterministisches Multithreading, für fehlertolerante Messungen in verteilten Systemen, und für die Leistungsoptimierung von SMR-Systemen. Zusätzlich zeigen verschiedene Proof-of-concept Implementierungen anhand ausführlicher Messungen und Evaluationen die Vorteile unserer Lösungen im Vergleich zu vorherigen oder unoptimierten Systemen. Unter diesen Prototypen findet sich zum einen eine Architektur die SMR-Systemen vertikales Skalieren zur Laufzeit ermöglicht, und zum anderen ein umfassender, lauffähiger Prototyp eines selbstoptimierenden SMR-Systems. Zu guter Letzt wird eine Plattform für das Trainieren von Reinforcement Learning-Agenten vorgestellt, durch die es ermöglicht wird, Agenten zu kreieren die mit komplexeren Kombinationen aus Metriken und Konfigurationsparametern umgehen können, um Systeme selbsttätig zu optimieren. Einige der vorgestellten Ansätze sind zudem orthogonal zu vorherigen Arbeiten und können mit diesen kombiniert werden, um zusätzliche Leistungssteigerungen im Kontext von SMR zu erzielen.