Kiến trúc Modular Monolith vs Microservices: Bài học đắt giá về việc phức tạp hóa hạ tầng quá sớm
Nhiều công ty công nghệ và startup hàng đầu đang đảo ngược quyết định, hợp nhất hàng chục microservices phân mảnh quay trở lại thành một khối Monolith duy nhất: Phân tích chi phí vận hành và tính chịu lỗi thực tế.
Điểm nhấn then chốt (Key Takeaways)
- Ảo tưởng về Microservices: Rất nhiều đội ngũ nhỏ áp dụng kiến trúc phân tán chỉ vì chạy theo trào lưu của các tập đoàn khổng lồ như Netflix hay Amazon.
- Cái giá của sự phân tán: Độ trễ mạng (Network Latency), sự cố nhất quán dữ liệu phân tán và chi phí gỡ lỗi xuyên dịch vụ tăng gấp 10 lần.
- Modular Monolith: Một khối mã nguồn duy nhất nhưng được phân chia ranh giới module nghiêm ngặt là điểm cân bằng hoàn hảo.
- Chỉ nên tách dịch vụ khi thực sự xuất hiện nút thắt cổ chai về mở rộng quy mô hoặc quyền tự chủ của các đội ngũ độc lập trên 50 kỹ sư.
1. Cơn sốt Microservices và những vết xe đổ trong ngành công nghệ
Khoảng 7 năm trước, một làn sóng cuồng nhiệt mang tên Microservices đã quét qua toàn bộ giới phát triển phần mềm. Từ các công ty khởi nghiệp có 5 kỹ sư cho đến các doanh nghiệp vừa và nhỏ, ai ai cũng tin rằng chia nhỏ hệ thống thành hàng chục dịch vụ độc lập chạy trong container Docker và điều phối bằng Kubernetes mới là chuẩn mực của sự chuyên nghiệp.
Tuy nhiên, thực tế khắc nghiệt đã sớm giáng một đòn đau vào nhiều dự án. Khi một thao tác đơn giản như đặt mua một món hàng đòi hỏi phải gọi tuần tự qua 6 microservices khác nhau thông qua mạng, hệ thống bắt đầu bộc lộ sự mong manh chết người. Chỉ cần một dịch vụ phản hồi chậm hoặc bị đứt kết nối mạng, toàn bộ giao dịch sẽ bị treo hoặc rơi vào trạng thái dữ liệu không nhất quán.
"Quy tắc đầu tiên của việc phân tán hệ thống là: Đừng phân tán hệ thống nếu bạn chưa thực sự bắt buộc phải làm như vậy. Hầu hết các vấn đề về quy mô đều có thể giải quyết tốt hơn bên trong một khối Monolith được thiết kế ngăn nắp."
2. Cú quay xe lịch sử của đội ngũ Amazon Prime Video
Một trong những sự kiện gây chấn động nhất cộng đồng kiến trúc phần mềm là bài viết kỹ thuật do chính các kỹ sư Amazon Prime Video công bố. Đội ngũ giám sát chất lượng luồng video của họ ban đầu được xây dựng trên kiến trúc serverless phân tán hoàn toàn, sử dụng AWS Lambda và AWS Step Functions.
Khi lượng người xem bùng nổ, chi phí truyền tải dữ liệu giữa các dịch vụ và phí điều phối trạng thái của Step Functions đã tăng vọt ngoài tầm kiểm soát. Đội ngũ kỹ sư đã đưa ra quyết định dũng cảm: đập bỏ toàn bộ các microservices serverless, gom tất cả các thành phần lại thành một khối Monolith duy nhất chạy trên máy chủ ảo EC2. Kết quả thật kinh ngạc: chi phí vận hành hạ tầng đám mây giảm tới 90% và độ ổn định của hệ thống tăng vọt.
3. Sự phục hưng của kiến trúc Modular Monolith
Trước bài học của Amazon cùng các tên tuổi lớn như Shopify và Basecamp, ngành công nghiệp đang quay trở về với kiến trúc Modular Monolith. Đây là mô hình duy trì toàn bộ mã nguồn trong một ứng dụng duy nhất, chia sẻ cùng một cơ sở dữ liệu để tận dụng tính năng giao dịch toàn vẹn (ACID Transactions), nhưng bảo đảm các ranh giới module rõ ràng.
Việc giao tiếp giữa các thành phần diễn ra tức thì thông qua lời gọi hàm trong bộ nhớ (In-memory Function Calls) với độ trễ bằng 0, thay vì các cuộc gọi HTTP mạng chập chờn. Đây là mô hình lý tưởng mà hầu hết các dự án khởi nghiệp tại Việt Nam nên áp dụng trước khi mơ mộng đến quy mô của Netflix.
Nguồn tin & Tài liệu tham khảo chính thống
Bài viết được tổng hợp, đối chiếu và biên dịch từ các ấn phẩm và báo cáo kỹ thuật:
- [1]MonolithFirst: Why you should almost always start with a monolith— (Martin Fowler Architecture Essays)
- [2]Scaling up Prime Video: Moving from distributed serverless to monolithic architecture— (Amazon Prime Video Tech Blog)
Ban biên tập Công nghệ Oloka.net
Bài viết được biên soạn và kiểm chứng độc lập bởi đội ngũ phóng viên công nghệ Oloka.net. Chúng tôi tuân thủ các nguyên tắc minh bạch dữ liệu và trích dẫn nguồn tin gốc. Mọi phản hồi xin vui lòng liên hệ tòa soạn.