Posts Tagged SOA
Kiến trúc ứng dụng: Client-Server vs Service-Oriented
Posted by worm.NET in Architecture on Tháng Sáu 26, 2011
Client-Server và Service-Oriented là hai cái tên thường được nhắc đến khi nói về kiến trúc phần mềm hiện nay. Vậy hai kiến trúc đó mang những đặc điểm gì và chúng thực sự khác nhau như thế nào?
1. Kiến trúc Client-Server
Kiến trúc Client-Server được sử dụng trong các hệ thống phân tán và bao gồm hai thành phần riêng biệt: server đóng vai trò phục vụ cung cấp chức năng, và client trong vai trò người tiêu thụ sử dụng các chức năng đó. Thông thường hai thành phần này kết nối với nhau qua mạng, với client là bên chủ động tạo kết nối và gửi yêu cầu đến server, trong khi server thụ động lắng nghe và hồi đáp các yêu cầu. Mô hình client-server đơn giản nhất gồm một server phục vụ cho một hoặc nhiều client đồng thời, còn gọi là kiến trúc hai lớp (2-Tier). Một ví dụ phổ biến cho các ứng dụng Client-Server là các chương trình chat và email đã quá thông dụng hiện nay.
Các ưu điểm nổi bật của kiến trúc Client-Server gồm:
- Quản lý tập trung: dữ liệu được lưu trữ tập trung trên server thay vì nằm rải rác trên nhiều máy, giúp đơn giản hóa việc truy xuất và cập nhật dữ liệu.
- Dễ bảo trì: nhờ khả năng quản lý tập trung mà công việc bảo trì cũng trở nên nhẹ nhàng hơn vì phần lớn việc bảo trì chỉ cần thực hiện trên server. Trong trường hợp hệ thống có nhiều server với thiết bị dự phòng, quá trình bảo trì (như sửa chữa, thay thế server) có thể diễn ra hoàn toàn trong suốt với phía client.
- Bảo mật: dữ liệu tập trung trên server đồng nghĩa với việc kiểm soát dễ dàng hơn.
Kiến trúc Client-Server cũng có một số biến thể như:
- Peer-to-Peer: thực chất cũng theo mô hình Client-Server, tuy nhiên Client và Server thường xuyên hoán đổi vai trò cho nhau (máy A vừa sử dụng chức năng của máy B, vừa cung cấp một chức năng khác cho máy B, hai máy này lần lượt đóng cả hai vai trò Client và Server).
- Application Server: thay vì chạy các ứng dụng ở phía client, các ứng dụng này được cài đặt và thực thi trên server. Client sử dụng các ứng dụng này bằng cách kết nối vào server. Mô hình này đơn giản hóa đáng kể việc triển khai ứng dụng (chỉ cần cài đặt một lần trên server) và giảm bớt yêu cầu phần cứng của client (do ứng dụng chạy trên server thay vì client, vì vậy mà các client này còn được gọi là “thin client”).
2. Kiến trúc Service-Oriented
Service-Oriented Architecture (SOA) hay kiến trúc hướng dịch vụ là một cái tên đang trở thành trào lưu hiện nay. SOA cung cấp một phương pháp giao tiếp dạng thông điệp (message-based) thông qua các giao diện, trong đó logic nghiệp vụ được phân chia vào trong các service. Các đặc tính cơ bản của SOA như sau:
- Tính tự hành: các service có thể được triển khai, bảo trì và hoạt động độc lập.
- Liên kết lỏng: các service không phụ thuộc nhau, và chúng có thể được thay thế hoặc cải tiến mà không ảnh hưởng đến nhau, miễn là giao diện của các service vẫn đảm bảo tính tương thích.
- Các schema và giao diện chung: cho khả năng tái sử dụng ở cấp độ vĩ mô (service) thay vì vi mô (class), đồng thời cho phép kết nối tới các hệ thống cũ hơn.
Các lợi ích chính của SOA gồm:
- Tính trừu tượng: các dịch vụ là độc lập và được truy xuất thông qua một bản hợp đồng (contract) chính thức, qua đó trừu tượng hóa các cơ chế hoạt động nội bộ và tăng tính liên kết lỏng.
- Khả năng khám phá: các dịch vụ có thể đưa ra các thông tin tự mô tả để các ứng dụng khác có thể tìm hiểu và xác định giao diện làm việc.
- Khả năng hoạt động chung (interoperability): do các giao thức và định dạng dữ liệu đều đã được chuẩn hóa, các dịch vụ và các ứng dụng tiêu thụ chúng có thể được xây dựng trên các nền tảng khác nhau.
- Khả năng tái sử dụng: giúp giảm bớt thời gian và chi phí xây dựng hệ thống.
Trên thực tế, SOA có thể coi như một biến thể của Client/Server, bởi trong mô hình SOA vẫn tồn tại thành phần server (ứng dụng host các service) và client (ứng dụng sử dụng service). Điểm khác biệt ở chỗ định nghĩa của kiến trúc Client/Server không đề cập đến việc tách các nhóm chức năng của server thành các dịch vụ riêng biệt cũng như quy định các giao diện để giao tiếp với các dịch vụ đó. Vì vậy mà người ta có thể dễ dàng thiết kế và xây dựng các server theo kiểu monolithic, nghĩa là dồn tất cả các chức năng vào trong một ứng dụng lớn duy nhất, làm hạn chế khả năng tái sử dụng, bảo trì và tương tác với các hệ thống khác.
3. Nhận xét
Kiến trúc Client/Server phù hợp cho các ứng dụng phải phục vụ nhiều client, chẳng hạn như các ứng dụng web chạy trên trình duyệt. Kiến trúc này cũng đặc biệt thích hợp trong trường hợp cần tập trung hóa dữ liệu và công tác quản lý, hoặc khi ứng dụng cần phải hỗ trợ nhiều loại client và nhiều thiết bị khác nhau.
SOA trở nên lý tưởng hơn khi có nhu cầu tái sử dụng dịch vụ hoặc xây dựng các ứng dụng dạng Cloud, Software plus Service, Software as a Service…
Tuy nhiên, cần lưu ý rằng, hai kiến trúc này không loại trừ lẫn nhau, mà thường kết hợp cùng nhau. Đặc biệt là trong các hệ thống lớn thường tồn tại nhiều hơn một loại kiến trúc. Chẳng hạn như trong mô hình ứng dụng đa lớp, client gửi yêu cầu dữ liệu đến server, server không truy xuất trực tiếp database mà gọi các web service để thực hiện yêu cầu này và trả dữ liệu về cho client.
Tham khảo: Architectural Patterns and Styles