Trong bài viết này, VietnamWorks inTECH sẽ giới thiệu 9 mẫu kiến trúc phần mềm phổ biến được áp dụng trong hệ thống phân tán. Những mẫu kiến trúc này không chỉ giúp bạn hiểu rõ hơn về cách thiết kế và triển khai các hệ thống phân tán, mà còn cung cấp những công cụ hữu ích để giải quyết các thách thức kỹ thuật trong quá trình phát triển. 

1. Peer-to-Peer (P2P) Pattern

Peer-to-Peer (P2P) Pattern là một mô hình kiến trúc mạng trong đó các nút mạng (nodes) hoạt động như cả máy khách (client) và máy chủ (server) để chia sẻ tài nguyên trực tiếp với nhau mà không cần qua một máy chủ trung gian. 

Kiến trúc này thường được sử dụng trong các hệ thống chia sẻ tệp, ứng dụng phi tập trung (DApp) và mạng blockchain, nơi khả năng phục hồi và khả năng mở rộng là tối quan trọng.

Kiến trúc P2P trông như thế này:

Peer-to-Peer (P2P) Pattern

2. API Gateway Pattern

API Gateway Pattern là một mẫu thiết kế phần mềm dùng để quản lý các dịch vụ microservices trong kiến trúc hệ thống phân tán. Mục tiêu chính của API Gateway là cung cấp một điểm truy cập duy nhất cho tất cả các dịch vụ của hệ thống, giúp đơn giản hóa việc giao tiếp giữa các dịch vụ và người dùng cuối.

API Gateway là thành phần không thể thiếu trong kiến trúc microservices. Nó giúp tìm kiếm dịch vụ, cân bằng tải, chuyển đổi giao thức và che giấu sự phức tạp của hệ thống phía sau.

Mô phỏng kiến trúc API Gateway:

API Gateway Pattern

3. Pub-Sub (Publish-Subscribe)

Kiến trúc Pub-Sub (Publish-Subscribe) là một mẫu thiết kế trong hệ thống phân tán, nơi các thành phần được phân chia thành hai loại chính: nhà xuất bản (publishers) và người đăng ký (subscribers). Đây là cách tổ chức mà các thành phần của hệ thống có thể giao tiếp với nhau mà không cần biết trực tiếp về sự hiện diện của nhau.

  • Publisher: Đơn vị tạo ra các thông điệp (message) và gửi chúng đến một chủ đề (topic) cụ thể.

  • Subscriber: Đơn vị đăng ký theo dõi một hoặc nhiều chủ đề. Khi có thông điệp mới được gửi đến chủ đề mà subscriber đã đăng ký, nó sẽ nhận được thông điệp đó.

  • Topic: Một kênh giao tiếp logic, nơi các publisher gửi thông điệp và các subscriber đăng ký để nhận thông điệp.

Pub sub pattern

4. Request-Response Pattern

Request-Response Pattern là một mô hình giao tiếp cơ bản giữa các hệ thống hoặc ứng dụng. Trong mô hình này, một bên (client) gửi một yêu cầu (request) đến một bên khác (server), và server sẽ trả lời (response) lại với kết quả của yêu cầu đó.

Mô hình này phổ biến trong các ứng dụng web, API RESTful và RPC (Remote Procedure Call).

Cách thức hoạt động:

  • Yêu cầu (Request): Một thành phần, thường là khách hàng (client), gửi một yêu cầu đến một dịch vụ hoặc máy chủ. Yêu cầu này có thể bao gồm các thông tin như dữ liệu cần thiết, kiểu thông tin mong muốn, và các tham số khác.

  • Xử lý (Processing): Máy chủ hoặc dịch vụ nhận yêu cầu và xử lý nó. Trong quá trình này, máy chủ có thể thực hiện các tác vụ như truy vấn cơ sở dữ liệu, tính toán, hoặc gọi các dịch vụ khác.

  • Phản hồi (Response): Sau khi xử lý xong yêu cầu, máy chủ gửi một phản hồi về cho khách hàng. Phản hồi này thường chứa kết quả của yêu cầu hoặc thông tin về trạng thái của yêu cầu.

Request-Response Pattern

5. Event Sourcing Pattern

Event Sourcing là một mô hình thiết kế phần mềm nơi thay vì lưu trữ trạng thái hiện tại của một đối tượng, chúng ta lưu trữ một chuỗi các sự kiện (events) đã xảy ra với đối tượng đó. Mỗi sự kiện đại diện cho một thay đổi trạng thái trong quá khứ, và trạng thái hiện tại có thể được tái tạo lại bằng cách áp dụng tuần tự các sự kiện này.

Cách hoạt động:

  • Ghi lại sự kiện: Khi có một thay đổi trong hệ thống, thay vì chỉ cập nhật trạng thái mới, một sự kiện liên quan đến thay đổi đó được ghi lại và lưu trữ. Ví dụ, thay vì lưu thông tin mới của một đơn hàng, hệ thống sẽ ghi lại các sự kiện như "đơn hàng được tạo", "đơn hàng đã được cập nhật", v.v.

  • Khôi phục trạng thái: Để tái tạo trạng thái hiện tại của ứng dụng, hệ thống sẽ phát lại các sự kiện đã ghi lại từ thời điểm khởi tạo. Từ chuỗi các sự kiện này, trạng thái hiện tại của hệ thống có thể được khôi phục.

  • Xử lý sự kiện: Các sự kiện có thể được xử lý để thực hiện các hành động bổ sung hoặc đồng bộ hóa với các hệ thống khác. Ví dụ, khi một sự kiện được ghi lại, nó có thể kích hoạt các quy trình phụ hoặc cập nhật các chỉ số phân tích.

software architecture diagram for interviews

6. ETL (Extract, Transform, Load) Pattern

ETL (Extract, Transform, Load) Pattern là một mẫu thiết kế phổ biến trong quản lý và xử lý dữ liệu, đặc biệt trong các hệ thống kho dữ liệu và phân tích dữ liệu. Mẫu này mô tả quá trình chuyển dữ liệu từ các nguồn khác nhau vào một hệ thống đích (thường là một kho dữ liệu hoặc cơ sở dữ liệu phân tích) thông qua ba bước chính:

  • Extract (Trích xuất)

  • Transform (Chuyển đổi)

  • Load (Tải)

Các quy trình ETL tự động hóa quy trình làm việc dữ liệu, xử lý các vấn đề về chất lượng dữ liệu và hỗ trợ xử lý hàng loạt các tập dữ liệu lớn.

ETL (Extract, Transform, Load) Pattern

7. Batching Pattern

Batching Pattern là một mô hình thiết kế trong lập trình, đặc biệt hữu ích trong các hệ thống xử lý dữ liệu lớn. Nó liên quan đến việc nhóm một tập hợp các tác vụ hoặc dữ liệu lại thành các "batch" (lô) và xử lý chúng cùng một lúc thay vì xử lý từng phần tử một. Bằng cách tổng hợp nhiều hoạt động thành các lô lớn hơn, công cụ này sẽ giảm chi phí và cải thiện hiệu quả trong quy trình xử lý dữ liệu.

Cách hoạt động:

  • Nhóm dữ liệu (Batching): Dữ liệu hoặc công việc được thu thập và nhóm lại thành các lô (batches). Điều này có thể xảy ra trong một khoảng thời gian cố định hoặc khi số lượng công việc đạt đến một mức độ cụ thể.

  • Xử lý theo lô (Batch Processing): Các lô dữ liệu được xử lý cùng nhau trong một phiên xử lý. Việc xử lý theo lô có thể bao gồm các tác vụ như tính toán, chuyển đổi, hoặc gửi dữ liệu đến các hệ thống khác.

  • Ghi kết quả (Batch Output): Kết quả của việc xử lý lô được ghi lại và lưu trữ, và có thể được sử dụng cho các mục đích báo cáo hoặc tiếp tục xử lý trong các bước tiếp theo.

Batching Pattern

8. Streaming Processing Pattern

Streaming Processing Pattern (Mẫu xử lý luồng) là một phương pháp tiếp cận dữ liệu theo thời gian thực, nơi dữ liệu được xử lý ngay khi nó được tạo ra, thay vì chờ đợi để xử lý theo lô như trong mô hình batch processing.

Cách hoạt động:

  • Nhận dữ liệu (Data Ingestion): Dữ liệu được thu thập liên tục từ các nguồn khác nhau như cảm biến, log hệ thống, hoặc các nguồn dữ liệu thời gian thực.

  • Xử lý dữ liệu theo luồng (Stream Processing): Dữ liệu được xử lý ngay khi nó đến, thường bằng cách áp dụng các phép toán hoặc quy tắc phân tích trong thời gian thực. Quá trình này có thể bao gồm các tác vụ như lọc, tổng hợp, hoặc biến đổi dữ liệu.

  • Phản hồi và lưu trữ (Real-time Output and Storage): Kết quả của việc xử lý dữ liệu được xuất ra ngay lập tức để cung cấp phản hồi hoặc thông tin thời gian thực. Dữ liệu cũng có thể được lưu trữ để phân tích và báo cáo sau này.

Kiến trúc xử lý luồng hỗ trợ xử lý theo sự kiện, xử lý sự kiện phức tạp (CEP) và các ứng dụng phân tích thời gian thực trong các lĩnh vực như tài chính, IoT và an ninh mạng.

software architecture pattern

9. Orchestration Pattern

Orchestration Pattern (Mẫu điều phối) là một mẫu thiết kế trong hệ thống phần mềm giúp quản lý và điều phối sự tương tác giữa các dịch vụ hoặc thành phần trong một hệ thống phân tán. Mục tiêu của mẫu điều phối là đảm bảo rằng các dịch vụ hoặc thành phần làm việc cùng nhau một cách hài hòa để thực hiện một quy trình hoặc nhiệm vụ cụ thể.

Cách hoạt động:

  • Quản lý quy trình: Orchestration Pattern sử dụng một thành phần điều phối (orchestrator) để quản lý và điều phối các bước trong một quy trình kinh doanh hoặc một tác vụ phức tạp. Thành phần điều phối này chịu trách nhiệm xác định thứ tự thực hiện, giao tiếp giữa các dịch vụ, và xử lý các lỗi hoặc điều kiện ngoại lệ.

  • Tương tác giữa các dịch vụ: Các dịch vụ hoặc thành phần khác nhau trong hệ thống được kết nối và tương tác với nhau theo các quy tắc và quy trình do thành phần điều phối xác định. Thành phần điều phối có thể gửi yêu cầu, nhận phản hồi, và thực hiện các bước tiếp theo dựa trên các kết quả hoặc trạng thái của các dịch vụ.

  • Theo dõi và quản lý: Thành phần điều phối theo dõi trạng thái và tiến trình của quy trình, đảm bảo rằng các bước được thực hiện đúng thứ tự và điều kiện. Nó cũng xử lý các tình huống lỗi hoặc các điều kiện bất thường để đảm bảo quy trình hoàn thành một cách chính xác.

software architecture pattern

Lời kết

Bằng cách nắm vững và lựa chọn đúng mẫu kiến trúc cho từng tình huống cụ thể, bạn có thể tối ưu hóa hiệu suất, quản lý sự phức tạp và đảm bảo hệ thống của bạn hoạt động ổn định và hiệu quả. Hy vọng rằng những thông tin trong bài viết này sẽ giúp bạn có cái nhìn sâu hơn và áp dụng thành công các mẫu kiến trúc phần mềm vào các dự án của mình.

VietnamWorks inTECH

TẠO TÀI KHOẢN MỚI: XEM FULL “1 TÁCH CODEFEE” - NHẬN SLOT TƯ VẤN CV TỪ CHUYÊN GIA - CƠ HỘI RINH VỀ VOUCHER 200K