Xin chào các bạn, đây là Series Architecture Pattern!
Trong bài trước Architecture Pattern - Phần 3, tôi đã giới thiệu kiến trúc hướng sự kiện (Event-driven architecture).
Trong bài này, chúng ta sẽ cùng tìm hiểu kiến trúc vi nhân (Microkernel architecture). Đây là mẫu kiến trúc phần mềm ít phổ biến hơn hai loại kiến trúc đã giới thiệu trước đó là kiến trúc phân lớp (Layered architecture) và kiến trúc hướng sự kiện (event-driven architecture).
1. Kiến trúc vi nhân là gì?
Kiến trúc vi nhân (Microkernel architecture), còn được gọi là Kiến trúc plug-in, là một mẫu kiến trúc phần mềm, trong đó, hệ thống được phân chia thành các module hoặc các thành phần nhỏ và độc lập (microkernel), chịu trách nhiệm cho các nhiệm vụ riêng biệt như xử lý dữ liệu, giao tiếp, lữu trữ, ...
Microkernel lấy cảm hứng từ kernel của hệ điều hành. Ý tưởng cốt lõi là hệ thống có một phần được gọi là core system (microkernel) thực hiện các chức năng quan trọng nhất, trong khi, để cho plug-in thực hiện các chức năng khác, dễ dàng tháo lắp theo yêu cầu của business.
Nhờ vậy, kiến trúc vi nhân linh hoạt và dễ mở rộng, cho phép nhà phát triển hoặc người dùng cuối dễ dàng thêm chức năng và tính năng bổ sung vào ứng dụng hiện có dưới dạng tiện ích mở rộng hoặc “plug-in” mà không ảnh hưởng đến chức năng cốt lõi của hệ thống.
2. Thành phần của kiến trúc vi nhân
Kiến trúc vi nhân bao gồm 4 thành phần chính:
- Hệ thống lõi (core system): hệ thống cốt lõi bao gồm các chức năng tối thiểu cần thiết để giúp hệ thống hoạt động. Ví dụ, core system của Eclipse IDE chỉ bao gồm một text editor có các tính năng cơ bản như mở file, sửa file và lưu file. IDE này chỉ trở nên mạnh mẽ hơn khi bạn thêm các tiện ích mở rộng vào.
- Plug-in: bao gồm các thành phần độc lập, có khả năng xử lý chuyên biệt, có các tính năng bổ sung và mã tùy chỉnh nhằm nâng cao hoặc mở rộng hệ thống cốt lõi. Bên cạnh đó, các plug-in phải độc lập với nhau và không phụ thuộc lẫn nhau trong quá trình hoạt động. Ví dụ, các tiện ích mở rộng cài vào trình duyệt Web như Google translate.
- Registry: hệ thống lõi sẽ dùng registry để xác định plug-in nào đang khả dụng và kết nối tới plug-in đó như thế nào.
- Contract: thể hiện mối quan hệ giữa hệ thống lõi và các mô-đun plug-in bao gồm hành vi, giao thức truy cập từ xa từ hệ thống lõi tới plug-in, dữ liệu đầu vào và đầu ra của các plug-in.
Kiến trúc vi nhân rất linh hoạt và có thể khác nhau hoàn toàn về cách triển khai.
3. Ví dụ về kiến trúc vi nhân
Ví dụ điển hình về kiến trúc vi nhân là trình duyệt Web.
- Core system: Browser engine sẽ thực hiện các chức năng quan trọng nhất bao gồm hiển thị trang web, quản lý DOM, biên dịch HTML, CSS và JavaScript và xử lý các network request.
- Plug-in: Bạn có thể cài thêm các tiện ích mở rộng hoặc ứng dụng lên trình duyệt như công cụ dịch Google Translate, Notion, BlockSite, ... Những tiện ích mở rộng này hoạt động độc lập và không phụ thuộc lẫn nhau trong quá trình hoạt động. Đồng thời, bổ sung các tính năng mà core system chưa support.
4. Các biến thể của kiến trúc vi nhân
Tùy thuộc vào kích thước và độ phức tạp, hệ thống lõi có thể được triển khai dưới dạng phân vùng kỹ thuật (technically partitioned) hay phân vùng theo domain. Mô hình cụ thể của hai loại này tương ứng là kiến trúc phân lớp (Layer architecture) hoặc kiến trúc Modular Monolith.
Lớp Presentation của hệ thống lõi có thể được nhúng trong hệ thống lõi hoặc được triển khai dưới dạng giao diện người dùng riêng biệt, còn hệ thống lõi cung cấp các dịch vụ phụ trợ. Trên thực tế, một giao diện người dùng riêng biệt cũng có thể được triển khai theo kiểu kiến trúc vi nhân.
5. Trường hợp nên dùng kiến trúc vi nhân
- Nhờ tính linh hoạt và dễ dàng tháo lắp plug-in nên kiến trúc vi nhân đặc biệt phù hợp với những sản phẩm hỗ trợ tính năng tiện ích mở rộng.
- Phù hợp với những sản phẩm có cấu hình phức tạp và cần deploy trên nhiều môi trường khác nhau. Các mô-đun plug-in có thể chỉ định các cấu hình và tính năng khác nhau dành riêng cho bất kỳ môi trường cụ thể nào.
- Phù hợp cho các ứng dụng có ngân sách eo hẹp và quỹ thời gian hạn chế.
6. Trường hợp không nên dùng kiến trúc vi nhân
- Tất cả các request phải đi qua hệ thống lõi, bất kể plug-in truy cập từ xa (remote) hay kết nối trực tiếp (point-to-point), nên core system sẽ trở thành nút thắt cổ chai của hệ thống.
- Nếu hệ thống lõi của bạn thường xuyên có sự thay đổi, sử dụng kiến trúc vi nhân sẽ không tận dụng được lợi thế plug-in để thêm các tính năng bổ sung mà kiến trúc này mang lại.
7. Tổng kết
- Kiến trúc vi nhân (Microkernel architecture) nằm trong nhóm kiến trúc monolithic.
- Kiến trúc vi nhân bao gồm bốn thành phần chính: hệ thống lõi (core system), các mô-đun plug-in, registry và contract.
- Kết nối giữa plug-in và core system có thể là kết nối trực tiếp hoặc kết nối từ xa thông qua các giao thức như REST, RPC, ...
- Dưới đây là bảng điểm xếp hạng cho kiến trúc vi nhân trích trong sách Software Architecture Patterns của Mark Richards. Kiến trúc này được đánh giá cao nhất ở mức độ đơn giản và chi phí thấp. Tuy nhiên, kiến trúc này được đánh giá là chưa tốt ở khả năng mở rộng và khả năng chịu lỗi.
8. Tài liệu tham khảo
- Fundamentals of Software Architecture - Mark Richards
- Software Architecture Patterns - Mark Richards
- Software Architecture Monday - Mark Richards
Bài viết liên quan
Architecture Pattern - Phần 6: Kiến trúc hướng không gian (Space-based architecture)
Mar 05, 2024 • 11 min read
Architecture Pattern - Phần 5: Giới thiệu kiến trúc Microservice
Mar 01, 2024 • 7 min read
Architecture Pattern - Phần 3: Kiến trúc hướng sự kiện (Event-driven architecture)
Jan 24, 2024 • 11 min read
Architecture Pattern - Phần 2: Kiến trúc phân lớp (Layered architecture)
Jan 24, 2024 • 7 min read
Architecture Pattern - Phần 1: Các cách phân loại kiến trúc phần mềm
Jan 16, 2024 • 6 min read
Software Architecture là gì? Sự quan trọng của kiến trúc phần mềm
Jan 08, 2024 • 10 min read