Niedriglatente Systeme stoßen nicht an die CPU-Grenzen, sondern an die Kommunikationsgrenzen. Wir analysieren, wie die Architektur die Latenz ohne Verlust der Zuverlässigkeit senkt.
Das Problem zeigt sich nicht sofort – es wird erst sichtbar, wenn das System an die Grenzen der Netzwerkinteraktion stößt. In modernen verteilten Systemen bedeutet ein Anstieg des Durchsatzes nicht mehr eine Verringerung der Latenz. Im Gegenteil, zusätzliche Abstraktionsschichten in der Cloud und die Komplexität der Prozessoren erhöhen die Verzögerungen. Die Hauptzeit wird nicht für Berechnungen, sondern für die Übertragung von Nachrichten zwischen Komponenten aufgewendet. Der Versuch, das Problem mit Hardware zu lösen — mehr CPU, mehr Threads — bringt selten Ergebnisse, da der Engpass in der Kommunikation bleibt.
In niedriglatenten Systemen ist nicht nur die absolute Verzögerung entscheidend, sondern auch die Vorhersehbarkeit. In Systemen wie dem Handel ist nicht die durchschnittliche Latenz wichtig, sondern die spezifische Operation. Darüber hinaus beeinflusst die Latenz die Wiederherstellung: Während das System sich erholt, ist es faktisch nicht verfügbar. Dies macht architektonische Entscheidungen rund um den Nachrichtenaustausch entscheidend. Wenn das System als Kette von Diensten mit vielen Hops aufgebaut ist, wird eine Degeneration unvermeidlich.
Die praktische Antwort darauf ist die Trennung von Anliegen und die Kontrolle über die Kommunikationskanäle. Der Ansatz, der im LMAX Disruptor umgesetzt ist, zeigt, dass der Hauptgewinn nicht aus „neuen Algorithmen“ kommt, sondern aus der Dekomposition von Arbeitsströmen. Protokollierung, Dekodierung und Geschäftslogik werden getrennt. Jeder Stream erledigt eine Aufgabe und wird nicht blockiert. Dies reduziert den Wettbewerb um Ressourcen und beseitigt unnötige Wartezeiten. Infolgedessen sinkt die Latenz ohne Änderung der Geschäftslogik.
Werkzeuge wie Aeron entwickeln diese Idee auf der Ebene der interprozesslichen Kommunikation weiter. Sie geben Kontrolle darüber, wie genau Nachrichten übertragen werden: UDP, Multicast oder IPC (interprozessuale Kommunikation). Dabei erlaubt die Architektur verschiedene Kompromisse. IPC senkt die Latenz durch Shared Memory, erfordert jedoch die Platzierung der Komponenten auf einem Host. Dies ist ein typischer Trade-off zwischen Verteilung und Geschwindigkeit.
Eine weitere Senkung der Latenz ist mit der Reduzierung von Abstraktionsschichten verbunden. Die Verwendung von Kernel-Bypass über DPDK ermöglicht es, den Netzwerk-Stack des Betriebssystems zu umgehen und Pakete direkt in die NIC zu schreiben. Dies beseitigt Overhead und ermöglicht Mikrosekundenverzögerungen. Aber der Preis ist ein Anstieg der Komplexität und eine Verringerung der Portabilität. Ein solcher Ansatz ist nur dort gerechtfertigt, wo Latenz eine Schlüsselgeschäftsmetrik ist.
Interessanterweise ist die Grenze der Optimierung der Verzicht auf Nachrichten als solche. IPC erfordert immer noch Serialisierung und Deserialisierung. Wenn sich die Komponenten im selben Prozess befinden, kann auf Funktionsaufrufe umgestiegen werden. In diesem Fall wird die Latenz in Nanosekunden gemessen, und bei Inlining verschwindet sie praktisch. Aber dies schränkt die Architektur und Skalierbarkeit radikal ein.
Hier stellt sich die entscheidende architektonische Frage: Kann man ein System bauen, in dem der Kommunikationskanal dynamisch ausgewählt wird? In einigen Fällen — Netzwerk, in anderen — Shared Memory, in dritten — direkter Aufruf. Ein solcher Ansatz erfordert strenge Kontrolle über Datenströme und stützt sich häufig auf Modelle wie replizierte Zustandsmaschinen und Konsens (z. B. Raft). Sie ermöglichen es, die Konsistenz bei aggressiver Optimierung der Kommunikation aufrechtzuerhalten.
Das endgültige Fazit ist pragmatisch. Niedriglatente Systeme sind nicht nur ein Werkzeug. Es geht um die Verwaltung von Grenzen: zwischen Streams, Prozessen und Maschinen. Je weniger dieser Grenzen und je transparenter sie sind, desto niedriger ist die Verzögerung. Aber jede Optimierung erhöht die Kopplung des Systems und verringert die Flexibilität. Das Gleichgewicht zwischen diesen Faktoren bestimmt die Reife der Architektur.