Thường là không. Lời khuyên phổ biến là monolith first: bắt đầu bằng một monolith được module hoá tốt, tách service chỉ khi có lý do cụ thể.
Vì sao chưa nên tách:
- Ranh giới nghiệp vụ ở giai đoạn đầu chưa ổn định. Cắt sai chỗ thì mỗi thay đổi phải sửa và deploy nhiều service cùng lúc — mất hết lợi ích của việc tách.
- Trong monolith, di chuyển một ranh giới chỉ là refactor trong IDE. Giữa hai service, đó là đổi API, migrate dữ liệu, phối hợp deploy.
- Microservice đổi lời gọi hàm trong process thành lời gọi mạng — có latency, có timeout, có lỗi từng phần. Chi phí đó phải được trả lại bằng một lợi ích thật.
Cách làm thay thế — modular monolith: một codebase, một lần deploy, nhưng chia module rõ ràng theo nghiệp vụ; mỗi module có schema/bảng riêng, chỉ gọi nhau qua interface công khai, cấm truy vấn thẳng bảng của module khác. Khi cần tách, module nào ranh giới đã sạch thì kéo ra thành service.
Lý do chính đáng để tách: một phần hệ thống cần scale riêng, cần deploy độc lập theo nhịp khác, cần công nghệ khác, hoặc số người cùng sửa một codebase đã gây tắc nghẽn.