Service-oriented Architecture (SOA) – Kiến trúc hướng dịch vụ
October 27, 2020Kiến trúc hướng dịch vụ (SOA) là một kiểu kiến trúc phần mềm dùng để chỉ ứng dụng bao gồm các tác nhân phần mềm rời rạc và lỏng lẻo thực hiện một chức năng cần thiết. SOA có hai vai trò chính: nhà cung cấp dịch vụ và người tiêu dùng dịch vụ. Cả hai vai trò này có thể được tham gia trong cùng một phần mềm. Khái niệm về SOA nằm ở chỗ: ứng dụng có thể được thiết kế và xây dựng theo kiểu mô-đun hóa, tích hợp dễ dàng và có thể tái sử dụng lại.
Ưu điểm:
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:
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óm lại
Kiến trúc hướng dịch vụ (Service Oriented Architecture – SOA) được thiết kể để giải quyết một phần của vấn đề bằng cách giới thiệu khái niệm “service”. Một dịch vụ là một nhóm tổng hợp các tính năng tương tự trong một ứng dụng. Do đó trong SOA, ứng dụng phần mềm được thiết kế như một tổ hợp của các dịch vụ. Tuy nhiên, với SOA, giới hạn hay phạm vi của một dịch vụ khá là rộng và được định nghĩa khá “thô” (coarse-grained). Việc này khiến các services cũng có thể trở nên quá to và phức tạp.
Mô hình SOA phù hợp nhất cho các hệ thống doanh nghiệp phức tạp như các hệ thống dành cho ngân hàng. Một hệ thống ngân hàng cực kỳ khó để viết dạng microservice. Nhưng một cách xây dựng nguyên khối cũng không tốt cho hệ thống ngân hàng vì ứng dụng ngân hàng đơn giản là quá lớn, quá phức tạp để triển khai thành một khối. Giải pháp tốt nhất là sử dụng cách tiếp cận SOA và tổ chức các ứng dụng phức tạp thành các dịch vụ độc lập riêng biệt.
Trong phần lớn trường hợp, dịch vụ trong SOA là độc lập nhưng chúng lại được triển khải chung. Tương tự như ứng dụng monolithic, những dịch vụ này to và phức tạp lên theo thời gian vì thường xuyên thêm các tính năng. Và thế là những ứng dụng này lại trở thành một mớ các dịch vụ monolithic, cũng không còn khác mấy so với kiến trúc một khối thông thường.
[…] Cuối cùng là đến kiến trúc công nghệ cũng vậy, mình có nhắc tới trong bài viết kiến trúc theo hướng dịch vụ và kiến trúc microservice. Bạn đọc có thể tìm đọc lại tại# http://blog.ntechdevelopers.com/service-oriented-architecture-soa-kien-truc-huong-dich-vu/# http://blog.ntechdevelopers.com/microservices-architecture-kien-truc-microservices/ […]
[…] Service-oriented Architecture (SOA) – Kiến trúc hướng dịch vụ […]