Apache Scalability
Nguồn tham khảo: Udemy — Developer to Architect Series
Mục tiêu bài viết
- Hiểu Apache scale khác nhau tùy theo vai trò đang đảm nhiệm.
- Phân biệt bottleneck khi Apache làm Web Server vs Reverse Proxy.
- Hiểu tại sao Apache không phải lựa chọn lý tưởng cho reverse proxy quy mô lớn.
1) Apache có 2 vai trò chính
Apache
│
┌────────────┴────────────┐
▼ ▼
Web Server Reverse Proxy
│ │
Serve content Forward request
│ │
CPU + Memory Mostly Memory
2) Apache làm Web Server
Clients
👤 👤 👤 👤
│
▼
┌────────────────┐
│ Load Balancer │
└───────┬────────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
Apache #1 Apache #2 Apache #3
│ │ │
└─────────┼─────────┘
▼
Backend / DB
Khi traffic tăng, bottleneck phụ thuộc loại request:
CPU-intensive (dynamic content):
Dynamic Requests → Processing → CPU 🔥🔥🔥 → CPU Bottleneck
Memory-intensive (nhiều connections/threads, cache static):
Requests ↑ → Memory ↑ → Memory Bottleneck
3) Scale Web Server bằng Horizontal Scaling
Khi một Apache instance không đủ CPU/RAM → thêm nhiều node:
Load Balancer
│
┌───────────┼───────────┐
▼ ▼ ▼
Apache 1 Apache 2 Apache 3
CPU/RAM CPU/RAM CPU/RAM
← Horizontal Scaling →
Thay vì làm một server mạnh hơn → thêm nhiều Apache servers.
4) Apache làm Reverse Proxy
Clients
│
▼
┌────────────────┐
│ Apache │
│ Reverse Proxy │
└───────┬────────┘
│
┌────┼────┐
▼ ▼ ▼
App1 App2 App3
Apache không xử lý nhiều business logic — chủ yếu: nhận request → chọn backend → forward → chờ response → trả về client.
Trong thời gian backend xử lý, thread của Apache bị blocked/chờ:
Client → Apache → Thread → Forward → Backend (Processing...) → Response → Apache → Client
│
Waiting...
Khi có nhiều client:
10,000 Clients → 10,000 Connections → Many Threads → Memory ↑↑↑
5) Reverse Proxy → Memory là Bottleneck chính
Apache
│
┌────────┴────────┐
│ │
CPU Memory
│ │
Low 🟢 High 🔥
│
Connections + Threads
CPU không phải vấn đề lớn vì Apache không processing nhiều.
Memory mới là vấn đề chính:
Connections ↑ → Threads ↑ → Memory ↑
6) Vấn đề với Vertical Scaling
Khi Apache reverse proxy thiếu memory → chỉ có thể tăng RAM:
32 GB → 64 GB → 128 GB → 256 GB
Hạn chế:
- RAM lớn rất đắt
- Có giới hạn phần cứng
- Không tối ưu với hàng triệu connections
→ Apache không phải lựa chọn lý tưởng cho reverse proxy quy mô cực lớn.
7) So sánh 2 trường hợp
| Apache dùng để | Bottleneck chính | Scaling |
|---|---|---|
| Web Server | CPU hoặc Memory | ✅ Horizontal Scaling |
| Reverse Proxy | Memory | ⚠️ Chủ yếu Vertical Scaling |
WEB SERVER REVERSE PROXY
Load Balancer Clients
│ │
┌─────┼─────┐ ▼
▼ ▼ ▼ Apache
A1 A2 A3 │
CPU CPU CPU Connections + Threads
RAM RAM RAM │
Memory 🔥
← Horizontal → ← Vertical (RAM) →
8) Apache vẫn rất tốt cho Dynamic Web
Nếu mục tiêu là Web Server + Dynamic Web Pages, Apache vẫn là lựa chọn tốt:
Client → Apache → PHP / Python / Perl → Generate HTML → Client
Đặc biệt Apache có lịch sử sử dụng rộng với PHP-based websites.
Tóm tắt
APACHE
│
┌───────────┴───────────┐
▼ ▼
WEB SERVER REVERSE PROXY
│ │
CPU + Memory Memory
│ │
Horizontal Scale Vertical Scale
│ │
Apache #1 #2 #3 Bigger RAM
Web Server → scale-out tự nhiên bằng cách thêm nhiều Apache instances.
Reverse Proxy → nhiều connection → nhiều thread → memory tăng → scale bằng RAM trở nên đắt và có giới hạn.
Đây chính là lý do cần một reverse proxy được thiết kế tối ưu cho số lượng connection cực lớn — Nginx giải quyết đúng vấn đề này.