1. Pros of Monolithic Architecture
Tính đơn giản (Simplicity)
Các ứng dụng monolithic đơn giản hơn trong việc phát triển, kiểm thử, triển khai, giám sát và quản lý, vì mọi thứ đều nằm trong một repository duy nhất.
Việc làm việc với một repository duy nhất giúp giữ mọi thứ ở mức tương đối đơn giản, đồng thời tránh được sự phức tạp phát sinh khi xử lý và giám sát nhiều thành phần được triển khai tách biệt.
2. Cons of Monolithic Architecture
Continuous Deployment
Continuous deployment trở nên khó khăn trong các ứng dụng monolithic, bởi vì chỉ một thay đổi nhỏ trong mã nguồn ở một tầng hoặc một tính năng nào đó cũng bắt buộc phải triển khai lại toàn bộ ứng dụng.
Regression Testing
Hệ quả của việc triển khai lại toàn bộ ứng dụng là cần phải thực hiện kiểm thử hồi quy toàn diện sau mỗi lần deploy.
Một thay đổi nhỏ ở một tính năng có thể ảnh hưởng nghiêm trọng đến các tính năng khác, do tất cả các thành phần đều liên kết chặt chẽ với nhau.
Single Point of Failure
Ứng dụng monolithic tồn tại Single Point of Failure.
Chỉ cần một bug trong bất kỳ tính năng nào cũng có thể làm sập toàn bộ hệ thống.
Scalability Issues
Bảo trì và mở rộng là một thách thức lớn đối với ứng dụng monolithic, vì các thành phần bị liên kết quá chặt.
Khi kích thước codebase ngày càng tăng, việc quản lý và phát triển hệ thống trở nên phức tạp hơn nhiều.
Cannot leverage heterogeneous technologies
Việc xây dựng các ứng dụng phức tạp bằng kiến trúc monolithic là rất khó, do cần sử dụng nhiều công nghệ và ngôn ngữ lập trình khác nhau cho các tính năng riêng biệt.
Việc sử dụng nhiều ngôn ngữ lập trình trong cùng một codebase thường rất rối rắm và đa phần là không khả thi.
Các công nghệ dị thể thường gặp vấn đề về tương thích, và kiến trúc microservices là lựa chọn phù hợp hơn để tận dụng chúng.
Ví dụ, việc kết hợp Java và Node.js trong cùng một codebase là rất khó, và nói “khó” ở đây vẫn còn là cách nói khá lạc quan — thậm chí có thể là không khả thi.
Not cloud-ready, hold state
Nhìn chung, ứng dụng monolithic không thực sự cloud-ready, vì chúng có thể lưu trạng thái (state) trong các biến tĩnh (static variables).
Mặc dù không phải tất cả ứng dụng monolithic đều được thiết kế như vậy, nhưng trên thực tế, các ứng dụng legacy thường sử dụng biến tĩnh khá nhiều.
Để một ứng dụng cloud-native và hoạt động nhất quán trên môi trường cloud, hệ thống cần phải stateless.
3. When should you pick a Monolithic Architecture?
Ứng dụng monolithic phù hợp nhất với các trường hợp yêu cầu đơn giản, khi mức độ phức tạp của hệ thống thấp.
Ví dụ:
- Ứng dụng to-do list
- Ứng dụng tin tức thể thao
- Ứng dụng tính thuế nội bộ của doanh nghiệp
- Các công cụ công khai đơn giản tương tự
Đây là những trường hợp mà doanh nghiệp chắc chắn ứng dụng chỉ có số lượng tính năng giới hạn, độ phức tạp thấp, và không cần mở rộng lớn trong tương lai gần.