Project 15: Final Capstone - Cloud-Native Application Platform
A mini Platform-as-a-Service that deploys containerized applications, load balances traffic, handles service discovery, provides monitoring, and scales based on load—combining everything you’ve learned.
Quick Reference
| Attribute | Value |
|---|---|
| Primary Language | Go |
| Alternative Languages | None (Go is perfect for this) |
| Difficulty | Level 5: Master |
| Time Estimate | 2-3 months |
| Knowledge Area | Everything - This is the Final Boss |
| Tooling | Everything you’ve built |
| Prerequisites | ALL previous projects completed. This is the final exam. |
What You Will Build
A mini Platform-as-a-Service that deploys containerized applications, load balances traffic, handles service discovery, provides monitoring, and scales based on load—combining everything you’ve learned.
Why It Matters
This project builds core skills that appear repeatedly in real-world systems and tooling.
Core Challenges
- Container orchestration → maps to your container runtime + scheduling
- Service mesh → maps to your HTTP router + load balancing
- Distributed state → maps to your Raft KV store
- Observability → maps to your log aggregator + profiler
Key Concepts
- Everything from previous projects
- Kubernetes architecture (for inspiration)
- Service mesh patterns (Envoy, Istio)
- GitOps and deployment patterns
Real-World Outcome
$ ./minicloud init
MiniCloud initialized.
API server: localhost:8443
Scheduler: running
Controller: running
etcd (raft): localhost:2379
$ ./minicloud deploy myapp --image ./myapp-rootfs --replicas 3
Deploying myapp...
Creating container: myapp-1
Creating container: myapp-2
Creating container: myapp-3
Configuring load balancer
Registering in service discovery
Deployment complete:
myapp.local → [10.0.0.2:8080, 10.0.0.3:8080, 10.0.0.4:8080]
$ curl http://myapp.local/health
{"status": "healthy", "instance": "myapp-2"}
$ ./minicloud scale myapp --replicas 5
Scaling myapp from 3 to 5 replicas...
Creating container: myapp-4
Creating container: myapp-5
Updating load balancer
Scaled to 5 replicas.
$ ./minicloud logs myapp --follow
[myapp-1] 2025-01-10 14:30:00 GET /health 200 1ms
[myapp-2] 2025-01-10 14:30:01 GET /api/users 200 45ms
[myapp-3] 2025-01-10 14:30:02 POST /api/orders 201 120ms
...
$ ./minicloud metrics
Service: myapp
Replicas: 5/5 healthy
Requests/sec: 1,234
Latency p50: 12ms
Latency p99: 89ms
CPU: 23% avg
Memory: 256MB avg
$ ./minicloud status
Cluster Status:
Nodes: 3 (all healthy)
Services: 5
Containers: 23
Load balancer: active
Storage: 12.4 GB used
$ ./minicloud node failure node-2
Simulating node-2 failure...
Containers on node-2: myapp-2, myapp-4
Rescheduling to healthy nodes...
myapp-2 → node-1
myapp-4 → node-3
Load balancer updated
Service restored in 2.3s
Implementation Guide
- Reproduce the simplest happy-path scenario.
- Build the smallest working version of the core feature.
- Add input validation and error handling.
- Add instrumentation/logging to confirm behavior.
- Refactor into clean modules with tests.
Milestones
- Milestone 1: Minimal working program that runs end-to-end.
- Milestone 2: Correct outputs for typical inputs.
- Milestone 3: Robust handling of edge cases.
- Milestone 4: Clean structure and documented usage.
Validation Checklist
- Output matches the real-world outcome example
- Handles invalid inputs safely
- Provides clear errors and exit codes
- Repeatable results across runs
References
- Main guide:
LEARN_GO_DEEP_DIVE.md - All of them