Giới thiệu kiến trúc phần mềm
Kiến trúc phần mềm của một chương trình máy tính hay một hệ thống tính toán là cấu trúc của các thành phần trong hệ thống đó. Kiến trúc phần mềm bao gồm các phần tử phần mềm, các thuộc tính và mối quan hệ giữa chúng.
Theo cuốn sách Software Architecture in Practice (2012), kiến trúc phần mềm được định nghĩa là: "Tập hợp các cấu trúc cần thiết để lập trình nên hệ thống phần mềm, bao gồm các phần tử, mối quan hệ giữa chúng và các thuộc tính của chúng."
Kiến trúc phần mềm cung cấp một nền tảng vững chắc để các kỹ sư phần mềm xây dựng phần mềm. Đây là bước đầu tiên để hiện thực hóa bản tóm tắt của mỗi dự án phần mềm. Kiến trúc và thiết kế phần mềm bao gồm một số yếu tố như: chiến lược kinh doanh, thuộc tính chất lượng, nhân lực, thiết kế và môi trường CNTT.
Phân biệt kiến trúc phần mềm và thiết kế phần mềm
Kiến trúc phần mềm: Tập trung vào việc chuyển đổi các đặc điểm phần mềm thành một cấu trúc phù hợp với yêu cầu kinh doanh và kỹ thuật. Bao gồm các đặc điểm như bảo mật, linh hoạt, khả năng mở rộng và tái sử dụng.
Thiết kế phần mềm: Tập trung vào thiết kế cấp mã nguồn, bao gồm chức năng của từng module, phạm vi tầng lớp và các chức năng cụ thể.
Các mẫu kiến trúc phần mềm phổ biến
Kiến trúc phân lớp (Layered Architecture)
Trong tiếng Anh, kiến trúc phân lớp thường được gọi là N-tier architecture hoặc Multi-tiered architecture.Đây là một mẫu thiết kế phổ biến, trong đó mã nguồn được chia thành các tầng (tiers). Tầng ngoài cùng tiếp nhận dữ liệu, sau đó truyền qua các tầng trung gian để xử lý. Cuối cùng, dữ liệu được lưu ở tầng cuối cùng (data tier), nơi làm việc trực tiếp với cơ sở dữ liệu.
Mô hình phổ biến nhất là kiến trúc 3 tầng (three-tier architecture), bao gồm:
- Presentation Tier: Tầng giao diện, nhận và hiển thị dữ liệu từ người dùng.
- Application Tier (còn gọi là Business Logic Tier): Xử lý logic nghiệp vụ.
- Data Tier: Tầng làm việc với cơ sở dữ liệu.
Ưu điểm:
- Dễ bảo trì do mã nguồn được tổ chức rõ ràng và các tầng tách biệt.
- Cấu trúc dễ hiểu, phù hợp cho người mới học.
Nhược điểm:
- Khi dự án mở rộng, mã nguồn có thể trở nên cồng kềnh.
- Một phần lớn mã nguồn chỉ phục vụ việc trung chuyển dữ liệu giữa các tầng, có thể ảnh hưởng đến hiệu năng.
Kiến trúc Client - Server
Mô hình Client – Server bao gồm một máy chủ (server) và nhiều máy khách (client), trong đó máy khách gửi yêu cầu đến máy chủ và chờ phản hồi.
- Máy chủ xử lý yêu cầu và gửi phản hồi lại máy khách thông qua giao thức bảo mật (thường là HTTPS).
- Ứng dụng phổ biến của mô hình này bao gồm các dịch vụ email, trang web và ứng dụng di động.
Ưu điểm:
-
Cho phép máy khách truy cập dữ liệu từ máy chủ một cách bảo mật.
-
Không bị giới hạn bởi ngôn ngữ lập trình, có thể triển khai trên nhiều nền tảng.
-
Việc bảo trì dễ dàng do có sự phân tách rõ ràng giữa máy chủ và máy khách.
Nhược điểm:
-
Máy chủ có thể bị quá tải nếu nhận quá nhiều yêu cầu cùng lúc.
-
Nếu không đảm bảo bảo mật đường truyền, dữ liệu có nguy cơ bị đánh cắp.
Kiến trúc Model – View – Controller (MVC)
Mô hình MVC chia hệ thống thành ba phần chính:
-
Model: Quản lý dữ liệu và logic nghiệp vụ.
-
View: Hiển thị dữ liệu cho người dùng.
-
Controller: Nhận yêu cầu từ người dùng và điều phối hoạt động giữa Model và View.
Ưu điểm:
-
Tách biệt giữa giao diện và logic, giúp dễ dàng mở rộng và bảo trì.
-
Cho phép thay đổi giao diện mà không ảnh hưởng đến dữ liệu hoặc logic xử lý.
Nhược điểm:
-
Cấu trúc phức tạp, đòi hỏi hiểu biết về nhiều công nghệ.
-
Khó tích hợp khi có nhiều thành phần mới.
Kiến trúc Microservices
Kiến trúc Microservices chia hệ thống thành các dịch vụ nhỏ, hoạt động độc lập.
-
Mỗi dịch vụ đảm nhận một chức năng riêng, ví dụ như: đăng nhập, thanh toán, quản lý người dùng.
-
Các dịch vụ giao tiếp với nhau thông qua API.
Ưu điểm:
-
Dễ mở rộng, triển khai và kiểm thử.
-
Nếu một dịch vụ gặp lỗi, không ảnh hưởng đến toàn bộ hệ thống.
Nhược điểm:
-
Cần quản lý nhiều dịch vụ độc lập.
-
Tốn tài nguyên và đòi hỏi hệ thống hạ tầng mạnh.
Kiến trúc hướng sự kiện (Event-Driven Architecture)
-
Các thành phần trong hệ thống chỉ hoạt động khi có sự kiện xảy ra.
-
Phù hợp với các ứng dụng real-time như chatbot, game online.
Ưu điểm:
-
Linh hoạt, dễ dàng mở rộng.
-
Giảm tải xử lý nhờ chỉ kích hoạt khi có sự kiện.
Nhược điểm:
-
Khó kiểm thử và gỡ lỗi.
-
Khi có nhiều sự kiện đồng thời, hệ thống có thể trở nên phức tạp.
Kết luận
Kiến trúc phần mềm đóng vai trò quan trọng trong việc xây dựng hệ thống phần mềm, giúp đảm bảo tính ổn định, bảo mật và hiệu suất. Một kiến trúc phần mềm tốt tạo điều kiện thuận lợi cho quá trình phát triển và bảo trì, đồng thời giúp tổ chức nâng cao vị thế trên thị trường.