10 mô hình kiến trúc phần mềm phổ biến
Bạn từng băn khoăn các hệ thống doanh nghiệp lớn có thể mở rộng được thiết kế như thế nào? Trước khi bắt đầu phát triển hệ thống quan trọng, chúng ta phải lựa chọn được kiến trúc phù hợp mà có thể đáp ứng cho chúng ta các yêu cầu chức năng và thuộc tính chất lượng mong muốn. Do đó, chúng ta nên hiểu các kiến trúc khác nhau, trước khi áp dụng vào thiết kế của chúng ta.
Mục lục bài viết
Các mẫu kiến trúc là gì?
Theo Wikipedia
Mẫu kiến trúc là giải pháp chung, có thể tái sử dụng cho một vấn đề phổ biến xuất hiện trong kiến trúc phần mềm và đặt trong một ngữ cảnh cụ thể. Các mẫu kiến trúc tương tự như mẫu thiết kế phần mềm nhưng có phạm vi rộng hơn.
Trong tài liệu này tôi sẽ giải thích tổng quan 10 mẫu kiến trúc phổ biến cùng với ngữ cảnh thường sử dụng, ưu và nhược điểm của tững mẫu
- Layered pattern
- Client-server pattern
- Master-slave pattern
- Pipe-filter pattern
- Broker pattern
- Peer-to-peer pattern
- Event-bus pattern
- Model-view-controller pattern
- Blackboard pattern
- Interpreter pattern
1. Layered pattern
Mẫu kiến trúc này có thể được sử dụng trong các chương trình cấu trúc mà có thể được phân tách thành các nhóm gồm nhiều công việc nhỏ, mỗi nhóm ở các mức độ trừu tượng hóa cụ thể. Mỗi tầng cung cấp các dịch vụ cho các tầng kế tiếp cao hơn.
Phổ biến nhất là hệ thống thông tin chung gồm 4 tầng như sau:
- Tầng trình diễn – Presentation layer (còn được gọi là UI layer)
- Tầng ứng dụng – Application layer (còn được gọi là service layer)
- Tầng xử lý logic nghiệp vụ – Business logic layer (còn được gọi là domain layer)
- Tầng truy suất dữ liệu – Data access layer (còn được gọi là persistence layer)
Sử dụng
- Các ứng dụng desktop nói chung.
- Các ứng dụng web thương mại điện tử.
2. Client-server pattern
Mẫu này bao gồm 2 thành phần; một server và nhiều clients. Thành phần server sẽ cung cấp các dịch vụ cho nhiều thành phần client. Các client gửi yêu cầu các dịch vụ lên servẻ và servẻ cung cấp các dịch vụ tương ứng cho các client đó. Ngoài ra, server tiếp tục lắng nghe các yêu cầu từ client.
Sử dụng
- Các ứng dụng online như email, chia sẻ document và banking.
3. Master-slave pattern
Mẫu này bao gồm 2 phần; master and slaves. Thành phần master phân phối công việc giữa các thành phần slave giống nhau và tính toán ra kết quả cuối cùng từ các kết quả mà các slave trả về.
Sử dụng
- Trong việc nhân rộng database, cơ sở dữ liệu master được coi là nguồn dữ liệu tin cậy và các cơ sở dữ liệu slave được đồng bộ với nó.
- Các thiết bị ngoại vi kết nối tới đường truyền bus của hệ thống máy tính (master and slave drives).
4. Pipe-filter pattern
Mẫu này có thể được sử dụng trong các hệ thống cấu trúc mà gồm các thủ tục và xử lý 1 luồng dữ liệu. Mỗi bước xử lý được khép kín bên trong 1 thành phần lọc (filter). Dữ liệu cần xử lý được truyền qua đường ống (pipes). Các đường ống này có thể được sử dụng cho việc buffer hoặc cho mục đích đồng bộ hóa.
This pattern can be used to structure systems which produce and process a stream of data. Each processing step is enclosed within a filter component. Data to be processed is passed through pipes. These pipes can be used for buffering or for synchronization purposes.
Sử dụng
- Các trình biên dịch. Các bộ lọc liên tục thực hiện phân tích từ vừng, parsing, phân tích ngữ nghĩa, và tiến trình tạo mã.
- Quy trình làm việc trong tin học sinh học.
5. Broker pattern
Mẫu này được sử dụng trong các hệ thống phân tán cấu trúc với các thành phần được tách rời. Các thành phần này có thể tương tác với nhau thông qua các lời gọi dịch vụ từ xa (remote service invocation). Thành phần broker chịu trách nhiệm cho việc phối hợp giao tiếp giữa các thành phần.
Các server publish các năng lực của nó (các dịch vụ và các thuộc tính) cho broker. Các client yêu cầu 1 dịch vụ từ broker và broker sẽ điều hướng client tới dịch vụ phù hợp tương ứng từ bộ đăng ký của nó.
Sử dụng
6. Peer-to-peer pattern
Trong mẫu này, các thành phần riêng lẻ còn được gọi là các peer. Các peer có thể hoạt động giống như các client, yêu cầu các dịch vụ từ các peer khác, và cũng giống như 1 server, cung cấp các dịch vụ cho các peer khác. Một peer có thể đóng vai là 1 client hoặc như một server hoặc đóng vai trò cả 2 và nó có thể thay đổi vai trò linh động tùy theo thời điểm.
Sử dụng
- Các mạng chia sẻ file như Gnutella và G2
- Các giao thức Multimedia như P2PTV và PDTP.
7. Event-bus pattern
Mẫu này phù hợp chính cho các sự kiện và có 4 thành phần chính; event source, event listener, channel và event bus. Các nguồn (source) phát hành message trên các kênh cụ thể ở trên event bus. Các bộ lắng nghe (listener) đăng ký nghe trên các kênh cụ thể. Các bộ lắng nghe được notify có message mới được phát hành trên kênh mà nó đã đăng ký trước đó.
Sử dụng
- Phát triển Android
- Dịch vụ Notification
8. Model-view-controller pattern
Mẫu này còn được gọi là mẫu MVC, chia ứng dụng tương tác thành 3 phần, gồm
- model — chứa các chức năng và dữ liệu lõi
- view — hiển thị thông tin cho người dùng (có thể định nghĩa nhiều view)
- controller — xử lý dữ liệu đầu vào từ người dùng
Mẫu này giúp chia tách các tầng trình diễn thông tin nội bộ khỏi các thông tin được biểu diễn cho và chấp nhận bởi người dùng. Nó phân tách sự phụ thuộc các thành phần và cho phép tái sử dụng code hiệu quả hơn.
Sử dụng
- Kiến trúc cho các ứng dụng World Wide Web trong hầu hết các ngôn ngữ lập trình chính.
- Web frameworks giống như Django và Rails.
9. Blackboard pattern
Mẫu này phù hợp cho các vấn đề mà không có chiến lược giải pháp xác định đã biết. mẫu blackboard gồm 3 thành phần chính
- blackboard — một bộ nhớ toàn cục có cấu trúc chứa các đối tượng từ không gian giải pháp.
- knowledge source — các modules đặc biệt với biểu diễn riêng của nó
- control component — lựa chọn, cấu hình và thực thi các module
Tất cả các thành phần có quyền truy cập tới blackboard. Các thành phần có thể tạo ra đối tượng dữ liệu mới và được thêm vào blackboard. Các thành phần tìm kiếm các loại dữ liệu cụ thể trên blackboard, và có thể tìm chúng theo các mẫu phù hợp với những nguồn kiến thức đang tồn tại.
Sử dụng
- Nhận dạng giọng nói
- Nhận dạng và tracking phương tiện giao thông
- Nhận dạng cấu trúc Protein
- Giải nghĩa tín hiệu Sonar.
10. Interpreter pattern
Mẫu này được sử dụng để thiết kế các thành phần mà thông dịch các chương trình được viết trong một ngôn ngữ chuyên dụng. Mục đích chính nó chỉ rõ cách đánh giá các dòng chương trình, được biết như các câu hoặc các công thức được viết trong ngôn ngữ cụ thể. Ý tưởng cơ bản là có 1 lớp cho từng ký hiệu ngôn ngữ.
Sử dụng
- Ngôn ngữ truy vấn CSDL như SQL.
- Các ngôn ngữ được sử dụng để mô tả các giao thức truyền thông.
So sánh các mẫu kiến trúc
Bảng dưới đây tổng hợp về ưu, nhược điểm của từng mẫu kiến trúc.