Rì-viu 5 Phút: Các Mẫu Kiến Trúc Phần Mềm Không Thể Bỏ Qua
Khi ai đó đào sâu vào thế giới của Kiến trúc Phần mềm, một ngày nào đó họ sẽ cần học những kiến thức cơ bản về các mẫu Kiến trúc Phần mềm. Khi tôi mới học code, tôi không biết tìm đâu ra nguồn tài liệu để học, nhất là các tài liệu cụ thể và dễ hiểu.
Mãi cho tới khi tôi tìm thấy cuốn sách Software Architecture Patterns của Mark Richards. Dưới đây, tôi sẽ chia sẻ cho các bạn một số phần quan trọng của cuốn sách và các mẫu kiến trúc. Để có cái nhìn toàn diện và kiến thức cụ thể hơn, tôi vẫn khuyên các bạn nên đọc sách nhé!
Tại sao bạn nên học các Mẫu kiến trúc cơ bản như một Kỹ sư phần mềm?
Tôi tin rằng có rất nhiều câu trả lời cho câu hỏi này, nhưng tôi sẽ đưa ra một vài lý do để bạn cân nhắc. Trước hết, nếu bạn biết những kiến thức cơ bản về các mẫu kiến trúc thì bạn sẽ dễ dàng thực hiện theo yêu cầu của kiến trúc sư hơn. Thứ hai, biết những mẫu đó sẽ giúp bạn đưa ra quyết định trong code của mình. Ví dụ: nếu thiết kế ứng dụng dựa trên các dịch vụ nhỏ hướng sự kiện, với tư cách là một kỹ sư phần mềm, bạn phải tách code của mình thành một dịch vụ riêng biệt nếu bạn nhận thấy sự phức tạp ngày càng tăng và trách nhiệm của logic trong dịch vụ hiện có. (Nếu bạn không hiểu phần này, chỉ cần làm theo văn bản, nơi mẫu này được giải thích ngắn gọn).
Có 5 mẫu được mô tả trong cuốn sách của Mark Richards:
- Kiến trúc phân lớp
- Kiến trúc hướng sự kiện
- Kiến trúc microkernel (hoặc kiến trúc Plugin)
- Kiến trúc microservices
- Kiến trúc dựa trên không gian (hoặc mẫu kiến trúc đám mây)
1. Kiến trúc phân lớp
Đây là kiến trúc phổ biến nhất cho các ứng dụng nguyên khối. Ý tưởng cơ bản đằng sau mô hình là chia logic ứng dụng thành nhiều lớp, mỗi lớp đóng gói vai trò cụ thể. Ví dụ: lớp Persistence sẽ chịu trách nhiệm giao tiếp ứng dụng với công cụ cơ sở dữ liệu..
2. Kiến trúc hướng sự kiện
Ý tưởng đằng sau mẫu này là tách logic ứng dụng thành các thành phần xử lý sự kiện có mục đích duy nhất nhận và xử lý các sự kiện một cách không đồng bộ. Mẫu này là một trong những mẫu kiến trúc không đồng bộ phân tán phổ biến được biết đến với khả năng mở rộng và khả năng thích ứng cao.
3. Kiến trúc Microkernel
Kiến trúc Mikrokernel, còn được gọi là kiến trúc Plugin, là mô hình thiết kế với hai thành phần chính: một hệ thống lõi và các mô-đun plug-in (hoặc phần mở rộng). Một ví dụ tuyệt vời sẽ là trình duyệt Web (hệ thống lõi) nơi bạn có thể cài đặt các tiện ích mở rộng (hoặc plugin) vô tận.
4. Kiến trúc Microservices
Kiến trúc microservices bao gồm các dịch vụ được triển khai riêng biệt, trong đó mỗi dịch vụ sẽ có một trách nhiệm lý tưởng. Các dịch vụ đó độc lập với nhau và nếu một dịch vụ bị lỗi thì các dịch vụ khác sẽ không ngừng chạy.
5. Kiến trúc dựa trên không gian
Ý tưởng chính đằng sau mô hình dựa trên không gian là bộ nhớ được chia sẻ phân tán để giảm thiểu các vấn đề thường xuyên xảy ra ở cấp cơ sở dữ liệu. Giả định là bằng cách xử lý hầu hết các hoạt động sử dụng dữ liệu trong bộ nhớ, chúng ta có thể tránh các hoạt động bổ sung trong cơ sở dữ liệu, do đó bất kỳ vấn đề nào trong tương lai có thể phát triển từ đó (ví dụ: nếu thực thể dữ liệu hoạt động người dùng của bạn đã thay đổi, bạn không cần để thay đổi một loạt mã liên tục và truy xuất dữ liệu đó từ DB).
Cách tiếp cận cơ bản là tách ứng dụng thành các đơn vị xử lý (có thể tự động tăng và giảm quy mô dựa trên nhu cầu), nơi dữ liệu sẽ được sao chép và xử lý giữa các đơn vị đó mà không cần bất kỳ sự ổn định nào đối với cơ sở dữ liệu trung tâm (mặc dù sẽ có các kho lưu trữ cục bộ cho nhân sự cố hệ thống).
Bạn có thể tìm thấy các ví dụ đơn giản nhất cho một số mẫu kiến trúc đó trong tài khoản GitHub dưới đây:
- Layered pattern (Java)
- Mikrokernel or Plugin pattern (Go/Golang)
- Microservices pattern (Go)