EP1. Monolithic Architecture là gì?

An application has a monolithic architecture if it contains the entire application code in a single codebase.

Một ứng dụng được gọi là có kiến trúc nguyên khối (monolithic architecture) khi toàn bộ mã nguồn của ứng dụng được chứa trong một codebase duy nhất.

Ứng dụng monolithic là một hệ thống tự chứa (self-contained)liên kết chặt chẽ (tightly coupled) giữa các thành phần. Điều này khác với kiến trúc microservices, nơi mỗi tính năng riêng biệt của ứng dụng có thể được triển khai bởi một hoặc nhiều microservice chuyên biệt.


Ví dụ: Ứng dụng mạng xã hội

Lấy ví dụ một mạng xã hội như Facebook. Ứng dụng bao gồm nhiều tính năng khác nhau như:

  • Bài đăng của người dùng
  • Hệ thống bình luận
  • Nhóm (Groups)
  • Chợ trực tuyến (Marketplace)
  • Quảng cáo hiển thị (Portal Ads)
  • Lưu trữ ảnh
  • Hệ thống gợi ý nội dung phù hợp và mới nhất cho người dùng
  • Livestream
  • Và nhiều tính năng khác

Trong kiến trúc monolithic, tất cả các module này đều được lập trình trong cùng một codebase duy nhất, liên kết chặt chẽ với nhau, thay vì được tách ra thành các microservice riêng biệt để vận hành từng tính năng.


Kiến trúc Monolithic

Sơ đồ bên dưới minh họa kiến trúc monolithic.

So với kiến trúc microservices, ứng dụng monolithic thường đơn giản hơn trong việc xây dựng, kiểm thử và triển khai.

Trong giai đoạn đầu của doanh nghiệp, các nhóm phát triển thường lựa chọn kiến trúc monolithic, với ý định sau này sẽ tách dần sang kiến trúc microservices phân tán.


Trade-off khi chuyển từ Monolithic sang Microservices

Tuy nhiên, đây là một sự đánh đổi (trade-off).

Cần lưu ý rằng việc refactor và viết lại mã nguồn đi kèm với chi phí rất lớn. Việc tách các tính năng ra khỏi một kiến trúc liên kết chặt chẽ và triển khai lại chúng thành các microservice độc lập đòi hỏi nhiều thời gian và nguồn lực.


Trường hợp thực tế

Trong thực tế, đã có những trường hợp các nhóm phát triển bắt đầu với kiến trúc monolithic và sau đó mở rộng sang kiến trúc microservices phân tán.

LinkedIn là một ví dụ điển hình. Tuy nhiên, cần lưu ý rằng LinkedIn được xây dựng trong bối cảnh mà điện toán đám mây và kiến trúc microservices vẫn chưa trở nên phổ biến.


Lựa chọn kiến trúc trong bối cảnh hiện nay

Trong bối cảnh công nghệ hiện nay, các ứng dụng thường được xây dựng và triển khai trên nền tảng cloud, đồng thời doanh nghiệp cần phát triển rất nhanh.

Vì vậy, một quyết định hợp lý là lựa chọn kiến trúc microservices phi trạng thái (stateless), liên kết lỏng lẻo (loosely coupled) ngay từ đầu, đặc biệt khi ứng dụng có nhiều tính năng riêng biệt và được kỳ vọng sẽ tăng trưởng nhanh trong tương lai.

Ngược lại, nếu yêu cầu hệ thống đơn giản, thì kiến trúc monolithic là lựa chọn phù hợp nhất. Việc triển khai microservices trong trường hợp này có thể trở nên dư thừa (overkill).

Suy cho cùng, việc quản lý nhiều module chạy phối hợp trong một môi trường phân tán không hề đơn giản.