📈 Horizontal vs Vertical Scaling

Thêm máy (Scale Out) vs Nâng cấp máy (Scale Up) — Chiến lược mở rộng hệ thống

🟢 Horizontal Scaling (Scale Out)

Thêm nhiều server cùng loại. Load balancer chia tải. Unlimited scaling.

🔵 Vertical Scaling (Scale Up)

Nâng cấp server hiện tại (thêm CPU, RAM, SSD). Đơn giản nhưng có giới hạn.

1. Vertical Scaling (Scale Up)

Vertical Scaling:

Trước:                  Sau:
┌──────────┐            ┌──────────────┐
│ 2 CPU    │            │ 16 CPU       │
│ 4GB RAM  │    →→→     │ 64GB RAM     │
│ 100GB HDD│            │ 1TB SSD      │
└──────────┘            └──────────────┘
  $50/tháng               $500/tháng

→ Cùng 1 server, nâng cấp hardware
→ Đơn giản, không cần thay đổi code

Ưu/nhược điểm:

  • ✅ Đơn giản — không thay đổi architecture
  • ✅ Không lo data consistency
  • ✅ Latency thấp (mọi thứ cùng máy)
  • ❌ Giới hạn hardware (max CPU/RAM có hạn)
  • ❌ Single point of failure
  • ❌ Downtime khi nâng cấp
  • ❌ Đắt tiền ở high-end

2. Horizontal Scaling (Scale Out)

Horizontal Scaling:

              Load Balancer
                  │
        ┌─────────┼─────────┐
        ▼         ▼         ▼
  ┌──────────┐ ┌──────────┐ ┌──────────┐
  │ Server 1 │ │ Server 2 │ │ Server 3 │
  │ 2CPU/4GB │ │ 2CPU/4GB │ │ 2CPU/4GB │
  └──────────┘ └──────────┘ └──────────┘
    $50/th       $50/th       $50/th

→ Thêm machines, chia tải
→ Cần load balancer, stateless app
→ Tổng: $150/th nhưng 3x capacity + redundancy

Ưu/nhược điểm:

  • ✅ Unlimited scaling (thêm bao nhiêu cũng được)
  • ✅ High availability (1 server die → vẫn OK)
  • ✅ Cost-effective ở scale lớn
  • ✅ No downtime khi thêm/bớt server
  • ❌ Phức tạp hơn (load balancer, session management)
  • ❌ Data consistency challenges
  • ❌ Cần stateless design

3. Bảng So Sánh

Tiêu chí 🟢 Horizontal 🔵 Vertical
Cách thức Thêm machines Nâng cấp machine
Giới hạn Gần như unlimited Giới hạn bởi hardware
Availability Cao (redundancy) Thấp (SPOF)
Complexity Cao Thấp
Cost Tuyến tính (commodity HW) Lũy thừa (high-end = đắt)
Downtime Zero downtime Cần restart
Data Distributed, eventual consistency Single source, strong consistency
Ví dụ Netflix, Google, AWS Database server, legacy apps

4. Khi Nào Chọn?

Vertical trước: Giai đoạn đầu, app nhỏ, database server. Đơn giản, nhanh.

Horizontal khi: Traffic lớn, cần HA, cloud-native, stateless apps.

Thực tế: Hầu hết hệ thống dùng cả hai. VD: Horizontal cho web servers + Vertical cho database.

💡 Cloud Auto-Scaling: AWS Auto Scaling Group, K8s HPA — tự động thêm/bớt instances (horizontal) dựa trên CPU/memory usage. Kết hợp với vertical: chọn instance type phù hợp (t3.micro → c5.2xlarge).