Loadding..

Scale 10 Triệu Users — Không Một Phút Downtime

Scale 10 Triệu Users — Không Một Phút Downtime

Scale 10 Triệu Users

Không có đội ngũ lớn, không có ngân sách khổng lồ. Chỉ có kỷ luật kỹ thuật — và một hệ thống được xây để trông đợi traffic, không phải chịu đựng traffic.

Thảm Họa Khởi Đầu

Backend là monolith Spring Boot trên 1 EC2. Mọi thứ ổn cho đến khi một bài Reddit đổ 5.000 request đồng thời — hệ thống sập hoàn toàn.

Bài học rút ra: “Scalability bắt đầu từ nơi bạn ngừng giả định.”

Hành Trình 3 Giai Đoạn

Giai Đoạn 1 — Container Hóa

Tách monolith thành microservices, đóng gói bằng Docker. Mỗi service sống độc lập — service kia chết, service này vẫn chạy.

Stack: Spring Boot + React + PostgreSQL + Redis + Kafka + Kubernetes (AWS EKS).

Giai Đoạn 2 — Kafka & Database Sharding

REST đồng bộ gây cascading failure. Chuyển sang event-driven với Kafka (user_createdfeed_published…). Throughput tăng 40%, latency xuống dưới 100ms.

PostgreSQL sharded theo user_id % 3 + read replicas + Redis cache → query từ 2–3 giây còn dưới 50ms.

Giai Đoạn 3 — CI/CD Canary + Observability

Deploy theo kiểu canary: roll ra 5% pod → quan sát Prometheus → scale dần → auto-rollback nếu có anomaly. Tần suất deploy từ 1 lần/tuần lên 3–4 lần/ngày.

Monitoring stack: Prometheus + Grafana + ELK + Jaeger.

Ngày 10 Triệu User — Không Có Gì Xảy Ra

Không outage. Không database panic. Không ai phải ôm laptop lúc 3 giờ sáng.

Vì hệ thống không được xây để chịu đựng traffic — nó được xây để trông đợi traffic.

Nếu Làm Lại Từ Đầu

Dùng Terraform từ ngày 1, triển khai Jaeger tracing sớm hơn, và định nghĩa bounded context cho microservices ngay từ đầu — vì tách một service lớn thành hai cái nhỏ luôn đau hơn nhiều so với merge hai cái nhỏ lại.

Zero downtime không phải là may mắn. Đó là kết quả của việc thiết kế cho thất bại, tự động hóa niềm tin, và đo đạc mọi thứ.

Print