Khi hệ thống tăng traffic, bạn sẽ gặp:
- Response chậm
- CPU cao
- DB quá tải
Đây là lúc cần Performance Tuning.
#Performance Tuning là gì?
Là quá trình tìm và tối ưu các điểm nghẽn (bottleneck) trong hệ thống.
#Xác định Bottleneck
3 nguồn chính
- CPU
- Database
- I/O (network, disk)
Không đo = không tối ưu
#Profiling Tools
#Laravel Debugbar
- Query
- Time execution
#Laravel Telescope
- Request
- Job
- Exception
#Log + APM
- Sentry
- New Relic
#Database Optimization (quan trọng nhất)
#N+1 Query
❌ Sai:
foreach ($users as $user) {
echo $user->posts;
}
✅ Đúng:
User::with('posts')->get();
#Index
CREATE INDEX idx_users_email ON users(email);
#Select field cần thiết
User::select('id', 'name')->get();
#Caching Strategy
#Query Cache
Cache::remember('users', 60, fn() => User::all());
#Config Cache
php artisan config:cache
#Route Cache
php artisan route:cache
#View Cache
php artisan view:cache
#Queue Optimization
- Đưa task nặng vào queue
- Tăng worker
#PHP-FPM Tuning
Ví dụ config:
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
Tùy theo RAM/CPU
#HTTP Optimization
- Gzip
- HTTP/2
- CDN
#Real Case Production
API chậm
- Fix N+1
- Add index
- Cache response
Tốc độ tăng x10
#Anti-pattern
-
Optimize sớm Premature optimization
-
Không đo đạc Tối ưu sai chỗ
-
Lạm dụng cache Data stale
#Performance Checklist
- Query đã optimize?
- Có index chưa?
- Có cache chưa?
- Có queue chưa?
#Mindset Senior
Junior:
Code chạy là được
Senior:
Code phải nhanh và chịu tải tốt
#Câu hỏi thường gặp (Interview)
1. Bottleneck là gì?
Là điểm gây chậm trong hệ thống
2. N+1 query là gì?
Là việc query lặp lại nhiều lần gây chậm
3. Cache giúp gì?
Giảm load DB và tăng tốc
4. Khi nào nên dùng queue?
Khi task nặng, không cần xử lý ngay
5. Tại sao không nên optimize sớm?
Vì có thể tối ưu sai chỗ
#Kết luận
Performance không phải optional.
Nó quyết định hệ thống sống hay chết khi scale.
Tối ưu đúng giúp:
- Tăng tốc độ
- Giảm chi phí
- Tăng trải nghiệm user