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

  1. Reproduce the simplest happy-path scenario.
  2. Build the smallest working version of the core feature.
  3. Add input validation and error handling.
  4. Add instrumentation/logging to confirm behavior.
  5. 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