Monolith và microservices: khi nào chọn cái nào?
Đáp án mẫu
Monolith triển khai toàn bộ ứng dụng như một khối. Kiến trúc microservices chia nó thành các dịch vụ nhỏ được triển khai độc lập, mỗi dịch vụ sở hữu dữ liệu riêng và giao tiếp qua mạng.
Điểm mạnh của monolith: đơn giản để xây dựng, kiểm thử, triển khai và gỡ lỗi, không có lời gọi mạng giữa các module, giao dịch dễ dàng và chi phí vận hành thấp. Nó phù hợp với đội nhỏ, sản phẩm mới có ranh giới chưa rõ, hoặc quy mô vừa phải. Một modular monolith được cấu trúc tốt giữ ranh giới nội bộ rõ ràng và có thể tách ra sau.
Điểm mạnh của microservices: triển khai và mở rộng độc lập, đội có tính tự chủ, cô lập lỗi, và tự do chọn công nghệ cho từng dịch vụ. Cái giá là độ phức tạp của hệ phân tán: lỗi mạng, nhất quán dữ liệu khi không có giao dịch đơn giản, service discovery, khả năng quan sát và gánh nặng vận hành lớn.
Tôi bắt đầu với monolith trừ khi có nhu cầu thực sự, như nhiều đội cản trở nhau hoặc nhu cầu mở rộng rất khác nhau. Microservices giải quyết vấn đề tổ chức và mở rộng, không phải vấn đề chất lượng code.
Ý chính
- Monolith: đơn giản và rẻ để vận hành; hợp với đội nhỏ và ranh giới chưa rõ
- Microservices: triển khai và mở rộng độc lập, đổi lại độ phức tạp phân tán
- Modular monolith là điểm khởi đầu tốt
Câu hỏi nối tiếp thường gặp
- Bạn quyết định vẽ ranh giới dịch vụ ở đâu?
- Bạn di chuyển từng bước từ monolith sang các dịch vụ thế nào?
Lỗi thường gặp
- Chọn microservices mặc định vì đang là xu hướng
- Tách dịch vụ nhưng vẫn dùng chung một database, tạo ra distributed monolith