Framework Engineering - System Design
Here is solutions for Framework Engineering - System Design.
1. Các tính chất
- Scalability: Handle được cả 2.
- Latency
- Throughput
- Bình thường thì tồn tại độc lập, tỉ lệ nghịch khi server bị bottleneck.
- Availability:
- Sài mà không down app
- Reliability
- Vừa không có lỗi + vừa không được down time.
- Reliability = Availability + Fault Tolerant + Correctness.
2. Components:
- Web Server: API gateway, used for authenticate, authorization, routing.
- Application Server: route to handle logic.
- Load balancer: route traffic, check service nào availability thì route vô.
- Database: SQL, NoSQL.
- Cache: client cache, server cache.
- CDN: theo region.
- Message Queue: giảm tải block server khi high throughput.
3. Consitency
- Strong Consistency: dữ liệu nhất định phải được cập nhật.
- Eventually Consistency: 1 số pods cập nhật, 1 số pods update data.
- Weak Consistency: data không cập nhật luôn, rất lâu mới cập nhật.
4. Availability
- Replication: cách store data.
- Strong replication
- Asynchronus replication
- Fail Over: cái này hư switch sang cái khác.
- Quorum: trong hệ thống không có master-slave, việc read data cần 3/5 người thống nhất với nhau ⇒ mới ra số mới nhất.
5. CP and AP:
- CP: bắt buộc phải nhất quán đợi dữ liệu đúng hết.
- AP: dữ liệu read ra phải có trễ
6. Database
1. Sharding and Database Choice.
- Range shard.
- Hash shard.
- Consistency Hashing.
- Không shard lệch 1 cột nhiều data.
2. Index
- Không shard 1 cột quá lệch chỉ có Male/Female.
- Dùng JOIN vs WHERE đối với index.
3. SQL or NoSQL
7. Load balancing
1. Load balancing 4: chỉ route by IP.
2. Load balancing 7: Route được theo header, ví dụ đường dẫn /video/720p thì vào video chất lượng thấp hơn /video/1080p.
3. Một người điều phối traffic, tránh không cho 1 server quá tải.
8. Caching
1. Cache strategy.
2. Dùng để read trực tiếp pre-compute data và giảm tải database.
9. Message Queue
1. Xử lý bất đồng bộ không nghẽn server.
2. Dùng cơ chế backpressure khi queue đầy
1. Producer gửi ít lại batching nhiều hơn.
2. Nhiều consumer nhận hơn.
3. Queue không cho phép consumer gửi nữa.
10. Idempotency, Locking
1. Luôn luôn dùng khi retry.
2. Client gen 1 cái key để gửi ⇒ Nhiều requests treat như 1.
3. Persimistic locking: dẫn đến deadlock.
4. Optimistic locking: giảm thiếu deadlock và tăng tốc độ.
11. TCP and UDP:
- TCP có quản lý thứ tự gói tin.
- TCP có cách retry missing packet.
- Dùng TCP: cho những connection quan trọng.
- Dùng UDP: cho những case streaming.
12. RPC
- Binary gọi nhanh hơn.
- Cần HTTP 2
- Service - service dùng gGRC binary nhanh hơn, hỗ trợ streaming.
13. REST thường gọi từ browser client-server
- Có thể dùng HTTP 1/1.
- REST store json format không tối ưu bằng gRPC.
- REST phổ biến hơn đối với developer, dễ debug hơn
14. High Availability and Fault Tolerance
- High Availability (HA): giảm thiểu downtime, nhưng vẫn có downtime khi switch server.
- Fault Tolerance (FT): không xảy ra lỗi nào luôn, ví dụ active-active.
- Uptime: độ sẵn sàng
- SLA: service agreement
- MTBF: thời gian trung bình giữa các lần hỏng.
- MTTR: thời gian phục hồi sau failure.
15. Security
1. Authentication
- Session in cookie
- JWT in token
2. Authorization
- RBAC
- ABAC.
- OAuth2: người dùng cho phép gì, thì third party cho truy cập đó thôi.
3. API Security
- API Key
- CORS
- Rate limiting.
- Input validation
4. Data Security
1. SSL for hashing packet.
2. Lưu mật khẩu bằng hash + salt ⇒ salt là thêm trực tiếp vào mật khẩu từ bit A → bit B
```bash
bcrypt.hash("password", 12)
bcrypt.hash("password", 12)
```
```bash
$2b$12$SALT_AhashA
$2b$12$SALT_BhashB
```
3. Ngăn chặn XSS: encape input người dùng.
4. Ngăn CSRF: cross-site cookie, need so add SameSite=Strict và HttpOnly, Secure = True.
16. Monitoring and Observability
1. Monitoring: trả lời câu hỏi chuyện gì đang xảy ra
- Collect thông tin về CPU, RAM, traffic.
- Alert nếu nó vượt quá ngưỡng, ví dụ 1% traffic lỗi 500.
- Prometheus: collect data.
- Grafana: visualize dashboard.
2. Obvervability: tại sao điều này xảy ra
- Logging
- Tracing: qua nhiều microservices.
- Using: ElasticSearch, Jaeger.
December 16, 2025