Performance Principles
🚀 High Performance Systems = Efficiency × Concurrency × Capacity
Một hệ thống chậm không phải vì request tự nhiên chậm.
Nguyên nhân thực sự gần như luôn là:
Request Queue Buildup (Hàng đợi request ngày càng dài)
Khi request đến nhanh hơn tốc độ hệ thống xử lý, queue sẽ tăng lên và latency bắt đầu tăng theo.
Incoming Requests
│
▼
┌────────────────────┐
│ Request Queue │ ← Queue bắt đầu tăng
└────────────────────┘
│
▼
Application
│
▼
Response
Latency = Waiting Time + Processing Time
Điều gì tạo ra Queue?
Queue Buildup
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
Inefficient Low Insufficient
Processing Concurrency Capacity
Nói cách khác:
- xử lý request chưa tối ưu
- không xử lý đủ nhiều request cùng lúc
- phần cứng không đủ
Ba nguyên nhân này dẫn tới ba nguyên lý tối ưu performance.
Principle 1 — Efficiency
Efficiency tập trung vào:
Làm cho MỘT request chạy nhanh nhất có thể.
Ở đây chỉ xét:
Serial Request
Request 1
│
▼
Processing
│
▼
Response
↓
Request 2
Chỉ có 1 request trong hệ thống.
Latency hoàn toàn phụ thuộc vào việc request đó được xử lý hiệu quả tới đâu.
Các yếu tố tạo nên Efficiency
Efficiency
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
Resource Logic & Algo Data Storage
Utilization & Database
│
▼
Caching
1. Efficient Resource Utilization
Tận dụng tốt tài nguyên:
CPU
Memory
Disk
Network
Ví dụ:
- ❌ CPU idle nhưng thread đang block
- ❌ Đọc file nhiều lần
- ❌ Network call dư thừa
Mục tiêu:
sử dụng CPU, RAM, Disk, Network đúng lúc và tối đa hiệu quả.
2. Efficient Logic
Thuật toán quyết định lượng công việc CPU phải làm.
O(n²)
↓
O(n log n)
↓
O(1)
Bao gồm:
- Algorithm
- Database Query
- Loop
- Nested Loop
3. Efficient Data Storage
Cấu trúc dữ liệu quyết định tốc độ truy xuất.
Search
List
O(n)
↓
HashMap
O(1)
Database cũng tương tự:
Without Index
Table Scan
↓
With Index
Index Seek
4. Caching
Đây là phần mang lại ROI cao nhất.
Client
↓
Cache
↓
Database
Nếu cache hit:
Request
↓
Cache
↓
Response
Database không cần chạy.
Đây là cách tăng performance rất lớn mà thay đổi code không nhiều.
Principle 2 — Concurrency
Sau khi mỗi request đã nhanh, ta cần xử lý được nhiều request cùng lúc.
Đây chính là Concurrency.
Serial vs Concurrent
Serial
Request1
↓
Done
↓
Request2
↓
Done
↓
Request3
Tổng thời gian:
T1 + T2 + T3
Concurrent
Request1 ──┐
│
Request2 ──┼──► Processing
│
Request3 ──┘
Nhiều request chạy đồng thời.
Throughput tăng lên rất nhiều.
Concurrency quan tâm điều gì?
Không còn quan tâm:
- thuật toán
- cache
- index
Những thứ đó đã tối ưu ở Efficiency.
Concurrency chỉ quan tâm hai thứ:
Concurrency
│
├──────────► Queuing
│
└──────────► Coherence
Queuing
Ví dụ có 20 thread, CPU chỉ xử lý được 8:
20 Requests
↓
Waiting Queue
↓
8 CPU Threads
Một số request phải chờ.
Latency tăng.
Coherence
Khi nhiều request cùng truy cập tài nguyên:
Thread A
↓
Lock
↓
Thread B waiting
Hoặc:
Shared Memory
↓
Synchronization
↓
Contention
Nếu thiết kế không tốt, concurrency sẽ làm hệ thống chậm hơn.
Principle 3 — Capacity
Nếu phần mềm đã tối ưu, concurrency cũng tốt, nhưng tài nguyên vẫn full, thì vấn đề nằm ở Capacity.
Application
│
▼
CPU 100%
RAM 95%
Disk Busy
Network Full
Giải pháp lúc này:
Upgrade CPU
More RAM
SSD
More Machines
Horizontal Scaling
Vertical Scaling
Khi nào nên tối ưu cái gì?
Performance Problem
│
┌────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
Efficiency Concurrency Capacity
│ │ │
▼ ▼ ▼
Faster Request More Requests Bigger Hardware
Framework để phân tích Performance
High Performance System
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Efficiency Concurrency Capacity
│ │ │
▼ ▼ ▼
Resource Use Queuing CPU
Logic Locking Memory
Algorithms Contention Disk
Data Structure Scheduling Network
DB Index Thread Pool Scaling
Cache Async IO Load Balancer
Mental Model
Khi gặp một hệ thống chậm, đừng vội tăng server.
Hãy tự hỏi theo đúng thứ tự:
Performance Issue?
│
▼
Is one request slow?
│
YES
│
▼
Efficiency
Nếu mỗi request đã nhanh:
Many Requests Slow?
↓
Concurrency
Nếu vẫn không đủ:
Hardware Full?
↓
Capacity
Kết luận
Mọi bài toán performance đều có thể bắt đầu bằng một câu hỏi rất đơn giản:
Vấn đề nằm ở Efficiency, Concurrency hay Capacity?
- Efficiency giúp mỗi request chạy nhanh hơn.
- Concurrency giúp xử lý nhiều request cùng lúc.
- Capacity giúp hệ thống có nhiều tài nguyên hơn.
Đây là một mental model mạnh để phân tích hiệu năng, tránh tối ưu sai chỗ (ví dụ tăng server khi bottleneck thực sự nằm ở thuật toán hoặc lock contention). Với vai trò Tech Lead hay Software Architect, việc phân loại đúng vấn đề trước khi đề xuất giải pháp thường quan trọng hơn chính giải pháp đó.