SOA (Service Oriented Architecture) – Kiến trúc hƣớng dịch vụ là một hƣớng tiếp cận với việc thiết kế và tích hợp các phần mềm, chức năng, hệ thống theo dạng modul. Kiến trúc SOA rất giống với cấu trúc của các phần mềm hƣớng đối tƣợng gồm nhiều module. Tuy nhiên khái niệm module trong SOA không đơn thuần là một gói phần mềm, hay một bộ thƣ viện nào đó. Thay vào đó, mỗi module trong một ứng dụng SOA là một dịch vụ đƣợc cung cấp rải rác ở nhiều nơi khác nhau và có thể truy cập thông qua môi trƣờng mạng. Hiểu một cách đơn giản thì một hệ thống SOA là một tập hợp nhiều dịch vụ đƣợc cung cấp trên mạng, đƣợc tích hợp lại với nhau để cùng cộng tác thực hiện các tác vụ nào đó theo yêu cầu của khách hàng.
Dịch vụ (service) là yếu tố then chốt trong SOA. Có thể hiểu dịch vụ nhƣ là một loại module thực hiện một quy trình nghiệp vụ nào đó. Một trong những mục đích của SOA là giúp các ứng dụng có thể “giao tiếp” đƣợc với nhau mà không cần biết các chi tiết kỹ thuật bên trong. Để thực hiện điều đó SOA định ra một chuẩn giao tiếp (dùng để gọi hàm dịch vụ) đƣợc định nghĩa rõ ràng và độc lập với nền tảng hệ thống, và có thể tái sử dụng. Nhƣ vậy, SOA là cấp độ cao hơn của phát triển ứng dụng, chú trọng đến quy trình nghiệp vụ và dùng giao tiếp chuẩn để giúp che đi sự phức tạp kỹ thuật bên dƣới. Sự trừu tƣợng là cốt lõi của khái niệm dịch vụ, nó giúp cho các doanh nghiệp có thể tích hợp các thành phần hiện có vào các ứng dụng mới và các thành phần này có thể đƣợc chia sẻ hoặc tái sử dụng trong nhiều lĩnh vực khác nhau của công ty đó mà không cần phải chỉnh sửa mã nguồn hay phải tái cấu trúc lại hệ thống. Bốn nguyên tắc chính của hệ thống SOA
- Sự phân định rạch ròi giữa các dịch vụ: Các dịch vụ thực hiện quá trình tƣơng tác thƣờng thông qua thành phần giao tiếp. Thành phần giao tiếp này sẽ quy định về những định dạng sử dụng trong quá trình trao đổi. Thông điệp nào đƣợc chấp nhận và thông điệp nào không đƣợc chấp nhận. Và đây chính là cách để các đối tƣợng bên
ngoài có thể truy cập thông tin và chức năng của dịch vụ. Ta chỉ cần gửi các thông điệp theo các định dạng đã đƣợc định nghĩa trƣớc mà không cần quan tâm đến cách xử lý của dịch vụ nhƣ thế nào( môi trƣờng thực thi, ngôn ngữ lập trình…). Điều này đạt đƣợc do tách biệt giữa thành phần giao tiếp và thành phần xử lý trong kiến trúc của dịch vụ.
- Tính tự trị: Các dịch vụ cần phải đƣợc triển khai và hoạt động nhƣ những thực thể độc lập mà không lệ thuộc vào dịch vụ khác. Dịch vụ phải có tính bền vững cao, nghĩa là nó sẽ không bị sụp đổ khi có sự cố.
- Các dịch vụ chia sẻ lƣợc đồ: Các dịch vụ nên cung cấp các thành phần giao tiếp của nó ra bên ngoài, và hỗ trợ chia sẻ các cấu trúc thông tin, các ràng buộc dữ liệu thông qua các lƣợc đồ dữ liệu chuẩn( độc lập ngôn ngữ, độc lập hệ nền). Nhƣ vậy hệ thống sẻ có tính liên kết và mở rộng hệ thống.
- Tính tƣơng thích của hệ thống dựa trên chính sách: Một dịch vụ muốn tƣơng tác với dịch vụ khác thì phải thỏa mãn các chính sách( policy) và yêu cầu của dịch vụ đó nhƣ mã hóa, bảo mật…Để thực hiện điều này, mỗi dịch vụ cần phải cung cấp công khai các yêu cầu, chính sách đó.