Tại sao chúng tôi quay trở lại với Modular Monolith
Các đội ngũ phần mềm đang thay đổi chiến lược của mình. Nhiều đội ngũ đã dành nhiều năm để chia nhỏ các ứng dụng thành microservices. Giờ đây, họ đang lắp ghép các mảnh ghép đó lại với nhau. Họ không xây dựng những monolith cũ kỹ, lộn xộn. Họ đang xây dựng các modular monolith.
Microservices tạo ra những chi phí ẩn. Các hệ thống phân tán làm tăng thêm sự phức tạp khổng lồ. Nhiều đội ngũ áp dụng microservices vì chạy theo xu hướng, chứ không phải vì họ thực sự cần quy mô đó. Nếu bạn có một đội ngũ nhỏ, microservices có thể đang làm chậm tiến độ của bạn.
Một modular monolith mang lại cho bạn những ưu điểm tốt nhất của cả hai thế giới. Nó vẫn là một đơn vị triển khai duy nhất, nhưng mã nguồn được tổ chức thành các module chặt chẽ. Bạn có được các ranh giới rõ ràng mà không phải chịu chi phí cao khi vận hành một hệ thống phân tán.
So sánh hai cách tiếp cận:
• Triển khai: Monolith sử dụng một đơn vị duy nhất. Microservices sử dụng nhiều đơn vị. • Ranh giới: Monolith sử dụng các quy tắc mã nguồn chặt chẽ. Microservices sử dụng mạng. • Giao tiếp: Monolith sử dụng các lời gọi hàm đơn giản. Microservices sử dụng các lời gọi mạng. • Chi phí vận hành: Monolith có chi phí vận hành thấp. Microservices có chi phí cao.
Khi nào bạn nên chọn một modular monolith?
- Đội ngũ của bạn có ít hơn 50 kỹ sư.
- Bạn cần giảm chi phí hạ tầng đám mây.
- Bạn muốn đơn giản hóa việc gỡ lỗi (debugging) và kiểm thử.
- Các dịch vụ của bạn thường cần được triển khai cùng nhau.
Các công ty thực tế đã và đang thực hiện điều này. Shopify sử dụng cách tiếp cận modular để quản lý hàng triệu người bán. Amazon Prime Video đã chuyển một khối lượng công việc cụ thể từ microservices trở lại thành monolith. Họ đã thấy chi phí hạ tầng giảm tới 90%.
Đừng xây dựng cho quy mô của Netflix nếu bạn là một đội ngũ nhỏ. Hãy bắt đầu với kiến trúc modular. Chỉ tách một dịch vụ ra khi dữ liệu cho thấy bạn thực sự cần làm điều đó.
Sử dụng danh sách kiểm tra này để xem liệu bạn có cần hợp nhất lại hay không:
- Bạn có đang dành nhiều thời gian để gỡ lỗi các kết nối dịch vụ hơn là xây dựng các tính năng không?
- Hóa đơn đám mây của bạn có đang tăng nhanh hơn số lượng người dùng không?
- Bạn có ít hơn 5 kỹ sư DevOps để quản lý nhiều dịch vụ không?
- Các kỹ sư có đang phải truy vết một yêu cầu qua 3 dịch vụ trở lên để tìm lỗi không?
Nếu câu trả lời của bạn là có, modular monolith có lẽ là bước đi đúng đắn.
Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi