Fallstudie / Systems
Infra from Scratch
Go · Python · C · Linux · DNS
Überblick
Ein kleiner vernetzter Service-Stack, von Grund auf gebaut: Eine Anfrage läuft über DNS, Reverse Proxy und Load Balancer zu zwei HTTP-Servern. Die Komponenten verarbeiten Netzwerkdaten selbst, damit nachvollziehbar bleibt, wie Parsing, Verbindungen und Ausfälle funktionieren.
Was passiert, wenn ein Dienst ausfällt?
Eine Anfrage läuft Schritt für Schritt durch den Stack. Markiere einen Dienst als „Nicht erreichbar“, um zu sehen, wie sich der Ausfall auf den Anfrageweg auswirkt.
Der Test-Client fragt zuerst den DNS-Server nach der Adresse. Danach geht die HTTP-Anfrage über den Reverse Proxy und den Load Balancer an einen der beiden Server. Für die interaktive Ansicht ist JavaScript erforderlich.
Architekturentscheidungen
Die drei wichtigsten Entscheidungen (ADRs) dieses Projekts.
Optionaler Cache-Aside-Pfad für eine Route
Der Cache bedient nur GET /hello und ist optional. Bei Cache-Fehlern antwortet der Server direkt aus der Anwendung.
Lokale Leases für die Backend-Erkennung
Backends melden sich per Lease beim Load Balancer an. Die Anmeldung läuft nach drei Sekunden ohne Erneuerung ab, ohne Neustart des Balancers.
Cache in der Container-Runtime
Die Integrationssuite startet den C-Cache über die eigene Container-Runtime, mit einem Rootfs aus dem frisch gebauten Binary und seinen Bibliotheken statt aus einem Image.