10 Common Software Architectural Patterns

Bài gốc: 10 Common Software Architectural Patterns in a nutshell
Bài dịch: Grokking Vietnam

1. Layered pattern

Thường được sử dụng cho các ứng dụng được tạo thành bởi các nhóm nhỏ phụ trách các nhiệm vụ khác nhau, Mỗi layer cung cấp service cho các layer nằm phía trên. Có 4 layer chính thường thấy trong kiến trúc này là:

Thường được sử dụng cho các ứng dụng desktop và e-commerce.

Layered pattern
Layered pattern

2. Client-server pattern:

Kiến trúc này bao gồm 2 thành phần: 1 server và các clients. Các client gửi request tới server để xử lý và trả các service tương ứng cho phía client. Kiến trúc này thường sử dụng cho các ứng dụng online như email, chia sẻ tài liệu và ngân hàng.

Client-server pattern
Client-server pattern

3. Master-slave pattern

Kiến trúc này bao gồm 1 master và nhiều slave. Trong đó máy chủ (master) sẽ gửi dữ liệu đến các máy con (slaves) bất kể máy con có cần hay không. Thường được sử dụng trong database replication. Dữ liệu có thể được đọc và ghi vào master sau đó sao chép không đồng bộ vào các slave (việc đọc cũng có thể tiến hành trên một trong các slave).

Master-slave pattern
Master-slave pattern

4. Pipe-filter pattern:

Kiến trúc này có thể dùng để cấu trúc hệ thống phục vụ cho mục đích sản xuất và xử lý luồng dữ liệu. Mỗi bước xử lý dữ liệu dược gói gọn trong một thành phần bộ lọc (filter). Dữ liệu cần xử lý được truyền qua các đường ống (pipe). Các pipe được dùng cho mục đích xử lý đồng bộ hoặc buffering.

Kiến trúc này thường được dùng để thiết kế các compiler hoặc quy trình xử lý bioinformatics.

Pipe-filter pattern
Pipe-filter pattern

5. Broker pattern:

Được sử dụng cho các hệ thống phân tán gồm các thành phần tách rời. Các thành phần này tương tác với nhau bằng các yêu cầu dịch vụ từ xa. Broker chịu trách nhiệm điều phối tương tác giữa các thành phần.

Thường được sử dụng trong các phần mềm message broker như Apache ActiveMQ, Apache Kafka, RabbitMQ và JBoss Messaging.

Broker pattern
Broker pattern

6. Peer-to-peer pattern:

Mỗi component trong kiến trúc này được gọi là một peer. Peer có thể hoạt động như một client - gửi request tới các peer khác, hoặc hoạt động như một server, cung cấp service cho các peer khác, vai trò hoạt động có thể thay đổi linh hoạt theo thời gian.

Thường được sử dụng trong các mạng chia sẻ file như Gnutella hoặc các giao thức multimedia như P2PTV và PDTP.

Peer-to-peer pattern
Peer-to-peer pattern

7. Event-bus pattern:

Kiến trúc này thường dùng để xử lý các event, bao gồm 4 thành phần chính: event source, event listener, channel và event bus. Message được gửi tới các channel cụ thể của một event bus. Các listener nhận thông tin từ các channel nhất định và nhận thông báo mỗi khi có message được gửi tới channel đó.

Thường được sử dụng trong phát triển Android và notification service.

Event-bus pattern
Event-bus pattern

8. Model-View-Controller:

Kiến trúc này chia ứng dụng làm ba thành phần chính:

Là kiến trúc thường dùng trong các ứng dụng web ở phần lớn các ngôn ngữ lập trình và trong các web frameworks như Django hay Ruby on Rails.

Model-View-Controller
Model-View-Controller

9. Blackboard pattern:

This pattern is useful for problems for which no deterministic solution strategies are known.

Kiến trúc gồm 3 thành phần chính:

All the components have access to the blackboard. Components may produce new data objects that are added to the blackboard. Components look for particular kinds of data on the blackboard, and may find these by pattern matching with the existing knowledge source.

Kiến trúc này thường sử dụng trong các ứng dụng về robotics, nhận dạng giọng nói, nhận dạng và theo dõi phương tiện giao thông, nhận dạng cấu trúc protein.

Blackboard pattern
Blackboard pattern

10. Interpreter pattern:

Thường được sử dụng để thiết kế component thông dịch các chương trình được viết bởi các ngôn ngữ cụ thể. Thường dùng trong các ngôn ngữ truy vấn cơ sở dữ liệu như SQL hoặc các ngôn ngữ mô tả giao thức truyền thông.

Interpreter pattern
Interpreter pattern

Summary: Pros & Cons

Comparison of Architectural Patterns
Comparison of Architectural Patterns