Eine produktionsreife verteilte Webanwendung mit React, .NET 10, Nginx und PostgreSQL
React 19.2.6 + Vite 8 SPA, bereitgestellt über Nginx auf Port 3000. Kommuniziert ausschließlich über den Load Balancer.
Zwei identische Backend-Instanzen (api-1, api-2) mit ASP.NET Minimal APIs und EF Core 10.
Einzige Datenquelle mit persistentem Docker-Volume. Daten überleben Container-Neustarts.
Least-Connections-Algorithmus mit passivem Failover. Leitet /api/* an gesunde Backends weiter.
docker compose up --build – alles startet automatisch mit Health Checks.
/api/auth/register und /api/auth/login werden gedrosselt, um Brute-Force-Angriffe zu verlangsamen.POSTGRES_PASSWORD und JWT_KEY liegen in .env (git-ignoriert). Eine .env.example liefert sichere Platzhalterwerte./health und /ready sind öffentlich, nicht authentifiziert und werden von Docker Health Checks verwendet.Das Backend gibt außerdem einen X-Served-By-Header zurück, der anzeigt, welche Instanz die Anfrage bearbeitet hat.
Nginx verwendet Least-Connections-Routing über beide API-Instanzen mit aggressiven Failover-Einstellungen:
proxy_next_upstream wiederholt automatisch bei Netzwerkfehlern und 5xx-Antworten.X-Served-By: api-1 | api-2-Antwort-Header macht das Routing auf einen Blick sichtbar.db, api-1, api-2, load-balancer, frontend. Jeder in einem eigenen Container.pg_isready bestehen, bevor die APIs starten; beide APIs müssen /health bestehen, bevor der Load Balancer Traffic annimmt.postgres_data-Volume bewahrt Daten über docker compose down-Neustarts hinweg. Nur mit dem -v-Flag löschen, wenn beabsichtigt.api-1 baut das Image; api-2 verwendet es wieder. Unterschied nur durch die INSTANCE_NAME-Umgebungsvariable..env injiziert. Keine Secrets in Images.Multi-Instanz-Backend hinter einem echten Load Balancer mit gesundheitsgeprüfter Orchestrierung.
Secrets in Umgebungsvariablen, rate-limitierte Auth, nutzerspezifische Daten, Health-Checks.
Passives Failover mit abgestimmten Timeouts – ein Knoten fällt aus, kein Einfluss auf den Nutzer.
k6-Lasttest validiert p95-Latenz und Fehlerrate unter 30 gleichzeitigen Nutzern.