
1. Monolithic system (Ví dụ tệ)
1.1. Kiến trúc
1.1.1. Một service phải đảm nhiệm nhiều nhiệm vụ
1.1.2. Nhiều dev làm việc trên cùng một repo
1.2. Vấn đề với deployment
1.2.1. Phải deploy cả service
1.2.1.1. Thay đổi ở phần nhỏ A cần deploy lại hết các phần khác
1.2.2. Làm việc song song dễ bị conflict
1.2.2.1. Rollback rất khó
1.3. Chung global state
1.3.1. Các thành phần phụ thuộc vào nhau
1.3.1.1. Thay đổi ở một phần dẫn đến thay đổi global state => ảnh hưởng đến phần khác
1.3.2. Khó đánh giá một phần chạy độc lập sẽ ra sao
1.4. Monitoring
1.4.1. Khó theo dõi hiệu năng của một phần riêng biệt
2. Microservice system (Ví dụ đẹp)
2.1. Kiến trúc
2.1.1. Mỗi service đảm nhận một nhiệm vụ
2.1.2. Chỉ thay đổi trên service nhất định
2.1.3. Có thể làm việc song song
2.1.4. Phức tạp hơn, dễ maintain hơn
2.2. Deployment
2.2.1. Chỉ redeploy lại service cần thiết
2.3. Scaling
2.3.1. Scale một service cụ thể
2.3.2. Có thể deploy toàn bộ trên một node
2.3.2.1. Giảm network latency
3. Best practice
3.1. Mỗi service có một quyền cụ thể, ranh giới rõ ràng
3.1.1. Request → Task → Response
3.2. Tránh Async job trong cùng một service
3.2.1. Sử thêm queue và một background service