- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel) - Kurswechsler Dropdown mit Direktnavigation - Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage - Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets - Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor - Saubere Bereinigung redundanter statischer Legacy-Sidebars |
||
|---|---|---|
| .. | ||
| aufgabe.go | ||
| index.html | ||
| musterloesung.go | ||
| README.md | ||
| test_aufgabe.go | ||
Master 16: High-Concurrency URL Shortener & Analytics Microservice API 🏆
Willkommen zum Master-Abschlussprojekt des Go Cloud Microservices & Systems Lehrgangs!
In diesem Abschlussprojekt baust du einen produktionsreifen Cloud-Microservice: Einen High-Concurrency URL Shortener mit asynchroner Analytics Ingestion Engine.
🏛️ 1. Architektur & Konzepte
Dieses Projekt vereint alle zentralen Kernkompetenzen von Go:
- Goroutine Worker Pool (
sync.WaitGroup): Ein Pool dedizierter Worker-Goroutines verarbeitet Klick-Events im Hintergrund, ohne HTTP-Antworten zu verzögern. - Buffered Channels: Dienen als stoßfester In-Memory Event-Bus für Klick-Analysen.
- Thread-Safe State (
sync.RWMutex&sync/atomic): Schnelle parallele Lesezugriffe beim URL-Lookup und atomare Metrik-Zähler ohne Lock-Overhead. - RESTful HTTP API (
net/http): Vollständige JSON API mit Request Decoding, Validierung und Statuscodes. - Middleware Pipeline: Recovery- und Logging-Middlewares schützen den Dienst vor unerwarteten Panics.
- Integration & Concurrency Tests: Stresstest mit parallelen Schreibern und Lesern.
📡 2. Endpunkte & Datenformate
POST /api/shorten
- Request Body:
{"url": "https://golang.org/doc"} - Response (201 Created):
{"id": 1, "short_code": "a1b2c3", "original_url": "https://golang.org/doc", "created_at": "...", "click_count": 0}
GET /r/{short_code}
- Löst den Kurzcode auf.
- Reiht asynchron ein
ClickEventin die Queue ein. - Liefert Status
302 Found(Redirect) oder200 OKmit JSON{"original_url": "..."}.
GET /api/stats/{short_code}
- Response (200 OK):
{
"short_code": "a1b2c3",
"total_clicks": 142,
"unique_ips": 38
}
GET /api/metrics
- Response (200 OK):
{
"total_urls": 12,
"total_clicks_processed": 540,
"active_workers": 4,
"queue_length": 0
}
🎯 Aufgaben in aufgabe.go
- TODO 1 (
Structs): Definiere die DatenmodelleURLRecord,ClickEvent,AnalyticsStatsundSystemMetricsmit JSON-Tags. - TODO 2 (
WorkerPool): ImplementiereStartWorkerPool(numWorkers int)undStopWorkerPool()mitsync.WaitGroupund Channel-Close. - TODO 3 (
ShortenURL): Validiere die URL, generiere einen deterministischen oder Zufalls-ShortCode und speichere den Eintrag thread-safe. - TODO 4 (
ResolveURL): Finde die URL und dispatche einClickEventnicht-blockierend (mitselect / default) an die Worker-Queue. - TODO 5 (
GetStats): Berechne Klicks und Unique IPs aus der Analytics-Tabelle. - TODO 6 (
SetupMicroserviceRouter): Registriere alle Endpunkte und binde die Middleware-Kette an.
🧪 Tests ausführen
go test -v -race ./...