Distributed-Systems-Challenge

Persönlicher URL- &
Bookmark-Manager

Eine produktionsreife verteilte Webanwendung mit React, .NET 10, Nginx und PostgreSQL

.NET 10 React 19.2.6 Vite 8 Nginx 1.30 PostgreSQL 18 Docker Compose JWT Auth

Was ist es?

Ein vollständig verteilter Bookmark-Manager

🌐

React-Frontend

React 19.2.6 + Vite 8 SPA, bereitgestellt über Nginx auf Port 3000. Kommuniziert ausschließlich über den Load Balancer.

⚙️

Duale .NET 10 API

Zwei identische Backend-Instanzen (api-1, api-2) mit ASP.NET Minimal APIs und EF Core 10.

🗄️

PostgreSQL 18

Einzige Datenquelle mit persistentem Docker-Volume. Daten überleben Container-Neustarts.

⚖️

Nginx-Load-Balancer

Least-Connections-Algorithmus mit passivem Failover. Leitet /api/* an gesunde Backends weiter.

📦

Ein-Befehl-Start

docker compose up --build – alles startet automatisch mit Health Checks.

Architektur

Wie die Komponenten zusammenspielen

Browser ──── :3000 ────▶ Frontend (Nginx + React)
└─ /api/* proxy ──▶ Load Balancer (Nginx) :8080
├─ least-conn ──▶ api-1 (.NET 10)
└─ least-conn ──▶ api-2 (.NET 10)
└────────────────▶ PostgreSQL 18 (persistent volume)
Client
Präsentation
Routing
Compute
Persistenz

Sicherheit

JWT-Authentifizierung & Rate Limiting

API-Design

Minimale API-Endpunkte

Öffentlich

POST /api/auth/register
POST /api/auth/login
GET /health
GET /ready

Geschützt – JWT erforderlich

GET /api/bookmarks/
POST /api/bookmarks/
PUT /api/bookmarks/{id}
DELETE /api/bookmarks/{id}

Bookmark-Felder

{ "id": 1, "title": "k6 baseline", "url": "https://k6.io", "category": "load-test" }

Das Backend gibt außerdem einen X-Served-By-Header zurück, der anzeigt, welche Instanz die Anfrage bearbeitet hat.

Resilienz

Load Balancing & passives Failover

Nginx verwendet Least-Connections-Routing über beide API-Instanzen mit aggressiven Failover-Einstellungen:

upstream api_backend {
  least_conn;
  server api-1:8080 max_fails=1 fail_timeout=5s;
  server api-2:8080 max_fails=1 fail_timeout=5s;
}

proxy_connect_timeout 1s;
proxy_next_upstream error timeout http_502 http_503 http_504;

Infrastruktur

Docker Compose Orchestrierung

Tech-Stack

Was steckt dahinter

Frontend

⚛️ React 19.2.6
⚡ Vite 8.0.13
🌐 Nginx 1.30 (Auslieferung)

Backend

🔷 .NET 10 / ASP.NET
📄 Minimal APIs
🗃️ EF Core 10.0.8
🔑 JWT Bearer 10.0.8

Infrastruktur

🐳 Docker Compose
⚖️ Nginx 1.30 LB
🐘 PostgreSQL 18

Observability & Tests

📊 k6 Lasttests
🏥 Health Checks
🏷️ X-Served-By-Header

Zusammenfassung

Was dieses Projekt zeigt

🏗️

Verteilte Architektur

Multi-Instanz-Backend hinter einem echten Load Balancer mit gesundheitsgeprüfter Orchestrierung.

🔐

Produktionsstandards

Secrets in Umgebungsvariablen, rate-limitierte Auth, nutzerspezifische Daten, Health-Checks.

Resilienz

Passives Failover mit abgestimmten Timeouts – ein Knoten fällt aus, kein Einfluss auf den Nutzer.

📊

Messbare Performance

k6-Lasttest validiert p95-Latenz und Fehlerrate unter 30 gleichzeitigen Nutzern.

Danke fürs Zuhören · localhost:3000