chương 1 Tóm lại, các kiến trúc trên đều hướng đến vấn đề xây dựng kiến trúc hướng dịch vụ nhưng chúng còn gặp phải một số vấn đề như: - Tight coupling (tính ăn khớp): kiến trúc triển khai cài đặt phía nhà cung cấp và phía sử dụng dịch vụ phải giống nhau. - Những chuẩn trên đa phần là những chuẩn đóng. Ví dụ: đối tượng Java trong mô hình EJB chỉ trao đổi được với các đối tượng cùng mô hình và không thể trao đổi được với các đối tượng DCOM. 14 z - Lượng thông tin trong mỗi lần giao dịch là ít, được thực hiện nhiều lần vì vậy dẫn đến chiếm dụng băng thông sử dụng và thời gian đáp trả dữ liệu nhanh.
- Một vấn đề đặt ra là làm thế nào để các hệ thống phân tán phát triển trên các công nghệ khác nhau có thể giao tiếp được với nhau? Cách tiếp cận mới này đáp ứng được yêu cầu đó. Đó là cách tiếp cận theo kiểu “kiến trúc hướng dịch vụ.” 15 z CHƯƠNG 2: KIẾN TRÚC HƯỚNG DỊCH VỤ VÀ CÔNG NGHỆ WCF 2. Giới thiệu kiến trúc hướng dich vụ SOA 2. Tổng quan Hơn 40 năm qua hệ thống CNTT đã phát triển theo cấp số nhân, trong quá trình phát triển đó, các công ty phần mềm đã tạo ra nhiều kiến trúc xử lý phức tạp.
Khả năng xử lý của các kiến trúc truyền thống đã đạt tới giới hạn của mình, trong khi nhu cầu về năng lực xử lý ngày càng tăng cao. Đòi hỏi công nghệ phần mềm phải đưa ra được kiến trúc có thể đáp ứng những nhu cầu đó từ phía doanh nghiệp. Ngoài ra các kiến trúc này phải thỏa mãn những yêu cầu về giảm chi phí, tăng khả năng tích hợp với các hệ thống của đối tác và khách hàng [4]. Kiến trúc hướng dịch vụ (Service Oriented Architecture) là một phương pháp thiết kế và tích hợp các phần mềm, chức năng hệ thống theo dạng module, trong đó mỗi module đóng vai trò là một “dịch vụ có tính loose coupling” và có khả năng truy cập thông qua môi trường mạng.
Một cách đơn giản thì một hệ thống SOA là tập hợp các dịch vụ được chuẩn hoá trên mạng, trao đổi với nhau trong ngữ cảnh một tiến trình nghiệp vụ. SOA có ba đối tượng chính minh hoạ trong hình sau: SOAP <xml> data </xml> Service W S Service Consume r http://hostname/service. D Provider wsdll L Service Registry find publish UDD Hình 4: Sơ đồ cộng tác trong SOA hiện nay Service Provider: Cung cấp stateless service phục vụ cho một nhu cầu nào đó. User (service consumer) không cần quan tâm đến vị trí thực sự mà service họ cần sử dụng đang hoạt động.
Serive Consumer: User sử dụng service được cung cấp bởi Service Provider. 16 z Service Registry: Nơi lưu trữ thông tin về các service của các Service Provider khác nhau, Service Consumer dựa trên những thông tin này để tìm kiếm và lựa chọn Service Provider phù hợp. SOA cung cấp các giải pháp để giải quyết các vấn đề tồn tại của các hệ thống hiện nay như: phức tạp, không linh hoạt và không ổn định. Một hệ thống triến khai theo mô hình SOA có khả năng dễ mở rộng, liên kết tốt.
Đây chính là điều kiện cơ sở, nền tảng để tích hợp, tái sử dụng những tài nguyên hiện có. Tư tưởng về một kiến trúc phần mềm hướng dịch vụ đã có từ các mô hình CORBA, DCOM (mô hình của Microsoft), EJB (mô hình của java) tuy nhiên những cách tiếp cận này còn gặp nhiều hạn chế (như luận văn đã phân tích ở trên). Kiến trúc SOA không chỉ cải tiến đáng kể mà còn đem đến nhiều ưu điểm nổi trội hơn các mô hình cũ. Các nguyên tắc chính của hệ thống SOA Một hệ thống SOA phải đảm bảo đủ 4 nguyên tắc chính sau: - Sự phân định rạch ròi giữa các dịch vụ Do có sự tách biệt giữa thành phần giao tiếp và thành phần thực hiện dịch vụ trong kiến trúc hướng dịch vụ.
Các dịch vụ này sẽ thực hiện quá trình tương tác chủ yếu thông qua thành phần giao tiếp. Thành phần này sẽ quy định những dạng thông điệp trong quá trình trao đổi: thông điệp nào sẽ được chấp nhận và thông điệp nào sẽ không được xử lý. Và đây chính là cách duy nhất để các đối tượng bên ngoài có thể truy cập vào thông tin và chức năng của dịch vụ. ta chỉ cần gửi thông điệp được định dạng đến trước để yêu cầu dịch vụ mà không cần biết thông điệp đó sẽ được xử lý như thế nào.
- Các dịch vụ tự hoạt động Các dịch vụ cần được triển khai và hoạt động như một thực thể độc lập mà không phụ thuộc vào các dịch vụ khác. Dịch vụ phải có tính bền vững cao, nghĩa là nó không bị sụp đổ khi có sự cố. Để thực hiện điều này, các dịch vụ cần duy trì đầy đủ thông tin cần thiết cho quá trình hoạt động của mình để có thể tiếp tục hoạt động trong trường hợp dịch vụ cộng tác của nó bị hỏng, đồng thời sử dụng các biện pháp bảo mật để tránh các cuộc tấn công ồ ạt từ bên ngoài vào như gửi thông điệp lỗi hoặc thông điệp ồ ạt. - Các dịch vụ chia sẻ lược đồ 17 z Các dịch vụ nên cung cấp thành phần giao tiếp (Interface) 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 (Schema) chuẩn.
Như thế hệ thống sẽ có tính dễ liên kết và dễ dàng mở rộng - Tính tương thích của các dịch vụ dựa trên chính sách Một dịch vụ muốn tương tác với các dịch vụ khác thì phải thoả mãn các chính sách (Policy), các yêu cầu (Requirements) của dịch vụ đó như: mã hoá, bảo mật. Mỗi dịch vụ phải cung cấp công khai các chính sách và các yêu cầu bảo mật của mình. Các tính chất của hệ thống SOA - Loose coupling Có 2 dạng đặc tính mô tả mối kết hợp giữa các modul trong kiến trúc phần mềm: loose (rời) và tigh (chặt). Trong đó các mối kết hợp mang đặc tính loose có các ràng buộc được mô tả một cách rõ ràng.
Ngược lại, với đặc tính tigh, các ràng buộc của mối kết hợp không được mô tả trước. Các ứng dụng hiện nay đều hướng tới đặc tính loose coupling nhằm tăng tính tường minh và khả năng kết nối giữa các thành phần. SOA thể hiện tính loose coupling thông qua việc sử dụng Contract and Binding (Hợp đồng và ràng buộc). Khi bắt đầu sử dụng dịch vụ, người dùng sẽ gửi yêu cầu tới đối tượng Registry để yêu cầu các thông tin của dịch vụ.
Lúc này Registry trả lại thông tin của các dịch vụ thỏa mãn tìm kiếm. Bên sử dụng dịch vụ sẽ lựa chọn dịch vụ cần sử dụng và tiến hành thực thi các nhiệm vụ theo mô tả của dịch vụ đó. Việc sử dụng dịch vụ trong SOA không phụ thuộc vào tập tin cài đặt mà dựa vào hợp đồng và các ràng buộc sử dụng dịch vụ. Tính loose coupling giúp gỡ bỏ những ràng buộc điều khiển giữa những hệ thống đầu cuối.
Mỗi hệ thống có thể tự quản lý độc lập làm tăng hiệu suất, khả năng mở rộng và khả năng đáp ứng cao. Loose coupling làm tách biệt giữa bên cung cấp và bên sử dụng, nhưng nó đòi hỏi các interface phải theo một chuẩn và cần một thành phần trung gian quản lý để trung chuyển yêu cầu giữa các hệ thống đầu cuối - Tái sử dụng dịch vụ Do SOA chạy trên môi trường mạng, các dịch vụ được đăng ký trên Internet giúp việc tìm kiếm, chia sẻ và tài sử dụng được thực hiện dễ dàng. Một số dịch vụ trong hệ thống SOA không cần tái sử dụng, những dịch vụ này sẽ không cần Interface mô tả. Việc tái sử dụng trong SOA còn được thực hiện bằng cách kết hợp nhiều dịch vụ để thực hiện các nhiệm vụ khác nhau.
18 z Tái sử dụng trong SOA còn giúp loại bỏ bớt các thành phần trùng lặp trong hệ thống, tối giản hóa việc cài đặt và đơn giản hóa quản trị hệ thống. Những dịch vụ dùng chung bởi tất cả các ứng dụng của hệ thống SOA gọi là những shared infrastructure service - Sử dụng dịch vụ bất đồng bộ Trong kiến trúc SOA, phương thức triệu gọi bất đồng bộ hoạt động theo cơ chế sau: Ban đầu, bên yêu cầu sẽ gửi một thông điệp với đầy đủ ngữ cảnh tới bên nhận. Bên tiếp nhận yêu cầu sẽ thiết lập một “kênh thông điệp” để trả kết quả sau khi đã xử lý. Trong quá trình xử lý của bên nhận yêu cầu, bên gửi yêu cầu không phải chờ yêu cầu được xử lý xong, các yêu cầu tiếp theo sẽ được đưa vào 1 queue để xử lý lần lượt.
Do bên gọi không phải chờ đợi cho đến khi yêu cầu được xử lý xong và trả về nên không bị ảnh hưởng bởi việc xử lý trễ và lỗi khi thực thi các dịch vụ bất đồng bộ. Trên lý thuyết một hệ thống SOA có thể hổ trợ gửi và nhận cả thông điệp đồngbộ và bất đồng bộ - Quản lý các Policy (chính sách) Mỗi một nhà cung cấp dịch vụ trên Internet đối với các dịch vụ cung cấp cho khách hàng sẽ có một luật kết hợp riêng gọi là các Policy. Các Policy tạo ra sự thống nhất trong việc tái sử dụng dịch vụ vì các Policy được thiết kế tách biệt và tuỳ vào mỗi ứng dụng nên giảm tối đa các thay đổi phần mềm đồng thời có thể chia các nhóm làm việc mà không cần phụ thuộc vào nhau (nhóm phát triển phần mềm và nhóm điều hành,nhóm hỗ trợ). - Khả năng cộng tác Một trong những đặc tính nổi bật và quan trọng nhất trong kiến trúc SOA là khả năng cộng tác (interoperability), khả năng này giúp cho các ứng dụng được phát triển trên các nền tảng và ngôn ngữ khác nhau có thể giao tiếp được với nhau.
Để làm được điều này, mỗi dịch vụ phải đưa ra một giao diện tích hợp (Interface) có thể triệu gọi tới thông qua một kết nối. Kết nối này được gọi là interoperable. Interoperable chứa một dạng giao thức và cấu trúc sao cho các client kết nối tới nó đều có thể hiểu được. Do vậy, interoperability hỗ trợ các giao thức và định dạng dữ liệu chuẩn của dịch vụ và client.
Các định dạng dữ liệu này có thể được ánh xạ thông qua một ngôn ngữ đặc tả trung gian. Đặc tả này sẽ chịu trách nhiệm ánh xạ giữa định dạng dữ liệu khả kết (interoperable) đến định dạng của dữ liệu tuỳ thuộc vào hệ thống.