Kiến trúc hướng dịch vụ – Service Oriented Architecture (SOA)

Thế giới ngày nay có đến hàng triệu phần mềm khác nhau. Công nghệ thay đổi từng phút, tính phức tạp trong việc xây dựng phần mềm tăng lên. Chi phí phát triển và bảo trì phần mềm cao chót vót cũng là thách thức lớn cho các doanh nghiệp. Điều đó chứng tỏ các mô hình phát triển phần mềm hiện nay đang bộc lộ nhiều hạn chế và mất dần sự kiểm soát. Điều đó thôi thúc một mô hình mới ra đời có tên là SOA.

Lịch sử

Trước SOA, chúng ta đã và đang sử dụng kiến trúc như OOP (Object Oriented Programming), COM/DCOM (Distributed Common Object Model), CORBA (Common Object Request Broker Architecture), EJB (Enterprise Java Bean).

Thật ra ý tưởng của SOA không hoàn toàn mới, CORBA hay DCOM cũng có kiến trúc tương tự, đều là mô hình kiến trúc Điện toán phân tán (Distributed Computing). CORBA được phát triển trong những năm 1980 và đã đạt đến phiên bản chính thức đầu tiên năm 1991. Hiện CORBA vẫn được sử dụng rất nhiều, là một phần của JAVA EE, mặc dù nó sẽ được đóng gói như một mô-đun riêng biệt từ JAVA 9 trở đi.

SOA được đưa ra từ cuối những năm 1980, và nảy sinh từ CORBA/DCOM. Đến đầu những năm 2000 thì mới chính thức được phổ biến. SOA khác với CORBA ở sự ràng buộc các thành phần với nhau. Trong CORBA các thành phần ràng buộc với nhau quá chặt, ví dụ như các ứng dụng phân tán muốn làm việc với nhau phải đạt được “thỏa thuận” về chi tiết tập hàm API, một thay đổi mã lệnh trong thành phần COM sẽ yêu cầu những thay đổi tương ứng đối với mã lệnh truy cập thành phần COM này.

Vậy SOA là gì?

Rất khó để định nghĩa SOA – Service Oriented Architecture (Kiến trúc hướng dịch vụ) là gì?

Một cách nôm na, SOA là một kiểu kiến trúc phần mềm gồm nhiều thành phần độc lập được thể hiện thành những dịch vụ (service), mỗi dịch vụ thực hiện quy trình nghiệp vụ nào đó của doanh nghiệp. Các dịch vụ độc lập với nhau, thay đổi dịch vụ này sẽ không làm ảnh hưởng đến các dịch vụ khác.

SOA không phụ thuộc vào bất cứ công nghệ hay ngôn ngữ lập trình nào. Có thể xem như một phương pháp luận, một triết lý xây dựng phần mềm.

Nguyên tắc thiết kế

SOA dựa trên 2 nguyên tắc thiết kế quan trọng, đó là:

Mô-đun: Tách vấn đề lớn thành nhiều vấn đề nhỏ.

Đóng gói: Che đi dữ liệu và lô-gic trong từng mô-dun (hay “hộp đen”) đối với truy cập từ ngoài.

Ưu điểm của SOA

Khả năng sử dụng lại dịch vụ
Do tính chất khép kín và liên kết lỏng lẻo của các thành phần chức năng trong các ứng dụng hướng dịch vụ, các thành phần này có thể được sử dụng lại trong nhiều ứng dụng mà không ảnh hưởng đến các dịch vụ khác.

Khả năng bảo trì tốt hơn
Vì mỗi dịch vụ phần mềm là một đơn vị độc lập, thật dễ dàng để cập nhật và bảo trì nó mà không làm tổn thương các dịch vụ khác. Ví dụ: các ứng dụng doanh nghiệp lớn có thể được quản lý dễ dàng hơn khi được chia thành các dịch vụ.

Độ tin cậy cao hơn
Các services dễ debug và test hơn là các đoạn code lớn như trong cách tiếp cận nguyên khối. Điều này làm cho các sản phẩm dựa trên SOA đáng tin cậy hơn.

Phát triển song song
Là một kiến trúc hướng dịch vụ bao gồm các lớp, nó giúp cho quá trình phát triển chạy song song. Các dịch vụ độc lập có thể được phát triển song song và hoàn thành cùng một lúc.

Nhược điểm của SOA

Quản lý phức tạp
Hạn chế chính của kiến trúc hướng dịch vụ là sự phức tạp của nó. Mỗi dịch vụ phải đảm bảo rằng tin nhắn được gửi kịp thời. Số lượng các tin nhắn này có thể lên tới hơn một triệu lần, khiến việc quản lý tất cả các dịch vụ trở thành một thách thức lớn.

Chi phí đầu tư cao
Phát triển SOA đòi hỏi một sự đầu tư lớn về nguồn nhân lực, công nghệ và nguồn lập trình viên.

Quá tải
Trong SOA, tất cả các đầu vào được xác nhận trước khi một dịch vụ tương tác với một dịch vụ khác. Khi sử dụng nhiều dịch vụ, điều này làm tăng thời gian phản hồi và giảm hiệu suất tổng thể.

Tương lai cho SOA

Hiện nay, rất nhiều phần mềm lớn đã được xây dựng theo mô hình SOA. Trong đó có phần mềm nổi tiếng của hãng Oracle là Simphony POS mà tôi sẽ phân tích kỹ trong một bài khác. Mời các bạn đón đọc để thấy được trong thực tế SOA được triển khai như thế nào.

Leave a Comment