Khi hệ thống của bạn bắt đầu có nhiều user hơn, bạn sẽ gặp:
- Server quá tải
- Query chậm
- Response time tăng
Đây là lúc bạn cần System Design.
#System Design là gì?
Là cách bạn thiết kế kiến trúc hệ thống để đáp ứng scale, performance và reliability.
#Monolith vs Microservices
#Monolith
- Một codebase
- Deploy cùng nhau
Ưu điểm:
- Đơn giản
- Dễ phát triển ban đầu
Nhược điểm:
- Khó scale
- Khó maintain khi lớn
#Microservices
- Nhiều service nhỏ
- Deploy độc lập
Ưu điểm:
- Scale từng phần
- Linh hoạt
Nhược điểm:
- Phức tạp
- Khó debug
Rule:
- Bắt đầu với monolith
- Scale → tách microservices
#Scaling là gì?
#Vertical Scaling
- Tăng CPU, RAM
Dễ nhưng giới hạn
#Horizontal Scaling
- Thêm nhiều server
Khó hơn nhưng scalable
#Load Balancing
Phân phối request đến nhiều server
Ví dụ:
- Nginx
- AWS ELB
Giúp:
- Tăng performance
- Tăng availability
#Database Design Basics
#Normalization
- Tránh duplicate data
#Index
- Tăng tốc query
#Read/Write Split
- 1 DB write
- N DB read
Scale database
#Caching Layer
- Redis
- CDN
Giảm load hệ thống
#Real Case Production
#Case: High traffic app
- Load balancer
- Multiple app servers
- Redis cache
- DB replication
#Anti-pattern
-
Over-engineering Dùng microservices quá sớm
-
Không dùng cache DB quá tải
-
Single point of failure Hệ thống dễ sập
#Performance Tips
- Cache nhiều layer
- Optimize DB
- Scale theo bottleneck
#Mindset
Junior:
Code chạy là được
Senior:
Hệ thống phải chịu tải và ổn định
#Câu hỏi thường gặp (Interview)
1. Monolith và Microservices khác nhau như thế nào?
Monolith là một khối, microservices là nhiều service nhỏ độc lập
2. Horizontal scaling là gì?
Thêm nhiều server để xử lý request
3. Load balancer dùng để làm gì?
Phân phối request đến nhiều server
4. Index trong database là gì?
Giúp tăng tốc truy vấn
5. Khi nào nên dùng microservices?
Khi hệ thống lớn, cần scale và tách domain
#Kết luận
System Design là kỹ năng bắt buộc nếu bạn muốn đi xa.
Không chỉ viết code, mà còn phải thiết kế hệ thống.
Đây là bước chuyển từ developer → engineer → architect.