DieSchoeneWolke

Technologischer Blog von Jan Schönfeld

Neuer Reverseproxy

Nach einem Server-Redesign habe ich mich entschieden, von Caddy zu Ferron zu wechseln. Der fundamentale Grund liegt in der Programmiersprache selbst: Caddy läuft auf Go, Ferron ist in Rust geschrieben. Während Go eine praktische Sprache für schnelle Entwicklung ist, musste ich feststellen, dass der Garbage Collector immer wieder zu unerwünschten Latenz-Spitzen führt, besonders unter Last. Hierbei sei mein kürzlicher Beitrag zu einer DOS-Attacke zu erwähnen. Ferron bietet durch Rusts Memory-Management eine deutlich vorhersagbarere Performance, da es keine GC-Pausen gibt, die plötzlich Request-Verarbeitung blockieren.

Rust erzwingt von Anfang an ein rigoroses Gedankenmodell über Speichersicherheit. Der Compiler verhindert ganze Klassen von Bugs, die in Go stillschweigend entstehen können. Besonders bei einem Webserver, der permanent mit untrusted Input umgehen muss, ist das ein erheblicher Vorteil. Nil-Pointer-Panics, Race Conditions oder Buffer-Overflows sind in Rust strukturell ausgeschlossen, nicht nur durch Konvention oder Tests.

Die Performance-Gewinne sind messbar. Ferron verarbeitet mehr Requests pro Sekunde mit weniger CPU und RAM, weil Rust keine Laufzeit-Overhead für Garbage Collection hat und seine Zero-Cost-Abstraktion wirklich hält, was sie verspricht. Das macht sich insbesondere bei Connection-Pooling und Concurrent-Request-Handling bemerkbar, wo Go durch seine GC-Stops manchmal unerwartet ins Stocken gerät.

Dazu kommt Rusts Fearless Concurrency. Das Ownership-System garantiert zur Compile-Zeit, dass meine nebenlaufigen Operationen sicher sind. Das gibt mir das Vertrauen, aggressiv Parallelisierung einzusetzen, ohne klassische Race-Condition-Albträume zu fürchten. Der Code fühlt sich kontrollierter an, sicherer.

Der Wechsel bedeutet, dass meine Infrastruktur robuster, schneller und fundamentaler sicherer ist. Nicht weil Caddy schlecht ist, sondern weil Rust als Fundament einfach stärkere Garantien bietet.

Rust, Caddy, Go, Reverseproxy

⬅ Vorheriger Beitrag
Neuer Blog