Facebook Pixel

Architecture Pattern - Phần 4: Kiến trúc vi nhân (Microkernel architecture)

24 Jan, 2024

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).

Architecture Pattern - Phần 4: Kiến trúc vi nhân (Microkernel architecture)

Mục Lục

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 - Nguồn: Software Architecture Patterns - Mark Richards

Kiến trúc vi nhân bao gồm 4 thành phần chính:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
Kết nối từ xa giữa plug-in và core system thông qua REST - Fundamentals of Software Architecture - Mark Richards

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.

Kiến trúc vi nhân của 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.

Biến thể phân vùng kỹ thuật của kiến trúc vi nhân - Nguồn: Fundamentals of Software Architecture - Mark Richards
Biến thể phân vùng theo domain của kiến trúc vi nhân - Nguồn: Fundamentals of Software Architecture - Mark Richards

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.

User Interface được triên khai riêng biệt thành một plug-in - Nguồn: Fundamentals of Software Architecture - Mark Richards

User Interface được triển khai riêng biệt thành một deployment unit - Nguồn: Fundamentals of Software Architecture - Mark Richards
User Interface được triển khai thành riêng thành một microkernel - Nguồn: Fundamentals of Software Architecture - Mark Richards

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.
Điểm xếp hạng cho kiến trúc vi nhân - Nguồn: Software Architecture Patterns - Mark Richards

8. Tài liệu tham khảo

  1. Fundamentals of Software Architecture - Mark Richards
  2. Software Architecture Patterns - Mark Richards
  3. Software Architecture Monday - Mark Richards

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab