Tài liệu Đề tài Sử dụng công nghệ dịch vụ Web: MỤC LỤC
KẾT LUẬN..........................................................................................83
MỞ ĐẦU
Kiến trúc phần mềm của một hệ thống mô tả các thành phần của hệ thống và cách thức các thành phần này tương tác với nhau; tương tác giữa các thành phần được gọi là “liên kết” (connector). Trong một hệ thống phần mềm có quy mô lớn và phức tạp thì kiến trúc của hệ thống giữ một vị trí quan trọng trong việc hiểu hệ thống, việc tổ chức phát triển và tăng cường tái sử dụng.
Ngày nay, khi mà độ phức tạp của phần mềm ngày càng tăng thì các kiến trúc phần mềm truyền thống dường như đang tiến tới giới hạn khả năng giải quyết vấn đề của chúng; trong khi đó, các tổ chức công nghệ thông tin vẫn phải đáp ứng được những yêu cầu đặt ra như: yêu cầu được đáp ứng nhanh, yêu cầu giảm giá thành, yêu cầu về khả năng thu hút và tích hợp với các đối tác mới v.v…, và đặc biệt là sự thay đổi nhanh chóng của các công nghệ.
Trong suốt bốn thập kỷ qua, thực tế phát triển phần mềm đã trải qua ...
81 trang |
Chia sẻ: hunglv | Lượt xem: 1092 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Sử dụng công nghệ dịch vụ Web, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
KẾT LUẬN..........................................................................................83
MỞ ĐẦU
Kiến trúc phần mềm của một hệ thống mô tả các thành phần của hệ thống và cách thức các thành phần này tương tác với nhau; tương tác giữa các thành phần được gọi là “liên kết” (connector). Trong một hệ thống phần mềm có quy mô lớn và phức tạp thì kiến trúc của hệ thống giữ một vị trí quan trọng trong việc hiểu hệ thống, việc tổ chức phát triển và tăng cường tái sử dụng.
Ngày nay, khi mà độ phức tạp của phần mềm ngày càng tăng thì các kiến trúc phần mềm truyền thống dường như đang tiến tới giới hạn khả năng giải quyết vấn đề của chúng; trong khi đó, các tổ chức công nghệ thông tin vẫn phải đáp ứng được những yêu cầu đặt ra như: yêu cầu được đáp ứng nhanh, yêu cầu giảm giá thành, yêu cầu về khả năng thu hút và tích hợp với các đối tác mới v.v…, và đặc biệt là sự thay đổi nhanh chóng của các công nghệ.
Trong suốt bốn thập kỷ qua, thực tế phát triển phần mềm đã trải qua nhiều phương pháp phát triển khác nhau. Mỗi phương pháp mới xuất hiện đều hướng tới mục tiêu quản lý độ phức tạp ngày càng tăng của phần mềm bằng cách đưa ra các cấu trúc có mức độ đóng gói tăng dần: từ hàm (function), lớp (class), tới thành phần (component); các cấu trúc này được xem như những phần mềm “hộp đen”, chúng che giấu cài đặt nhờ việc kiểm soát việc truy cập tới hành vi và dữ liệu của mình thông qua một giao diện tường minh. Ở mức độ đóng gói thấp, chúng ta sử dụng đối tượng để che giấu dữ liệu, ở mức độ đóng gói cao hơn, chúng ta sử dụng các thành phần để thực hiện việc này. Việc sử dụng đối tượng để che giấu thông tin hoạt động tốt với các hệ thống nhỏ, nó cho phép tạo ra các cấu trúc phần mềm phản ánh được các đối tượng trong thế giới thực. Vấn đề nảy sinh khi chúng ta cố gắng nhóm một số lượng lớn các đối tượng cùng với nhau. Mặc dù truy cập tới các đối tượng được điều khiển thông qua giao diện của chúng, mức độ đóng gói thấp của các đối tượng vẫn làm cho sự phụ thuộc giữa chúng trở nên khó kiểm soát trong một hệ thống tương đối lớn. Khái niệm thành phần được phát triển giúp quản lý các hệ thống lớn tốt hơn: một thành phần được định nghĩa là một nhóm các đối tượng hoạt động cùng nhau để thực hiện một chức năng của hệ thống. Các công nghệ như EJB (Enterprise Java Bean), .NET, CORBA (Common Object Request Broker Architecture) tỏ ra rất hiệu quả trong việc cài đặt các thành phần. Phương pháp phát triển phần mềm dựa thành phần (Component-based Development - CBD) cho phép những nhà phát triển tạo ra các hệ thống phức tạp hơn, có chất lượng cao hơn và nhanh hơn bất kỳ phương pháp phát triển phần mềm nào khác trước đó. Nhưng khi chúng ta xây dựng các thành phần trên các ngôn ngữ khác nhau, hay thậm chí là trên những nền tảng khác nhau (các thành phần không đồng nhất) cho một hệ thống thì cần có khả năng tích hợp chúng lại với nhau, nhưng một vấn đề nảy sinh: các thành phần dùng công nghệ EJB đòi hỏi việc triệu gọi phương thức thông qua RMI (Remote Method Invocation – Triệu gọi phương thức từ xa), trong khi đó, các thành phần dùng công nghệ CORBA thì lại dùng IIOP (Internet Inter-ORB Protocol), hơn nữa, khi các thành phần được định vị qua Internet, các thông điệp giữa chúng có thể bị chặn bởi tường lửa. Ngay cả khi không gặp phải những vấn đề trên thì để sử dụng được thành phần, chúng ta vẫn cần phải biết vị trí chính xác và giao diện của thành phần để nếu giao diện thay đổi, chúng ta cũng phải thay đổi cách gọi đến chúng. Vì số lượng người dùng thành phần có thể rất lớn nên việc này sẽ tạo ra các phụ thuộc có quy mô lớn, rất khó kiểm soát. Vậy làm thế nào chúng ta có thế giải quyết vấn đề này?
Kiến trúc hướng dịch vụ (Service-oriented architecture, viết tắt là SOA) đang được phát triển và được xem như một bước đột phá tiếp theo trong kiến trúc phần mềm giúp giải quyết vấn đề “khủng hoảng” phần mềm. Sự xuất hiện của công nghệ dịch vụ Web (Web services) trong vài năm trở lại đây đã tạo ra sự quan tâm mạnh mẽ tới kiến trúc này bởi Web service hiện thực hóa việc phát triển hệ thống theo kiến trúc hướng dịch vụ một cách tự nhiên và dễ dàng hơn. Web service và kiến trúc hướng dịch vụ đang thay đổi một cách căn bản cách thức xây dựng các hệ thống nội bộ (các hệ thống thông tin hỗ trợ trong các tổ chức) và cách các hệ thống nội bộ tương tác với các hệ thống bên ngoài mà chưa một kiến trúc nào trước đó có thể thực hiện được. Thuật ngữ “dịch vụ” trong kiến trúc hướng dịch vụ cũng không phải là khái niệm mới: các ứng dụng khách/chủ (client/server) trong những năm 90 đã sử dụng “dịch vụ” để chỉ khả năng thực hiện lời gọi phương thức từ xa. Kiến trúc hướng dịch vụ đặc biệt đề cao tính liên thông (interoperability) và sự trong suốt về vị trí của các dịch vụ, nói tới dịch vụ và kiến trúc hướng dịch vụ là nói về việc thiết kế và xây dựng các hệ thống sử dụng các thành phần phần mềm không đồng nhất.
Sử dụng công nghệ dịch vụ Web và kiến trúc hướng dịch vụ đem lại các lợi ích sau:
Mở rộng các lựa chọn về mặt công nghệ.
Các hệ thống được xây dựng linh hoạt và nhạy bén hơn.
Giảm thời gian phát triển.
Giảm chi phí bảo trì.
Trong đồ án tốt nghiệp này, người viết luận văn (NVLV) sẽ trình bày về lý thuyết của kiến trúc hướng dịch vụ và công nghệ dịch vụ Web, tại sao những công nghệ này có thể xóa bỏ những rào cản công nghệ để tạo ra các hệ thống phần mềm có tính tích hợp cao, và tại sao lựa chọn công nghệ dịch vụ Web là thích hợp nhất cho việc cài đặt ứng dụng theo kiến trúc hướng dịch vụ cũng như lợi ích của những ứng dụng này khi xây dựng theo kiến trúc hướng dịch vụ.
DANH MỤC CÁC TỪ VIẾT TẮT
DANH MỤC CÁC HÌNH VẼ
Hình 1.1: Sự phát triển của các công ty 6
Hình 1.2: Sự phát triển của kiến trúc 6
Hình 1.3: Phát triển phần mềm theo mô đun 7
Hình 1.4: Phát triển phần mềm hướng đối tượng 8
Hình 1.5: Phát triển phần mềm hướng thành phần 8
Hình 1.6: Phát triển phần mềm hướng dịch vụ 9
Hình 1.7: Kiến trúc phần mềm theo định nghĩa cổ điển 10
Hình 1.8: Mô hình kiến trúc hướng dịch vụ 11
Hình 1.9: Ủy nhiệm dịch vụ 17
Hình 1.10: Thành phần 19
Hình 1.11: Dịch vụ 19
Hình 1.12: Mối quan hệ giữa thành phần và dịch vụ 19
Hình 1.13: Mô hình thành phần đơn đặt mua hàng 20
Hình 1.14: Các tầng cài đặt trong thiết kế: đối tượng dịch vụ, thành phần 23
Hình 1.15:Các tầng của SOA 25
Hình 1.16: Các mức độ thực hiện kiến trúc hướng dịch vụ 26
Hình 1.17: Một quy trình phát triển hướng dịch vụ 31
Hình 1.18: Mô hình kiến trúc Jini 36
Hình 1.19: Mô hình khung của Openwings 38
Hình 1.20: Mô hình ESB 40
Hình 2.1: Mô hình dịch vụ Web 44
Hình 2.2: Cấu trúc thông điệp SOAP 50
Hình 2.3: Các kiểu dữ liệu chính trong UDDI 54
Hình 2.4: Liên kết tĩnh 58
Hình 2.5: Liên kết động thời gian xây dựng 59
Hình 2.6: Liên kết động thời gian chạy 60
Hình 2.7: Một ví dụ dịch vụ Web 64
Hình 2.8: WSDL và việc sinh mã 68
CHƯƠNG I. LÝ THUYẾT KIẾN TRÚC HƯỚNG DỊCH VỤ
Chương này sẽ trình bày các khái niệm cơ bản về :
Sự tiến hóa của kỹ thuật phát triển phần mềm.
Kiến trúc hướng dịch vụ và phát triển phần mềm theo kiến trúc hướng dịch vụ.
Các công nghệ giúp hiện thực hóa triết lý của kiến trúc hướng dịch vụ.
1. Kiến trúc hướng dịch vụ - xu hướng mới trong công nghệ thông tin.
Trong khi các nhà quản lý công nghệ thông tin đang phải đối đầu với việc giảm giá thành và tối đa lợi ích của các công nghệ hiện có, họ vẫn phải liên tục cố gắng để phục vụ khách hàng được tốt hơn, trở nên cạnh tranh hơn và phản ứng nhanh hơn với chiến lược của doanh nghiệp.
Có hai yếu tố chính ẩn sau những áp lực này, đó là tính không đồng nhất của các hệ thống và sự thay đổi nhanh về mặt công nghệ. Phần lớn các doanh nghiệp ngày nay đều gồm nhiều hệ thống, ứng dụng và kiến trúc khác nhau với thời gian tồn tại và công nghệ khác nhau. Việc tích hợp các sản phẩm từ nhiều nhà cung cấp và nhiều nền tảng thực sự là điều khó khăn. Nhưng chúng ta cũng không thể cố gắng tiếp cận theo kiểu một nhà cung cấp đối với công nghệ thông tin vì các bộ ứng dụng và kiến trúc hỗ trợ rất không mềm dẻo.
Sự thay đổi công nghệ là yếu tố thứ hai mà các nhà quản lý công nghệ thông tin phải đối mặt. Sự toàn cầu hoá và kinh doanh điện tử đang làm tăng tốc sự thay đổi. Sự toàn cầu hoá dẫn tới sự cạnh tranh gay gắt trong việc rút ngắn chu kỳ sản xuất để có thể chiếm ưu thế đối với đối thủ cạnh tranh. Các thay đổi về yêu cầu và nhu cầu của khách hàng nhanh chóng hơn do tác động của phân phối cạnh tranh và sự phong phú về thông tin sản phẩm trên Internet. Do đó lại càng thúc đẩy việc cải tiến trong sản phẩm và dịch vụ diễn ra nhanh hơn.
Các cải tiến trong công nghệ tiếp tục tăng, làm tăng sự thay đổi yêu cầu của khách hàng. Doanh nghiệp phải nhanh chóng thích nghi để tồn tại, chưa kể đến việc phải thành công trong môi trường cạnh tranh động ngày nay, và hạ tầng công nghệ thông tin phải đem lại khả năng thích nghi cho các doanh nghiệp.
Vì vậy, các tổ chức kinh doanh đang phát triển từ sự phân chia doanh nghiệp theo chiều thẳng dọc, cô lập của những năm 1980 về trước thành các cấu trúc chú trọng quy trình kinh doanh theo chiều ngang của những năm 1980, 1990, tới mô hình kinh doanh mới trong đó các doanh nghiệp có tác động lẫn nhau. Các dịch vụ kinh doanh ngày nay cần phải được thành phần hoá và phân tán.Cần chú trọng vào dây chuyền cung cấp mở rộng, cho phép khách hàng và đối tác truy cập tới các dịch vụ kinh doanh.
Hình 1.1: Sự phát triển của các công ty
Làm thế nào để môi trường công nghệ thông tin trở nên linh hoạt và nhạy bén hơn đối với sự thay đổi của các yêu cầu kinh doanh? Làm thế nào để các hệ thống và ứng dụng không đồng nhất trao đổi với nhau một cách liền mạch? Làm thế nào để đạt được các mục tiêu kinh doanh mà không làm phá sản các doanh nghiệp?
Đã có nhiều giải pháp được đề ra song song với sự phát triển của các vấn đề kinh doanh, như được chỉ ra trong hình dưới đây. Hiện nay, nhiều nhà quản lý và các chuyên gia công nghệ thông tin tin rằng chúng ta đang tiến ngày một gần hơn với câu trả lời với kiến trúc hướng dịch vụ (SOA).
Hình 1.2: Sự phát triển của kiến trúc
Để đáp ứng được nhu cầu về sự không đồng nhất, tính liên thông và sự thay đổi yêu cầu không ngừng, một kiến trúc như vậy phải đem lại một nền tảng cho việc xây dựng các dịch vụ ứng dụng với các đặc tính sau:
Liên kết lỏng lẻo (Loosely coupled)
Vị trí trong suốt (Location transparent)
Độc lập về giao thức (Protocol independent)
Dựa trên một kiến trúc hướng dịch vụ như vậy, người dùng dịch vụ thậm chí không cần phải quan tâm tới một dịch vụ cụ thể mà mình đang trao đổi thông tin vì hạ tầng cơ sở, hay là tuyến dịch vụ (service bus), sẽ tạo ra một lựa chọn thích hợp cho người dùng. Các đặc tả kỹ thuật cụ thể từ các công nghệ cài đặt khác nhau như J2EE hay .NET không làm ảnh hưởng tới người dùng SOA. Người dùng cũng có khả năng cân nhắc và thay thế một cài đặt dịch vụ tốt hơn nếu có một dịch vụ khác có chất lượng tốt hơn tồn tại.
2. Kiến trúc hướng dịch vụ - một giải pháp
2.1. Sự tiến hóa của lý thuyết phát triển phần mềm.
Trước khi giải thích về SOA cũng như bản chất những khái niệm tạo nên SOA, chúng ta cần phải hiểu về lịch sử phát triển của SOA bằng cách nhìn lại những khó khăn mà những nhà phát triển phần mềm đã phải đối mặt trong vài thập kỷ qua và xem xét các giải pháp được đưa ra để giải quyết các khó khăn đó.
Những người lập trình đã sớm nhận ra rằng việc viết phần mềm đã đang ngày càng phức tạp hơn. Họ cần một cách tốt hơn để sử dụng lại những đoạn mã đã viết. Khi những nhà nghiên cứu quan tâm tới vấn đề này, họ đã đưa ra khái niệm thiết kế mô đun. Với các quy tắc của thiết kế mô đun, các lập trình viên có khả năng viết các hàm và chương trình con và sử dụng lại mã đã viết. Đó quả là một bước đột phá và một điều tuyệt vời cho việc xây dựng phần mềm. Cách này có hiệu quả tốt trong một thời gian, giai đoạn 1960 - 1980.
Hình 1.3: Phát triển phần mềm theo mô đun
Nhưng sau đó, các lập trình viên lại nhận thấy rằng họ đang thực hiện việc cắt dán các mô đun vào các ứng dụng khác, điều này bắt đầu tạo ra một cơn ác mộng về bảo trì: khi một lỗi được phát hiện trong một hàm nào đó, họ phải kiểm tra tất cả các ứng dụng có sử dụng hàm này và thay đổi mã để sửa chữa. Những nhà phát triển không muốn điều này, họ cần một mức trừu tượng cao hơn.Các nhà nghiên cứu đã đưa ra khái niệm các lớp và phần mềm hướng đối để giải quyết vấn đề này. Phương pháp phát triển phần mềm hướng đối tượng đã có hiệu quả trong một thời gian từ 1980 đến 1990.
Hình 1.4: Phát triển phần mềm hướng đối tượng
Lại một lần nữa, khi độ phức tạp của phần mềm tăng lên, các nhà phát triển bắt đầu nhận thấy việc xây dựng và bảo trì phần mềm là rất phức tạp, họ muốn một cách nào đó để sử dụng lại và bảo trì các chức năng chứ không chỉ đơn thuần là mã nguồn. Những nhà nghiên cứu lại đưa ra một lớp trừu tượng khác để kiểm soát độ phức tạp này, đó là phần mềm dựa thành phần (Component-based software - CBD).
Hình 1.5: Phát triển phần mềm hướng thành phần
CBD là một giải pháp tốt cho việc sử dụng lại và bảo trì, nhưng nó không kiểm soát được tất cả các độ phức tạp mà các nhà phát triển hiện nay đang phải đối mặt như: phần mềm phân tán, các ứng dụng tích hợp, các nền tảng, thiết bị khác nhau v.v… Phần mềm ngày nay phải được xây dựng sao cho có thể đáp ứng được tất cả các yêu cầu trên. Và kiến trúc hướng dịch vụ cùng với công nghệ dịch vụ Web xuất hiện đã đem lại một giải pháp cho tất cả các yêu cầu. Bằng cách thực hiện SOA, các nhà phát triển có thể loại bỏ được những sự không tương thích về giao thức, nền tảng và các ứng dụng được tích hợp một cách dễ dàng.
Hình 1.6: Phát triển phần mềm hướng dịch vụ
Như vậy, theo thời gian, ta nhận thấy rằng những phương pháp phát triển phần mềm đã liên tục tiến hóa, từ phương pháp xây dựng phần mềm đơn giản nhất cho đến những phần mềm đồ sộ như ngày nay. Quá trình tiến hóa của phương pháp phát triển phần mềm có thể tóm lược lại như sau: ban đầu là phương pháp phát triển tự phát, tức là cần máy tính thực hiện như thế nào thì viết lệnh như thế đó. Đơn vị có thể tái sử dụng của phần mềm là rất nhỏ - từng dòng lệnh. Những phần mềm được viết ra thường nhỏ, và đơn giản, chủ yếu là các phần mềm hỗ trợ tính toán. Sau đó kỹ thuật phát triển phần mềm tiến thêm một bước mới, đó là phát triển phần mềm theo mô đun. Nhờ phương pháp này, những đơn vị chương trình có khả năng tái sử dụng đã tăng lên và quy mô của phần mềm cũng đã lớn hơn, không chỉ dừng ở các phần mềm hỗ trợ tính toán, mà còn bao gồm cả những ứng dụng thương mại. Kỹ thuật phát triển phần mềm hướng đối tượng đã trở thành một làn sóng mới về kỹ thuật phát triển phần mềm trong một vài thập kỷ gần đây, việc đưa ra các khái niệm lớp, hàm và biến thành phần, kế thừa, kết tập...đã khiến cho việc xây dựng phần mềm trở nên dễ dàng hơn, cấu trúc chương trình trở nên dễ hiểu hơn, với khái niệm đối tượng tương đối gần với các thực thể trong đời sống tự nhiên và xã hội. Kỹ thuật phát triển phần mềm hướng đối tượng đã làm tăng khả năng tái sử dụng mã bằng các phương pháp như kế thừa, kết tập, và nó cũng làm cho phần mềm có khả năng khả chuyển hơn do đặc tính khép kín của các lớp. Cùng với sự phát triển ngày càng nhanh của các phần mềm cả về quy mô lẫn yêu cầu về thời gian phát triển, phương pháp phát triển phần mềm hướng thành phần, là mức trừu tượng hóa cao hơn của phương pháp phát triển hướng đối tượng. Đặc điểm chính của phần mềm phát triển theo phương pháp này là chúng gồm nhiều thành phần, mỗi thành phần có thể hoàn thành một hoặc một số công việc cụ thể, nhất định. Mỗi thành phần bao gồm một tập các lớp, các đối tượng. Phần mềm được tạo ra bằng cách ghép các thành phần đó lại với nhau, thông qua việc sử dụng các giao diện giữa chúng. Phần mềm được tạo ra theo phương pháp này có khả năng tái sử dụng mã rất cao, việc bảo trì và nâng cấp khá dễ dàng. Tuy nhiên, quy mô của phần mềm ngày càng nở rộng, thời gian đưa ra thị trường được đòi hỏi ngày càng phải sớm hơn, yêu cầu về khả năng tái sử dụng mã và khả năng dễ bảo trì đối với phần mềm đã khiến cho phương pháp phát triển phần mềm hướng dịch vụ ra đời và đang được xem như là một làn sóng mới trong phát triển phần mềm.
Bảng so sánh dưới đây cho ta thấy rõ ưu thế của phương pháp phát triển phần mềm hướng dịch vụ so với các phương pháp phát triển phần mềm trước đó.
Hướng cấu trúc
Hướng đối tượng
Hướng thành phần
Hướng dịch vụ
Mức độ đóng gói
Rất thấp
Thấp
Trung bình
Cao
Giao ước sử dụng
Xác định
Riêng tư /Công khai
Công khai
Xuất bản
Khả năng tái sử dụng
Thấp
Thấp
Trung bình
Cao
Độ gắn kết
Chặt
Chặt
Lỏng lẻo
Rất lỏng lẻo
Các ràng buộc
Thời gian biên dịch
Thời gian biên dịch
Thời gian biên dịch
Thời gian chạy
Phạm vi truyền thông
Nội bộ ứng dụng
Nội bộ ứng dụng
Nội bộ ứng dụng
Giữa các công ty
2.2 Kiến trúc hướng dịch vụ
Kiến trúc phần mềm của một chương trình hoặc một hệ thống tính toán là cấu trúc hoặc các cấu trúc của hệ thống, bao gồm các thành phần phần mềm, các thuộc tính có thể nhìn thấy từ bên ngoài của các thành phần đó và các mối quan hệ giữa chúng.
Hình 1.7: Kiến trúc phần mềm theo định nghĩa cổ điển
Kiến trúc hướng dịch vụ là một loại kiến trúc phần mềm đặc biệt có nhiều đặc tính riêng biệt.
Hình 1.8: Mô hình kiến trúc hướng dịch vụ
2.2.1. Các định nghĩa về kiến trúc hướng dịch vụ
Kiến trúc hướng dịch vụ (Service-oriented architecture - SOA) là một cụm từ thông dụng trong công nghệ thông tin ngày nay. Mặc dù đã có nhiều cố gắng nhưng vẫn không có được sự thống nhất trong định nghĩa về kiến trúc này.
“SOA là một framework cho phép tính năng ứng dụng được cung cấp, tìm ra và tiêu thụ như là các tập Web Service có khả năng tái sử dụng. Trong khi Web Service không phải là SOA, nó là một trong các chuẩn cho phép xây dựng SOA. SOA trừu tượng hoá tính phức tạp và chi tiết cài đặt, khiến cho nó trở thành một kiến trúc hoàn thiện để xây dựng các hệ thống phần mềm.” Scott Rosenbloom is chief strategist with WRQ Inc.
“Các giải pháp công nghệ thông tin an toàn, tích hợp đáp ứng được các yêu cầu nghiệp vụ. Các giải pháp phải cài đặt, tối ưu và chỉ dẫn sự thực thi quy trình nghiệp vụ bằng cách kết hợp tính năng của các dịch vụ riêng lẻ, đóng kín và có khả năng tái sử dụng. SOA không nặng nề về việc phát triển ứng dụng phức tạp mà tập trung vào việc chuẩn hoá giao diện giữa các thành phần dịch vụ với sự quản lý tập trung và cài đặt phân tán”.Dave Morris, I.T. Security Lead TransAlta Corp
“SOA mô hình hoá nghiệp vụ như là một tập các dịch vụ tự chứa đựng (self-contained) có hiệu lực giữa các tổ chức và có thể được gọi cả từ bên trong và bên ngoài thông qua các giao thức chuẩn.”. Dave McComb, president, Semantic Arts
“SOA không phải là cái gì khác ngoài kiến trúc hướng nghiệp vụ, cái mà cho phép tính linh hoạt của các ứng dụng nghiệp vụ, để trở thành độc lập nhưng cộng tác, trong khi cung cấp các dịch vụ của chúng. Các ứng dụng dưới kiến trúc này cùng một lúc có thể là “client” và “server” với các dịch vụ tuỳ thích.” Satheesan Kunnel, USWWI
“SOA là một hướng tiếp cận để thiết kế và tích hợp phần mềm trong một phương pháp mô đun trong đó, mỗi mô đun là một “dịch vụ được kết nối lỏng lẻo” có thể truy cập qua mạng và có khả năng tích hợp động với các dịch vụ khác trong thời gian chạy. Một dịch vụ phải đưa ra một giao diện chuẩn (WSDL) cho tính năng và các lời gọi các phương thức của nó.” Rajesh Dawar
“Các dịch vụ cung cấp một số chức năng cho những người biết cách yêu cầu và tiêu thụ chúng mà không cần phải biết làm thế nào để tạo ra được chức năng ấy. SOA là một cách tiếp cận để xây dựng các ứng dụng phần mềm như là các tập hợp dịch vụ tự trị, tương tác không cần quan tâm tới nền tảng, cấu trúc dữ liệu hay các thuật toán bên trong của các dịch vụ khác.” Michael Champion, R&D specialist, Software AG
“SOA là một kiểu thiết kế cố gắng cho phép sự tích hợp dễ dàng và các ứng dụng linh hoạt. Trong SOA, chức năng ứng dụng được thiết kế như là các dịch vụ có khả năng tái sử dụng và chia sẻ. Một dịch vụ là một phần của chức năng ứng dụng thể hiện chức năng của nó qua một giao diện trừu tượng, che giấu các phần việc bên trong của sự cài đặt dịch vụ.”Anne Thomas Manes, analyst, Burton Group
“SOA là một kiến trúc cho quy mô doanh nghiệp (thường trải rộng nhiều ứng dụng trong một doanh nghiệp hoặc nhiều doanh nghiệp) trong đó thành phần cấu trúc chính là dịch vụ.
Một dịch vụ là một tập hợp các chức năng nghiệp vụ liên quan tới nhau tương tác nội bộ hoặc từ xa sử dụng kiểu truyền thông truyền thông điệp / hướng tài liệu. Một dịch vụ bao gồm một giao diện dịch vụ và một cài đặt dịch vụ cài đặt một hoặc nhiều giao diện dịch vụ và gắn liền với một tập hợp tính năng nhất định. Các dịch vụ cụ thể được xác định dưới dạng giao thức vận chuyển/ ứng dụng/ thông điệp, chứ không phải dưới dạng một mô hình lập trình cụ thể. SOA điển hình bao gồm các dịch vụ kỹ thuật để quản lý siêu dữ liệu về các giao diện dịch vụ và các cài đặt, các nguồn cung cấp và nguồn tiêu thụ dịch vụ; và các dịch vụ cho việc quản lý và bắt tuân theo các chính sách, điều khiển truy cập, các tính năng bảo mật, các giao dịch, mặc dù tất cả các dịch vụ này đều là tuỳ chọn trong một thể hiện SOA cụ thể.” Stefan Tilkov, CEO, innoQ
“SOA là một quy tắc kiến trúc tập trung vào quan điểm cho rằng các tài sản công nghệ thông tin được mô tả và thể hiện ra như là các dịch vụ. Các dịch vụ này có thể được kết hợp theo một cách thức lỏng lẻo để tạo thành các quy trình nghiệp vụ ở mức cao hơn, đem lại cho nghiệp vụ tính nhanh nhẹn trong sự không đồng nhất về mặt công nghệ thông tin. “Ronald Schmelzer, analyst, ZapThink LLC
“SOA là một cách tiếp cận để phát triển các ứng dụng phân tán liên kết không chặt chẽ, độc lập giao thức tạo thành từ các tài nguyên phần mềm có tính hoàn toàn xác định, tự chứa đựng có khả năng truy cập như là các dịch vụ giữa các doanh nghiệp được mở rộng theo một cách được chuẩn hoá nhằm tăng cường tính tái sử dụng và liên thông. ” Ankur Gupta, marketing manager, Fiorano Software Inc.
“SOA là một dạng của kiến trúc công nghệ gắn liền với các quy tắc của hướng dịch vụ. Khi được cài đặt thông qua nền tảng công nghệ Web Service, SOA tạo ra tiềm năng để hỗ trợ và thúc đẩy các quy tắc này trong toàn bộ quy trình nghiệp vụ và các miền tự động hoá của một doanh nghiệp.” Thomas Erl, chief architect, XMLTC Consulting Inc
Nói tóm lại, SOA có thể được hiểu là một hướng tiếp cận để xây dựng các hệ thống phân tán cung cấp chức năng ứng dụng dưới dạng các dịch vụ tới các ứng dụng người dùng cuối hoặc các dịch vụ khác:
SOA là một kiến trúc dùng các chuẩn mở để biểu diễn các thành phần phần mềm như là các dịch vụ.
Cung cấp một cách thức chuẩn hóa cho việc biểu diễn và tương tác với các thành phần phần mềm.
Các thành phần phần mềm riêng lẻ trở thành các khối cơ bản có thể sử dụng lại để xây dựng các ứng dụng khác.
Được sử dụng để tích hợp với các ứng dụng bên ngoài tổ chức.
Dịch vụ là yếu tố then chốt trong SOA. Có thể hiểu dịch vụ như là hàm chức năng (mô đun phần mềm) thực hiện quy trình nghiệp vụ nào đó. Các dịch vụ trong SOA có các đặc điểm sau:
Các dịch vụ là có thể tìm kiếm được.
Các dịch vụ có tính liên thông.
Các dịch vụ không được gắn kết chặt chẽ với nhau.
Các dịch vụ là phức hợp, bao gồm nhiều thành phần, được đóng gói ở mức cao.
Các dịch vụ trong suốt về vị trí.
Các dịch vụ có khả năng tự hàn gắn.
Một cách cơ bản, SOA là tập hợp các dịch vụ kết nối “mềm dẻo” với nhau (nghĩa là một ứng dụng có khả năng giao tiếp với một ứng dụng khác mà không biết các chi tiết kỹ thuật bên trong), có giao diện đượ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. 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 diện chuẩn để che giấu sự phức tạp kỹ thuật bên dưới.
Thiết kế SOA tách riêng phần thực hiện dịch vụ (phần mềm) với giao diện gọi dịch vụ. Điều này tạo nên một giao diện nhất quán cho ứng dụng sử dụng dịch vụ mà không cần quan tâm tới công nghệ thực hiện dịch vụ. Thay vì xây dựng các ứng dụng đơn lẻ và đồ sộ, nhà phát triển sẽ xây dựng các dịch vụ tinh gọn hơn có thể triển khai và tái sử dụng trong toàn bộ quy trình nghiệp vụ. Điều này cho phép tái sử dụng phần mềm tốt hơn, cũng như tăng sự linh hoạt vì nhà phát triển có thể cải tiến dịch vụ mà không làm ảnh hưởng đến ứng dụng sử dụng dịch vụ.
Thật ra, triết lý SOA không hoàn toàn mới, DCOM và CORBA cũng có kiến trúc tương tự. Tuy nhiên, các kiến trúc cũ ràng buộc các thành phần 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 đượ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.
Ưu điểm quan trọng nhất của SOA là khả năng kết nối mềm dẻo và tái sử dụng. Các dịch vụ có thể được sử dụng trên nền tảng bất kỳ và đước viết với ngôn ngữ bất kỳ (ví dụ, ứng dụng Java có thể liên kết với dịch vụ web .NET và ngược lại).
SOA dựa trên hai nguyên tắc thiết kế quan trọng:
Mô đun: tách vấn đề lớn thành nhiều vấn đề nhỏ
Đóng gói: che giấu dữ liệu và logic trong từng mô đun đối với truy cập từ ngoài
Một thiết kế kiến trúc phù hợp với khái niệm của SOA cần tuân theo những tính chất sau:
Một dịch vụ là một đơn vị phần mềm gồm các hoạt động nghiệp vụ có tính tự chứa đựng và mức độ đóng gói cao (coarse-grained).
Một dịch vụ có thể dùng lại được, cho phép có thể xây dựng được một dịch vụ mới từ các dịch vụ hiện có. Do đó, việc quan sát các hàm ý có thể có của các thuộc tính phi chức năng như tính giao dịch là rất quan trọng.
Một giao diện dịch vụ là một điểm cuối mạng (network endpoint) đảm bảo tính độc lập và trong suốt về vị trí.
Một dịch vụ cần có khả năng được phát hiện ra một cách công khai bằng cách sử dụng một nơi đăng ký dịch vụ nhằm cho phép các liên kết động tới dịch vụ.
Một dịch vụ cần đảm bảo tính liên thông bằng cách hỗ trợ các giao thức truyền thông được chuẩn hóa và các định dạng dữ liệu rõ ràng.
Các đặc điểm trên đảm bảo cho một kiến trúc hướng dịch vụ khả năng gắn kết lỏng lẻo của các dịch vụ phân tán và có tính mô đun bằng cách sử dụng các giao ước dịch vụ để mô tả các định dạng thông điệp cần thiết.
2.2.2. Các thực thể trong kiến trúc hướng dịch vụ
Các thực thể trong kiến trúc hướng dịch vụ bao gồm:
Dịch vụ (service).
Thành phần sử dụng dịch vụ (service consumer client/ requester).
Thành phần cung cấp dịch vụ (service provider).
Thành phần đăng ký dịch vụ (service registry).
Giao kèo dịch vụ (contract).
Ủy nhiệm dịch vụ.
Ràng buộc sử dụng dịch vụ (service lease).
Dịch vụ:
Dịch vụ là một chức năng rõ ràng, tự chứa đựng và không phụ thuộc vào ngữ cảnh hay trạng thái của các dịch vụ khác. Các thành phần sử dụng dịch vụ có thể truy cập tới dịch vụ thông qua giao diện dịch vụ được xuất bản. Dịch vụ có các tính chất sau:
Dịch vụ có tính chất rõ ràng, là một đơn vị chức năng nghiệp vụ để có thể được triệu gọi.
Có khả năng triệu gọi thông qua các giao thức truyền thông chung.
Có tính liên thông và vị trí trong suốt.
Dịch vụ được định nghĩa bằng các giao diện tường minh.
Các giao diện độc lập với cài đặt.
Cung cấp giao kèo giữa các thành phần cung cấp và sử dụng dịch vụ
Dịch vụ là các mô đun phức tạp, bao gồm nhiều thành phần. Mức độ đóng gói của dịch vụ càng cao thì dịch vụ càng có khả năng tái sử dụng và linh hoạt.
Thành phần sử dụng dịch vụ:
Thành phần sử dụng dịch vụ là một ứng dụng, một dịch vụ, hoặc một loại mô đun phần mềm khác có yêu cầu sử dụng dịch vụ. Đây là thực thể khởi tạo việc định vị dịch vụ tại một kho đăng ký dịch vụ, liên kết tới dịch vụ qua một kênh truyền thông và thực thi chức năng của dịch vụ. Thành phần này thực thi nhiệm vụ bằng cách gửi tới dịch vụ một yêu cầu được định dạng theo đúng giao kèo.
Thành phần cung cấp dịch vụ:
Thành phần cung cấp dịch vụ là một thực thể có khả năng được địa chỉ hóa qua mạng, nó có thể chấp nhận và thực thi các yêu cầu từ những thành phần sử dụng dịch vụ. Thành phần cung cấp dịch vụ có thể là một hệ thống máy tính lớn, một thành phần, hoặc một loại hệ thống phần mềm khác có thể thực thi các yêu cầu dịch vụ. Thực thể này xuất bản giao kèo của nó trong một kho đăng ký dịch vụ để các thành phần sử dụng dịch vụ có thể truy cập.
Thành phần đăng ký dịch vụ:
Thành phần đăng ký dịch vụ là một thư mục trên mạng có chứa các dịch vụ sẵn dùng. Đây là một thực thể chấp nhận và lưu trữ các giao kèo từ các thành phần cung cấp dịch vụ và cung cấp các giao kèo đó cho những thành phần sử dụng dịch vụ.
Giao kèo dịch vụ:
Một giao kèo là một bản đặc tả cách thức để thành phần sử dụng dịch vụ có thể tương tác với thành phần cung cấp dịch vụ. Nó chỉ ra khuôn dạng của thông điệp yêu cầu và thông điệp đáp ứng từ dịch vụ. Giao kèo dịch vụ có thể đòi hỏi một tập các điều kiện tiên quyết và điều kiện sau. Các điều kiện này xác định trạng thái cần thiết của dịch vụ để thực thi một chức năng cụ thể. Bản giao kèo cũng có thể bao gồm các mức độ chất lượng của dịch vụ, các đặc tả cho các khía cạnh phi chức năng của dịch vụ.
Ủy nhiệm dịch vụ:
Thành phần cung cấp dịch vụ cung cấp một ủy nhiệm dịch vụ cho thành phần sử dụng dịch vụ. Thành phần sử dụng dịch vụ thực thi yêu cầu bằng cách gọi một hàm API trên nó. Ủy nhiệm dịch vụ (hình 1.9) sẽ tìm một giao kèo và một tham chiếu tới thành phần cung cấp dịch vụ trong nơi đăng ký. Sau đó, nó định dạng thông điệp yêu cầu và thực thi yêu cầu trên danh nghĩa của thành phần sử dụng dịch vụ. Ủy nhiệm dịch vụ là một thực thể không bắt buộc, nó chỉ đơn giản hóa cho thành phần sử dụng dịch vụ và thành phần sử dụng dịch vụ hoàn toàn có thể viết phần mềm để truy cập trực tiếp tới dịch vụ.
Một thành phần cung cấp dịch vụ sẽ cung cấp nhiều ủy nhiệm cho các môi trường khác nhau, mỗi ủy nhiệm dịch vụ được viết bằng ngôn ngữ của thành phần sử dụng dịch vụ. Ví dụ, một thành phần cung cấp dịch vụ có thể cung cấp các ủy nhiệm cho Java, Visual Basic, Delphi nếu đó là các nền tảng của thành phần sử dụng dịch vụ sử dụng dịch vụ. Mặc dù ủy nhiệm dịch vụ là không bắt buộc nhưng nó có thể cải thiện một cách đáng kể hiệu năng và tính tiện dụng cho các thành phần sử dụng dịch vụ.
Hình 1.9: Ủy nhiệm dịch vụ
Ràng buộc sử dụng dịch vụ:
Ràng buộc sử dụng dịch vụ mà thành phần đăng ký dịch vụ gán cho thành phần sử dụng dịch vụ rất cần thiết để dịch vụ bảo trì được thông tin trạng thái liên kết giữa thành phần sử dụng và thành phần cung cấp. Nó tạo ra sự gắn kết không chặt chẽ giữa các thành phần này bằng cách giới hạn khoảng thời gian mà chúng được liên kết với nhau. Không có ràng buộc, một thành phần sử dụng dịch vụ có thể liên kết với một dịch vụ mãi mãi và không bao giờ liên kết lại với giao kèo của nó.
Các thao tác trong kiến trúc hướng dịch vụ bao gồm:
Xuất bản dịch vụ: Để có thể truy cập được, một mô tả dịch vụ phải được xuất bản để nó có thể được tìm thấy và triệu gọi bởi một người dùng dịch vụ.
Tìm kiếm dịch vụ: Một người yêu cầu dịch vụ định vị một dịch vụ bằng cách yêu cầu nơi đăng ký dịch vụ một dịch vụ phù hợp với các tiêu chí đặt ra.
Liên kết và thực thi dịch vụ: Sau khi nhận được mô tả dịch vụ, người dùng sẽ gọi dịch vụ theo các thông tin mô tả.
2.2.3. Lợi ích của kiến trúc hướng dịch vụ
Như đã trình bày trong phần mở đầu, các doanh nghiệp đang phải đối mặt với hai vấn đề cơ bản: khả năng thay đổi một cách nhanh chóng, và yêu cầu giảm giá thành sản phẩm. Với kiến trúc hướng dịch vụ, chúng ta có thể nhận thấy nhiều lợi ích giúp các tổ chức thành công trong môi trường kinh doanh hiện nay:
Thúc đẩy được các tài sản hiện có
SOA cung cấp một lớp trừu tượng cho phép một tổ chức tiếp tục thúc đẩy đầu tư vào công nghệ thông in bằng cách đóng gói những tài sản hiện có này thành những dịch vụ cho các chức năng nghiệp vụ. Các tổ chức có thể tiếp tục thu được lợi nhuận từ các tài nguyên hiện có thay vì phải xây dựng lại chúng từ đầu.
Tích hợp và quản lý độ phức tạp dễ dàng hơn
Điểm tích hợp trong một kiến trúc hướng dịch vụ là đặc tả dịch vụ, không phải là cài đặt dịch vụ. Điều này làm cho cài đặt được trong suốt và tổi thiểu hoá ảnh hưởng khi thay đổi hạ tầng và cài đặt xảy ra. Bằng cách cung cấp một đặc tả dịch vụ trước các tài nguyên và tài sản hiện có được xây dựng trên các hệ thống riêng biệt, tích hợp trở nên dễ quản lý hơn vì độ phức tạp được cô lập. Việc này thậm chí còn trở nên quan trọng hơn khi nhiều nghiệp vụ hơn hoạt động cùng nhau để tạo nên một dây chuyền.
Nhạy bén hơn và thời gian tung ra thị trường nhanh hơn.
Khả năng tạo thành các dịch vụ mới từ những tài nguyên hiện có đem lại một lợi ích khác biệt cho một tổ chức phải nhanh chóng đáp ứng được yêu cầu nghiệp vụ thay đổi. Thúc đẩy các thành phần và dịch vụ hiện có làm giảm thời gian cần thiết để đi qua vòng đời phát triển phần mềm gồm: thu thập yêu cầu, thực hiện thiết kế, phát triển và kiểm thử. Việc này dẫn tới sự phát triển nhanh của các dịch vụ nghiệp vụ mới và cho phép tổ chức nhanh chóng đáp ứng được các thay đổi và giảm thời gian cần thiết để tung sản phẩm ra thị trường.
Giảm giá thành và tăng cường tái sử dụng:
Với các dịch vụ nghiệp vụ cốt lõi được thể hiện theo cách liên kết lỏng lẻo, chúng có thể được sử dụng một cách dễ dàng hơn và có thể được kết hợp dựa trên các yêu cầu nghiệp vụ; có nghĩa là giảm sự trùng lặp về tài nguyên, nâng cao tiềm năng tái sử dụng và hạ giá thành sản phẩm.
SOA cho phép các doanh nghiệp sẵn sàng cho tương lai. Các quy trình nghiệp vụ bao gồm hàng loạt các dịch vụ nghiệp vụ có thể được tạo ra, thay đổi và quản lý một cách dễ dàng hơn để phù hợp với yêu cầu về thời gian. SOA đem lại tính linh hoạt và nhạy bén cần thiết cho các tổ chức có thể tồn tại và phát triển.
Chuyển sang kiến trúc hướng dịch vụ không phải là một nhiệm vụ đơn giản. Thay vì việc chuyển toàn bộ các chức năng nghiệp vụ của một doanh nghiệp thành hướng dịch vụ, hướng tiếp cận được khuyến cáo là chỉ chuyển một tập con phù hợp của chức năng nghiệp vụ khi doanh nghiệp phát sinh nhu cầu hoặc đoán trước được các nhu cầu.
Khi nhiều doanh nghiệp nhận ra giá trị và sức mạnh của kiến trúc hướng dịch vụ, nhiều cuộc tranh cãi về việc chúng cần bắt đầu từ đâu trong quy trình hướng tới một sự chuyển đổi nghiệp vụ hoàn thiện lại bắt đầu.
2.3. Dịch vụ và thành phần
Thành phần là gì?
“Thành phần là một gói các tạo tác phần mềm có thể được phát triển một cách độc lập và có thể được phân phối như là một đơn vị, các đơn vị này sau đó có thể kết hợp với nhau để tạo thành một thứ gì đó lớn hơn “.
Hình 1.10: Thành phần
Dịch vụ là gì?
“Dịch vụ là một chức năng rõ ràng, tự chứa đựng và không phụ thuộc vào ngữ cảnh hoặc trạng thái của các dịch vụ khác.”
Hình 1.11: Dịch vụ
Mối quan hệ giữa dịch vụ và thành phần:
Hình 1.12: Mối quan hệ giữa thành phần và dịch vụ
Dịch vụ là một đơn vị xử lý có mức độ đóng gói cao, nó dùng và sinh ra các tập đối tượng được truyền theo kiểu tham trị. Dịch vụ không giống như đối tượng trong ngôn ngữ lập trình, nó gần với khái niệm giao dịch kinh doanh hơn.
Một dịch vụ gồm một tập hợp các thành phần hoạt động cùng nhau để cung cấp một chức năng nghiệp vụ. Vì vậy, có thể nói rằng thành phần có mức độ đóng gói thấp hơn hơn dịch vụ. Ngoài ra, trong khi dịch vụ ánh xạ tới một chức năng nghiệp vụ thì thành phần ánh xạ tới các thực thể nghiệp vụ và quy tắc nghiệp vụ thao tác trên các thực thể đó. Ví dụ, xem xét mô hình thành phần Đơn đặt mua hàng (Purchase Order) cho ví dụ quản lý mạng lưới cung cấp trong hình sau:
Hình 1.13: Mô hình thành phần đơn đặt mua hàng
Trong thiết kế hướng thành phần, các thành phần được tạo ra gần tương đương với các thực thể nghiệp vụ (như Customer, Purchase Order, Oder Item) và đóng gói hành vi phù hợp với các hành vi mà thực thể cần.
Ví dụ, thành phần Purchase Order cung cấp các hàm nhận thông tin về danh sách các sản phẩm được đặt và tổng số lượng của đơn đặt hàng; thành phần Item cung cấp các hàm để nhận được thông tin về số lượng và giá thành của sản phẩm được đặt. Cài đặt của mỗi thành phần được đóng gói sau giao diện. Vì vậy, một người dùng thành phần Purchase Order không biết về lược đồ bảng Purchase Order và thuật toán tính thuế, số tiền được giảm trên tổng số đơn đặt hàng.
Trong thiết kế hướng dịch vụ, các dịch vụ được thiết kế không dựa trên các thực thể nghiệp vụ, thay vào đó, mỗi dịch vụ là một khối quản lý các thao tác trên một tập các thực thể nghiệp vụ. Ví dụ, dịch vụ Customer sẽ trả lời bất kỳ yêu cầu nào từ hệ thống hoặc dịch vụ khác cần truy cập tới thông tin khách hàng. Dịch vụ Customer có thể xử lý một yêu cầu cập nhật thông tin khách hàng, thêm, cập nhật, xoá các danh mục đầu tư, và điều tra về lịch sử đặt hàng của Customer. Dịch vụ Customer chứa tất cả các dữ liệu liên quan tới khách hàng mà nó đang quản lý và có khả năng tạo ra các yêu cầu dịch vụ với danh nghĩa là người dùng dịch vụ để cung cấp một khung nhìn dịch vụ khách hàng thống nhất. Điều này có nghĩa là một dịch vụ là một đối tượng quản lý tạo ra và quản lý tập các thành phần của nó.
Kiến trúc hướng dịch vụ và phát triển hướng thành phần
Ở rất nhiều khía cạnh, SOA là một sự phát triển các nguyên lý cơ bản của phát triển hướng thành phần (CBD – Component-based Development). Nó cũng biểu diễn một bước phát triển trong việc đem các nghiệp vụ và công nghệ thông tin xích lại gần nhau hơn. Trong khi các dịch vụ SOA là hữu hình đối với người dùng dịch vụ, các thành phần nền tảng của chúng là trong suốt. Đối với người cung cấp dịch vụ, thiết kế của các thành phần, sự thể hiện và quản lý dịch vụ phản ánh các quyết định thiết kế và kiến trúc chính cho phép phát triển dịch vụ trong SOA. Việc ra những quyết định đó đòi hỏi một sự hiểu biết về các thành phần của SOA và mô hình hóa SOA để nhận diện, phân loại, xác định và cấu trúc các thành phần của dịch vụ.
Sự phát triển của SOA bắt nguồn từ phát triển hướng đối tượng và hướng thành phần. Thế giới của các đối tượng bắt đầu với sự xuất hiện của các ngôn ngữ lập trình hướng đối tượng và được phát triển thành mô hình, sau đó, nó thêm vào các kỹ thuật kỹ thuật thiết kế và các phương pháp phân tích thiết kế hướng đối tượng. Các dịch vụ hạ tầng, các công cụ, các nền tảng phát triển, các mẫu, và các kiến trúc tham chiếu theo sau.
Phát triển hướng thành phần đã tạo ra một hướng tiếp cận mới trong việc thiết kế, xây dựng, cài đặt và phát triển của các ứng dụng phần mềm. Các ứng dụng được lắp ráp từ các thành phần từ nhiều nguồn khác nhau và các thành phần được viết trên nhiều ngôn ngữ lập trình khác nhau, nhiều môi trường khác nhau, và chạy trên các nền tảng khác nhau. Nhưng chỉ với phát triển hướng đối tượng, các dịch vụ hạ tầng, các công cụ, nền tảng phát triển và các mẫu mới làm cho phát triển hướng thành phần trở thành hiện thực.
Cả hướng đối tượng và hướng thành phần đều yêu cầu tính tái sử dụng trong phát triển phần mềm. Với phát triển hướng đối tượng thì đó một yếu tố tùy chọn, còn với phát triển hướng thành phần là bắt buộc. Phát triển hướng dịch vụ đem lại khả năng tái sử dụng lớn hơn so với phát triển hướng đối tượng. SOA, với nền tảng là cả phát triển hướng đối tượng và hướng thành phần, còn tạo ra khả năng tái sử dụng cao hơn nữa. SOA trở thành một nhân tố mới để đạt được kinh tế trong công nghệ phần mềm.
Các khái niệm và quy tắc của phát triển hướng đối tượng và hướng thành phần được áp dụng để đem lại các framework thích hợp cho việc chỉ đạo thiết kế và phát triển các dịch vụ SOA.
Rất nhiều các nhà cung cấp dịch vụ thường cài đặt một mô tả dịch vụ. Trong các thành phần, chúng ta có thể tìm thấy các quy tắc thiết kế của hướng đối tượng xác định các cấu trúc trong của thành phần. Do vậy, mô hình hóa dịch vụ là nhằm xác định đúng các dịch vụ, tổ chức chúng theo một cây phân cấp của các dịch vụ phức hợp (các thành phần có mức độ đóng gói thấp hỗ trợ các thành phần có mức độ đóng gói cao), sắp xếp chúng để hỗ trợ cho một quy trình nghiệp vụ. Về phía nhà cung cấp, các dịch vụ này hoặc là được cấp phát một cách trực tiếp cho các thành phần chứa hướng thành phần để cài đặt các chức năng của chúng, hoặc được cài đặt bằng cách thay đổi các chức năng sẵn có.
Đây là bước tiến cơ bản trong công nghệ phần mềm hướng dịch vụ: thành phần sử dụng dịch vụ không cần phải quan tâm về việc cài đặt hay hiện thực hóa của dịch vụ, miễn là nó hỗ trợ các chức năng và chất lượng theo đúng yêu cầu của dịch vụ. Đây được gọi là khung nhìn của thành phần sử dụng (Consumer View). Bên cạnh đó, khung nhìn của thành phần cung cấp đưa ra một triển vọng về cách thiết kế cài đặt của thành phần cung cấp dịch vụ; các quyết định và thiết kế kiến trúc của nó.
Một sự khác biệt chính với hướng đối tượng truyền thống là chúng ta không còn phải tạo ra các mô hình đối tượng lớn, mà chỉ cần tạo ra các thiết kế bên trong của các ranh giới thành phần có mức độ đóng gói cao hơn, thông qua hướng đối tượng có mức độ đóng gói thấp hơn.
Các thành phần không cần quan tâm tới các thành phần sử dụng dịch vụ, chỉ cần các giao ước sử dụng dịch vụ của chúng được thỏa mãn. Thành phần cung cấp dịch vụ cần thiết kế một cài đặt dịch vụ thỏa mãn các yêu cầu đó thông qua các quyết định về việc chúng chứa đựng, quản lý và cài đặt đặc tả dịch vụ như thế nào. Khung nhìn bên trong là khung nhìn của người sử dụng hoặc thành phần sử dụng – tức là những thành phần chỉ nhìn thấy dịch vụ thông qua thành phần cung cấp, và khung nhìn ngoài, ở đó thành phần cung cấp dịch vụ tạo ra các thành phần cung cấp dịch vụ thông qua các giao diện của chúng. Để thực hiện được như vậy, chúng yêu cầu một tập trong gồm các thành phần có mức độ đóng gói thấp hơn, hoặc ngang bằng tham gia vào các cộng tác cần thiết để đáp ứng các dịch vụ. Do vậy, trong các thành phần cung cấp dịch vụ, chúng ta sẽ có các thành phần ở mức độ miền tương ứng với các mô hình đối tượng miền trong hướng đối tượng truyền thống và được cài đặt thông qua các cơ chế chứa đựng thành phần chuẩn hóa như các máy chủ ứng dụng (Application server).
3. Thiết kế theo kiến trúc hướng dịch vụ.
Trong sự tiến hóa của các các kỹ thuật xây dựng phần mềm, công nghệ và các ngôn ngữ lập trình hướng đối tượng thích hợp để cài đặt các thành phần. Trong khi các thành phần lại là cách thích hợp nhất để cài đặt các dịch vụ, mặc dù cần hiểu rằng một ứng dụng dựa thành phần tốt không cần thiết phải là một ứng dụng hướng dịch vụ tốt. Khi vai trò của dịch vụ trong kiến trúc ứng dụng được hiểu rõ, chúng ta có thể tích hợp các thành phần mới và các thành phần hiện có. Hình dưới đây minh hoạ cách các tầng công nghệ có thể được áp dụng cho kiến trúc ứng dụng để đem lại các cài đặt ở mức độ đóng gói cao hơn khi tiến gần hơn tới người dùng ứng dụng, nó cũng cho thấy dịch vụ là cách thích hợp để thể hiện khung nhìn ngoài của một hệ thống với sự tái sử dụng bên trong có sử dụng thiết kế thành phần truyền thống.
Hình 1.14: Các tầng cài đặt trong thiết kế: đối tượng dịch vụ, thành phần
Các nguyên tắc trong thiết kế SOA
Việc tiếp cận xây dựng các hệ thống dựa trên mô hình hướng dịch vụ phải tuân theo bốn nguyên tắc sau :
Nguyên tắc 1 : ranh giới phải rõ ràng. Các dịch vụ tương tác qua việc truyền đi các thông điệp tường minh. Chúng ta không cần biết về không gian nằm sau ranh giới của dịch vụ. Vượt qua các ranh giới của dịch vụ có thể tốn nhiều công sức và chi phí. Các ranh giới rõ ràng cho phép cài đặt các tương tác độc lập – không cần biết về nền tảng hay các ngôn ngữ lập trình được lựa chọn để cài đặt các dịch vụ.
Nguyên tắc 2: Dịch vụ là tự trị. Các dịch vụ hoạt động như là các thực thể độc lập. Không có quyền làm chủ trong một môi trường hướng dịch vụ. Các dịch vụ được triển khai, thay đổi, quản lý một cách độc lâp.
Nguyên tắc 3 : Các dịch vụ chia sẻ lược đồ (schema) và giao kèo(contract), không chia sẻ lớp (class). Các dịch vụ tương tác với nhau chỉ dựa vào các biểu thức của cấu trúc dùng lược và các hành vi dùng giao kèo. Giao kèo của dịch vụ mô tả cấu trúc của thông điệp và các ràng buộc giữa các thông điệp. Tính hình thức của biểu thức cho phép chúng ta bảo toàn được tính toàn vẹn của dịch vụ. Các giao kèo và lược đồ phải được duy trì tính ổn định với thời gian. Vì vậy việc xây dựng chúng một cách linh hoạt là rất quan trọng.
Nguyên tắc 4 : Tính tương thích của dịch vụ dựa trên chính sách. Cả người cung cấp và người dùng dịch vụ sẽ phải có các chính sách để tương tác qua các ranh giới. Một ví dụ đơn giản về chính sách phía người cung cấp là một dịch có thể đỏi hỏi người gọi phải có một tài khoản hợp lệ với người cung cấp dịch vụ. Về phía người dùng dịch vụ, một tổ chức có thể đòi hỏi các lời gọi qua Internet phải được mã hóa.
Các quyết định thiết kế và kiến trúc trong SOA:
Có rất nhiều quyết định thiết kế và kiến trúc là nền tảng cho SOA để đạt được các mục tiêu và lợi ích mà kiến trúc này đã nêu ra. Các quyết định kiến trúc thường liên quan tới việc chọn lựa các công nghệ và sản phẩm cần thiết để đáp ứng chất lượng cho các thuộc tính dịch vụ được yêu cầu bởi một quy trình nghiệp vụ. Các quyết định thiết kế tập trung vào các lựa chọn dịch vụ sử dụng kỹ thuật được mô tả sau trong phân tích và thiết kế hướng đối tượng. Một số các quyết định chính là:
Xác định dịch vụ
Thiết kế và cài đặt thành phần chứa: các quyết định thiết kế và kiến trúc rất quan trọng để một dịch vụ cung cấp các chức năng cho việc mở rộng vào bảo trì.
Mức độ đóng gói: các lựa chọn thiết kế về dịch vụ phải phù hợp với mức độ tái sử dụng và mềm dẻo được yêu cầu trong ngữ cảnh cụ thể. Các dịch vụ có mức độ đóng gói cao hơn có thể trợ giúp việc đóng gói các thay đổi trong các dịch vụ kỹ thuật có mức độ đóng gói thấp hơn (các dịch vụ này thường có xu hướng thay đổi thường xuyên hơn so với các nghiệp vụ ở mức cao hơn). Các nhân tố của tính mềm dẻo sẽ là các tiêu chuẩn chính cho việc đóng gói hơn là việc chỉ đơn thuần đóng gói chức năng.
Tính gắn kết không chặt chẽ và cấu hình lại động là một quyết định thiết kế yêu cầu việc tách các giao diện khỏi cài đặt và cài đặt giao thức thông qua các chuẩn mở. Kết nối giữa các thành phần cung cấp và sử dụng dịch vụ cần phải bền vững và được cấu trúc rõ ràng, có khả năng cấu hình lại linh hoạt. Có khả năng cấu hình lại có nghĩa lấcc thành phần sử dụng dịch vụ và các thành phần cung cấp dịch vụ hiện có có thể được lắp ghép lại với chức năng không bị thay đổi để đạt được các giải pháp nghiệp vụ trong các môi trường kỹ thuật khác nhau và với các ràng buộc thao tác khác nhau của các đối tác kinh doanh mới.
Các tầng SOA: Các thành phần của một kiến trúc hướng dịch vụ.
Các thành phần chính của một kiến trúc hướng dịch vụ là:
Danh mục dịch vụ: mô tả các dịch vụ nghiệp vụ trong SOA, bao gồm một danh sách, phân loại và cấu trúc cây của các dịch vụ được xác định thông qua kx thuật phân tích và thiết kế hướng dịch vụ.
Các thành phần: Cung cấp các cài đặt chức năng của dịch vụ.
Thành phần sử dụng dịch vụ, thành phần cung cấp dịch vụ và thành phần môi giới dịch vụ (tùy chọn) với các kho đăng ký dịch vụ, ở đó, các định nghĩa và mô tả dịch vụ được xuất bản.
Các tầng SOA: vị trí của các thành phần và dịch vụ.
Hình dưới đây mô tả các tầng SOA. Với mỗi tầng, các quyết định thiết kế và kiến trúc được tiến hành.
Hình 1.15:Các tầng của SOA
Tầng 1: tầng dưới cùng, mô tả các hệ thống vận hành. Tầng này chứa các hệ thống hoặc ứng dụng hiện có, bao gồm các ứng dụng được đóng gói, các ứng dụng đang có, và các cài đặt hệ thống hướng đối tượng theo kiểu cũ cũng như các ứng dụng thu thập nghiệp vụ. Kiến trúc theo tầng của một kiến trúc hướng đối tượng có thể thúc đẩy các hệ thống hiện có, tích hợp chúng bằng cách sử dụng tích hợp hướng dịch vụ.
Tầng 2: tầng thành phần, sử dụgn các kỹ thuật và thiết kế dựa đối tượng chứa trong phát triển hướng thành phần truyền thống.
Tầng 3: cung cấp cơ chế để lấy các thành phần ở quy mô doanh nghiệp, các thành phần cho từng đơn vị nghiệp vụ cụ thể, và trong một số trường hợp là các thành phần của từng dự án và cung cấp các dịch vụ thông qua các giao diện của chúng. Trong tầng này, các giao diện được thể hiện ra ngoài thông qua các đặc tả dịch vụ, ở đó, các dịch vụ tồn tại một cách độc lập hoặc là tổng hợp của một số dịch vụ.
Tầng 4: là một sự tiến hóa của việc tổng hợp dịch vụ thành các luồng hoặc sắp đặt các nhiệm vụ được phân nhóm vào một luồng để hoạt động như một ứng dụng. Các ứng dụng này hỗ trợ các trường hợp sử dụng và các quy trình nghiệp vụ cụ thể. Ở đây, các công cụ tổng hợp luồng trực quan có thể được sử dụng để thiết kế luồng ứng dụng.
Tầng 5: Tầng trình diễn thường là nằm ngoài phạm vi của một kiến trúc hướng dịch vụ.
Tầng 6: cho phép sự tích hợp của các dịch vụ thông qua việc định tuyến tin cậy và thông minh, giao thức trung gian, và một số cơ chế chuyển đổi khác, thường được mô tả như là một tuyến dịch vụ doanh nghiệp (ESB – Enterprise Service Bus).
Tầng 7: đảm bảo chất lượng dịch vụ thông qua các cơ chế cảm biến và đáp ứng và các công cụ kiểm soát các ứng dụng SOA.
Việc sử dụng kiến trúc hướng dịch vụ không bị giới hạn cho các tổ chức lớn. Trong thực tế, kiến trúc này tạo ra cơ hội cho các tổ chức vừa và nhỏ. Một ví dụ về việc các doanh nghiệp nhỏ có thể sử dụng dịch vụ là việc nhận các hóa đơn: chúng ta có thể dùng dịch vụ Web để tạo ra một dịch vụ nhận hóa đơn. Các hóa đơn này sẽ được lưu trữ bởi dịch vụ cho đến khi hệ thống kế toán trên máy PC của người dùng kết nối đến nó để nhận hóa đơn về bằng cách sử dụng dịch vụ Web. Các hóa đơn sau đó sẽ được cập nhận một cách tự động trên PC… Bằng cách này, bất kỳ tổ chức nào, không phụ thuộc vào quy mô lớn hay nhỏ, đều có thể nhận được lợi ích từ việc sử dụng kiến trúc hướng dịch vụ.
Một tổ chức có thể dùng nhiều cách khác nhau để nhận được kiến trúc hướng dịch vụ, tuỳ thuộc vào mục tiêu và các ràng buộc công nghệ thông tin.
Hình 1.16: Các mức độ thực hiện kiến trúc hướng dịch vụ
Mức độ 1: Cài đặt các dịch vụ riêng lẻ.
Mức độ này tạo ra các dịch vụ từ các nhiệm vụ có trong các ứng dụng mới hoặc các ứng dụng hiện có. Kiến trúc hướng dịch vụ đem lại khả năng thiết kế các ứng dụng và hệ thống cung cấp các dịch vụ cho các ứng dụng khác thông qua các giao diện được xuất bản. Cách tạo ra các ứng dụng này có thể đưa đến một mô hình lập trình mạnh hơn, linh hoạt hơn, giảm chi phí cả trong phát triển và bảo trì.
Mức độ 2: Tích hợp hướng dịch vụ các chức năng nghiệp vụ
Mức độ tiếp theo là tích hợp hướng dịch vụ. Bước này bao gồm việc tích hợp các dịch vụ từ nhiều ứng dụng khác nhau cả bên trong và bên ngoài doanh nghiệp để phục vụ cho mục đích nghiệp vụ. Mức độ này cũng phải hỗ trợ nhiều kiểu tích hợp, bao gồm:
Tích hợp ứng dụng: gồm phát triển các giao diện mới để thể hiện các ứng dụng hiện có.
Tích hợp thông tin: gồm cả dữ liệu doanh nghiệp và dữ liệu liên phòng ban.
Tích hợp quy trình: gồm tích hợp qua sự tập hợp, sắp xếp các ứng dụng và dịch vụ với nhiều giao diện.
Tích hợp hệ thống: gồm sự kết nối các hệ thống không đồng nhất, các hệ thống hiện có và tích hợp ứng dụng.
Mức độ 3: Chuyển đổi doanh nghiệp công nghệ thông tin có quy mô lớn.
Mức cài đặt SOA rộng hơn này là một cài đặt được kiến trúc hoá cho phép tích hợp nhiều chức năng nghiệp vụ trong toàn doanh nghiệp.
Mức độ 4: Chuyển đổi nghiệp vụ theo yêu cầu.
Đây là mức độ cuối cùng trong phát triển kiến trúc hướng dịch vụ. Mức độ này là sự định hướng chiến lược hướng tới sự chuyển đổi rộng của các mô hình nghiệp vụ hiện có hoặc sự triển khai của các mô hình nghiệp vụ mới.
Hiện nay, chưa có một quy trình cụ thể để phát triển các ứng dụng theo kiến trúc hướng dịch vụ, tuy nhiên, dựa trên thực tế, 12 bước sau đã được đưa ra nhằm tham khảo khi quyết định chuyển sang định hướng dịch vụ.
12 bước trong quy trình phát triển phần mềm theo kiến trúc hướng dịch vụ:
Hiểu nghiệp vụ.
Xác định phạm vi của vấn đề.
Hiểu tất cả các ngữ nghĩa ứng dụng trong miền đó.
Hiểu tất cả các dịch vụ hiện có trong miền.
Hiểu tất cả các nguồn và đích của thông tin có trong miền.
Hiểu tất cả các quy trình trong miền.
Xác định và phân loại tất cả các giao diện bên ngoài miền cần thiết cho việc xây dựng ứng dụng (các dịch vụ và thông tin).
Định nghĩa các dịch vụ mới và các ràng buộc thông tin của các dịch vụ đó.
Định nghĩa các quy trình mới, cũng như các dịch vụ và ràng buộc thông tin cho các quy trình này.
Lựa chọn tập công nghệ.
Triển khai công nghệ SOA.
Kiểm thử và đánh giá.
Bước 1: Hiểu các mục đích nghiệp vụ, và xác định thành công.
Đây là nhiệm vụ thu thập yêu cầu cơ bản. Nó đòi hỏi phải tiếp xúc với tài liệu, nhân sự và hệ thống để xác định thông tin cho phép việc tích hợp ứng dụng được xác định đúng để có thể phân tích, mô hình hóa và cải tiến. Chỉ sau khi thực hiện bước này thì tập giải pháp thích hợp mới được đưa ra.
Cần lưu ý rằng có cả lợi ích hữu hình và vô hình từ việc cài đặt bất kỳ loại công nghẹ nào. Lợi ích hữu hình bao gồm việc tiết kiệm chi phí tức thì, như việc tự động hóa một hệ thống bán theo đơn đặt hàng thay cho việc bán hàng thủ công. Lợi ích vô hình thì khó nhận biết hơn, như sự thỏa mãn của khách hàng dẫn tới việc tăng doanh số bán hàng, hoặc cộng tác chặt chẽ hơn tăng cường chất lượng và cho phép các nhân công trao đổi thông tin tốt hơn.
Bước 2: Xác định miền vấn đề.
Phải xác định phạm vi của việc ứng dụng SOA trong một tổ chức. Hãy chia nhỏ tổ chức để áp dụng SOA thay vì áp dụng vào toàn bộ tổ chức. Cùng với thời gian, những thành công nhỏ sẽ dẫn tới các chiến lược thành công lớn hơn, phải thiết lập các đường ranh giới khi bắt đầu dự án để có thể tiến hành xây dựng ứng dụng một cách trọng tâm hơn.
Bước 3: Hiểu tất cả các ngữ nghĩa ứng dụng trong miền vấn đề.
Chúng ta không thể giải quyết các vấn để mà bản thân mình không hiểu rõ. Vì vậy, bước tiếp theo này là cực kỳ quan trọng để xác định tất cả các siêu dữ liệu ngữ nghĩa tồn tại trong miền ứng dụng nhằm giải quyết vấn đề một cách hoàn hảo. Sự hiểu biết về ngữ nghĩa ứng dụng thiết lập cách thức và khuôn dạng trong đó ứng dụng tham khảo các thuộc tính của quy trình nghiệp vụ. Ví dụ, cùng một số hiệu khách hàng nhưng trong một ứng dụng này có thể có một giá trị và ý nghĩa hoàn toàn khác trong một ứng dụng khác. Việc hiểu ngữ nghĩa của ứng dụng đảm bảo rằng sẽ không có bất kỳ sự xung đột thông tin nào khi nó được tích hợp với các ứng dụng khác ở mức độ thông tin hoặc dịch vụ. Xác định ngữ nghĩa của ứng dụng là một công việc khó khăn vì có thể nhiều hệ thống mà chúng ta đang phân tích đã cũ hoặc mang tính độc quyền. Bước đầu tiên trong việc xác định và định vị ngữ nghĩa là tạo ra một danh sách các hệ thống ứng viên. Danh sách này sẽ cho phép chúng ta có thể xác định những kho chứa dữ liệu nào tồn tại trong các hệ thống đó. Bất kỳ công nghệ nào có thể xây dựng lại các lược đồ dữ liệu vật lý và logic cũng sẽ có ích trong việc xác định dữ liệu trong các miền vấn đề. Tuy nhiên, trong khi lược đồ và mô hình dữ liệu có thể cho phép nhìn vào cấu trúc của cơ sở dữ liệu thì chúng lại không thể xác định những thông tin đó được sử dụng như thế nào trong ngữ cảnh của dịch vụ hoặc ứng dụng; đó là lý do chúng ta cần tới các bước tiếp theo. Bằng việc hiểu rõ các ngữ nghĩa của ứng dụng, chúng ta có thể hiểu trọn vẹn việc tích hợp ứng dụng, và đảm bảo rằng tất cả các hệ thống nguồn và đích trong và giữa các tổ chức được tích hợp một cách hoàn hảo.
Bước 4: Hiểu tất cả các dịch vụ hiện có trong miền.
Tìm hiểu các thông tin về dịch vụ, bao gồm:
Vị trí của dịch vụ.
Mục đích của dịch vụ.
Thông tin ràng buộc của dịch vụ.
Các phụ thuộc (nếu đó là một dịch vụ phức hợp).
Các vấn đề bảo mật.
Vị trí tốt nhất để bắt đầu tìm hiểu là thư mục dịch vụ. Giống như các thư mục khác, đây là một kho chứa các thông tin được thu thập về các dịch vụ hiện có, cùng với các tài liệu về mỗi dịch vụ, bao gồm mục đích của dịch vụ, các thông tin vào/ ra… Thư mục này được sử dụng cùng với những hiểu biết về ngữ nghĩa của ứng dụng để xác định các điểm tích hợp trong tất cả các hệ thống của miền vấn đề.
Bước 5: Hiểu tất cả các nguồn và đích thông tin hiện có trong miền vấn đề.
Bước này xác định các giao diện xử lý các thông tin đơn giản. Chúng có thể thực hiện một trong 2 vai trò: sử dụng thông tin (đích) hoặc cung cấp thông tin (nguồn).
Chúng ta cần phải hiểu rõ các khía cạnh sau:
Vị trí của chúng.
Cấu trúc của luồng thông tin vào/ ra.
Các ràng buộc tích hợp.
Các phụ thuộc (các nguồn và đích khác, cũng có thể là các dịch vụ).
Các vấn đề bảo mật.
Bước 6: Hiểu tất cả các quy trình.
Chúng ta cần xác định và liệt kê tất cả các quy trình nghiệp vụ tồn tài trong miền vấn đề, có thể là tự động hóa hoặc không phải tự động hóa. Việc này rất quan trọng vì chúng ta đã biết dịch các dịch vụ và nguồn/ đích thông nào hiện có, chúng ta cần phải xác định các cơ chế tương tác cao hơn, bao gồm tất cả các quy trình ở mức mức cao, mức trung bình và mức thấp. Trong nhiều trường hợp, những quy trình này vẫn chưa được tự động hóa hoặc chỉ có một phần được tự động hóa. Ví du, nếu một kiến trúc sư tích hợp ứng dụng cần hiểu tất cả các quy trình hiện có trong một ứng dụng kiểm kê, anh ta sẽ hoặc là đọc tài liệu hoặc là đọc mã nguồn để xác định quy trình nào đang được thực hiện. Sau đó, anh ta sẽ đưa quy trình nghiệp vụ vào phân loại và xác định mục đích của quy trình, ai là người sở hữu nó, nó chính xác là gì, và công nghệ để thực hiện nó (Java hoặc C++ …). Những quy trình này sau đó được gắn với các quy trình mới để đáp ứng được yêu cầu nghiệp vụ. Chúng ta cần phải xem xét khái niệm quy trình chia sẻ và quy trình riêng. Một số quy trình là quy trình riêng, và do đó, chúng không chia sẻ với các thực thể bên ngoài (trong một số trường hợp, chúng thậm chí còn không chia sẻ với các phần khác của tổ chức). Các quy trình chia sẻ và quy trình riêng có thể tồn tại trong cùng một không gian quy trình với công nghệ tích hợp quy trình quản lý bảo mật giữa các người dùng.
Một thông tin có thể được bảo trì trong phân loại, đó là thông tin bao gồm các biến được sử dụng trong các quy trình, các lược đồ đối tượng, các yêu cầu bảo mật, và/ hoặc các đặc điểm hiệu suất. Mỗi phân loại quy trình phải duy trì tập thuộc tính riêng của nó, được xây dựng tùy biến cho mỗi yêu cầu tích hợp ứng dụng cụ thể.
Bước 7: Xác định và phân loại tất cả các giao diện bên ngoài miền cần thiết cho việc xây dựng ứng dụng.
Chúng ta cần xác định tất cả các giaodiện bên ngoài mà các hệ thống trong miền vấn đề của chúng ta có tương tác với, hoặc cần tương tác với để đem lại giá trị tối đa. Điều quan trọng ở đây là phải chắc chắn rằng tất cả các giao diện cần thiết đều được xác định, bao gồm khả năng thể hiện các dịch vụ của miền vấn đề ra bên ngoài cho các đối tác, cũng như khả năng nhận biết và thúc đẩy dịch vụ của họ. Các hệ thống của đối tác và của chúng ta cần hoạt động cùng nhau để hỗ trợ các quy trình chia sẻ chung.
Bước 8: Xác định các dịch vụ mới, các dịch vụ phức hợp và thông tin ràng buộc đối với các dịch vụ đó.
Chúng ta cần phải xác định tất cả các dịch vụ tạo thành SOA; những dịch vụ này được chia thành 3 loại.
Bước 9: Xác định các quy trình mới, cũng như các dịch vụ và thông tin ràng buộc đối với các quy trình đó.
Đến bước này, chúng ta cần hiểu phần lớn những thành phần cần thiết để xác định các quy trình mới, cũng như liên kết chúng với các quy trình hiện có, tự động hóa các quy trình mà trước chưa được tự động hóa.
Bước 10: Lựa chọn tập công nghệ.
Có rất nhiều các công nghệ để lựa chọn, gồm các máy chủ ứng dụng, các đối tượng phân tán, và các máy chủ tích hợp. Sự lựa chọn công nghệ sẽ giống nhu một sự tổng hợp các sản phẩm và nhà cung cung cấp để đáp ứng được yêu cầu cho SOA. Rất hiếm có trường hợp một nhà cung cấp duy nhất có khả năng giải quyết được tất cả các vấn đề.
Lựa chọn công nghệ là một công việc khó khăn yêu cầu một lượng thời gian và công sức đáng kể. Việc tạo ra tiêu chuẩn cho công nghệ và sản phẩm, việc hiểu rõ các giải pháp được đưa ra, và sau đó nối các tiêu chuẩn với các sản phẩm đó là việc không dễ dàng. Để thành công, việc kết nối tiêu chuẩn với sản phẩm thường đòi hỏi một dự án thử nghiệm để chứng minh rằng nó sẽ hoạt động. Thời gian cần thiết để lựa chọn các công nghệ phù hợp có thể dài bằng thời gian phát triển SOA, nhưng nếu nản chí, có thể sẽ dẫn tới việc lựa chọn các công nghệ không phù hợp dẫn đến phá hỏng hệ thống.
Bước 11: Triển khai công nghệ SOA.
Đến bước này, chúng ta đã hiểu tất cả những gì cần phải hiểu, đã xác định được các dịch vụ và quy trình mới, đã chọn lựa được tập công nghệ thích hợp, và bây giờ sẽ là thời gian để xây dựng hệ thống.
Bước 12: Kiểm thử và đánh giá
Để đảm bảo cho việc kiểm thử, cần phải xây dựng kế hoạch kiểm thử.
Cần phải hiểu rằng 12 bước trên không phải là quy trình bắt buộc để xây dựng một dự án SOA thành công. Trong một số trường hợp, chúng ta cần thêm vào hoặc xóa bỏ đi một số bước để phù hợp với từng yêu cầu cụ thể.
Kiến trúc hướng dịch vụ được đưa ra nhằm loại bỏ sự trùng lặp và dư thừa qua việc tái sử dụng và tích hợp. Cách đơn giản nhất để bắt đầu với SOA là thử với một dịch vụ mà chúng ta biết rằng có nhiều cài đặt trong các ứng dụng khác nhau, sau đó bắt đầu xây dựng kết hoạch và chiến lược để loại bỏ các dịch vụ dư thừa. Kế hoạch này được gia tăng dần để loại bỏ các bản sao dư thừa. Quy trình cài đặt này sẽ giúp chúng ta đáp ứng được các yêu cầu cơ bản của tổ chức ẩn sau bước chuyển đổi thành công sang SOA. Khi chúng ta đã thực hiện được quy trình này, chúng ta sẽ có tất cả các công cụ và hiểu biết để mở rộng quy mô áp dụng SOA trong tổ chức của mình.
Trong phần dưới đây là một đề xuất việc chỉnh sửa các phương pháp phát triển hiện có cho phù hợp với mô hình hướng dịch vụ, tức là việc tích hợp dịch vụ vào một quy trình phát triển.
Mô tả quy trình phát triển:
Nền tảng của quy trình phát triển này là một quy trình phát triển theo các giai đoạn, như mô hình thác nước hoặc các phương pháp phát triển hướng đối tượng như RUP v.v… Chúng ta tích hợp các dịch vụ như một khái niệm trung tâm và chỉ đạo cho việc phát triển.
Hình 1.17: Một quy trình phát triển hướng dịch vụ
Giả định chúng ta có một pha khởi tạo, trong đó dự án được khởi tạo và cả nhiệm vụ của dự án cũng như các yêu cầu của dự án đã được chi tiết hóa. Đây là điểm khởi đầu cho quy trình của chúng ta. Khái niệm dịch vụ vẫn chưa xuất hiện và do đó pha khởi tạo không bị ảnh hưởng bởi hướng tiếp cận của chúng ta. Các kết quả của pha này được tài liệu hóa trong một tài liệu nhiệm vụ dự án và trong một danh sách đặc tả yêu cầu.
Sau pha khởi tạo, một chuỗi các hành động ở mức độ trừu tượng cao được mô hình hóa trong pha xác định dịch vụ. Trong pha này, một sự tách biệt hệ thống sẽ diễn ra. Các kết quả của pha này là các biểu đồ hoạt động mô hình hóa việc thực thi của các chức năng dịch vụ.
Sự chi tiết hóa đầu tiên của các dịch vụ được xác định trong pha xác định dịch vụ được thực hiện trong pha mô hình hóa trường hợp sử dụng. Luồng sự kiện của mọi chức năng dịch vụ được xác định cùng với các dữ liệu vào/ra và các ràng buộc dịch vụ. Kết quả của pha này dẫn tới một mô hình trường hợp sử dụng với một đặc tả kết cẩu kiến trúc của các trường hợp sử dụng, các biểu đồ diễn tiến cho một hoặc nhiều luồng sự kiện cho một chức năng dịch vụ.
Các biểu đồ diễn tiến từ pha mô hình hóa trường hợp sử dụng quyết định phiên bản đầu tiên của mô hình phân tích sẽ được tiến hành trong pha mô hình hóa dịch vụ. Hành vi của một dịch vụ được xác định một cách hình thức theo một cách trừu tượng bằng việc liên hệ các đầu vào và đầu ra của nó, ví dụ, bằng cách sử dụng các biểu đồ chuyển trạng thái. Các kịch bản thực thi được tạo thành như là sự tổng hợp các dịch vụ (kiến trúc logic).
Pha tiếp theo, pha thiết kế thành phần sẽ kết thúc các hoạt động đặc tả dịch vụ trong quy trình. Ở đây, các dịch vụ được ánh xạ thành các thành phần hệ thống và do đó, kiến trúc logic được chuyển thành kiến trúc hệ thống. Kết quả của pha này là một tập các thành phần với các nhiệm vụ được gán và một mô hình hành vi của các thành phần.
Sau đó, việc phát triển hệ thống lại tiếp tục như bình thường với pha xây dựng và chuyển giao. Các pha này có thể được thực hiện theo cách truyền thống, vì các việc liên quan đến dịch vụ đã được giải quyết trong việc ánh xạ được đề cập ở trên.
Xác định dịch vụ:
Trong pha này, các yêu cầu phải được chia nhỏ và chúng phải được phân chia cho các tác nhân, ở đây, các tác nhân có thể là các vai trò (role), các hệ thống hoặc là các dịch vụ.
Trong bước đầu tiên các yêu cầu của danh sách đặc tả các yêu cầu được chuyển đổi thành luồng các hoạt động có mức độ đóng gói thấp đủ để mỗi hoạt động có thể được thực hiện bởi một tác nhân.
Trong bước thức hai sau bước phân chia này, chúng ta phải sắp xếp các hành động này cho các tác nhân thực thi của chúng, nghĩa là tác nhân hoặc là nhận thông tin từ hành động này hoặc gửi thông tin tới hành động.
Mô hình hóa trường hợp sử dụng:
Ý tưởng cơ bản của hướng tiếp cận này là cả các đối tượng miền cũng như tương tác người dùng của hệ thống đều được mô hình hóa trong các pha phát triển sớm. Các trường hợp sử dụng không chỉ được xây dựng từ việc nắm giữ các yêu cầu hệ thống: chúng định hướng toàn bộ quy trình phát triển và chúng cung cấp đầu vào chính khi tìm kiếm và xác định các lớp, các hệ thống con, các giao diện và các trường hợp kiểm thử. Ngoài ra, các trường hợp sử dụng là đủ cho một quy trình phát triển lặp.
Trong khi các trường hợp sử dụng đều được tích hợp vào phát triển hướng đối tượng, chúng không bao quát các khía cạnh của mô hình hóa hướng dịch vụ. Trong trường hợp này, chúng ta phải giải quyết với những điểm sau đây:
Không có yêu cầu cho một mô hình miền chung, cái mà phải được thực hiện trong các hệ thống thông tin trong suốt quá trình mô hình hóa nghiệp vụ và phải được cải tiến trong suốt pha mô hình hóa trường hợp sử dụng. Các dịch vụ chỉ giải quyết với một tập con các đối tượng hệ thống, đó là các đối tượng chúng ta cần cho việc lưu trữ thông tin trong các dịch vụ và nhu các đối tượng đầu vào, đầu ra cho dịch vụ.
Cuối cùng, chúng ta thêm một phần các dịch vụ liên quan. Trong bước tiếp theo, chúng ta có thể cải tiến trường hợp sử dụng và kết nối các dịch vụ liên quan bằng các quan hệ như ảnh hưởng (affect), sử dụng (use) hoặc điều khiển (control) đưa đến mọt kiến trúc dịch vụ logic. Nó cung cấp cho chúng ta một khung nhìn có cấu trúc trên các chức năng hệ thống cũng như sự liên quan giữa chúng, và cuối cùng là một cơ hội để giả quyết các vấn đề tính năng tương tác từ phần đầu của quy trình phát triển.
Do vậy, chúng ta có một mô tả nguyên mẫu có cấu trúc. Với một mô hình trường hợp sử dụng dịch vụ hoàn thiện, chúng ta phải bao hàm mọi chức năng dịch vụ đã xác định trong pha xác định dịch vụ. Chú ý rằng đây là một phần của mô tả, vì biểu đồ luồng hoạt động chỉ chỉ ra một hoạt động điển hình của dịch vụ. Chúng ta sẽ nhận được một mô tả dịch vụ hoàn thiện bằng cách kết nối tất cả các mô tả trường hợp sử dụng từng phần này.
Ngoài mô tả nguyên mẫu, chúng ta cũng xây dựng các biểu đồ phân tích đầu tiên trong pha mô hình hóa trường hợp sử dụng dưới dạng các biểu đồ diễn tiến. Với mỗi chức năng dịch vụ cùng với mô tả nguyên mẫu của nó, chúng ta mô hình hóa quy trình cụ thể trong một biểu đồ diễn tiến, ở đó, chúng ta chỉ ra luồng thông điệp giữa các tác nhân khác nhau.
Dưới đây là các bước phải thực hiện cho các chức năng dịch vụ để mô hình hóa chúng như các trường hợp sử dụng. Chú ý rằng chúng ta không có bước mô hình hóa mô hình đối tượng nào vì chúng ta không có một mô hình miền trong mô hình hướng dịch vụ như đã nói ở trên.
Cụ thể hóa các mô tả trường hợp sử dụng có cấu trúc
Chỉ rõ các nguy cơ và các mục tiêu an toàn và thêm chúng vào các mô tả trường hợp sử dụng nguyên mẫu.
Xác định các mối quan hệ giữa các dịch vụ và thêm chúng vào các mô tả trường hợp sử dụng nguyên mẫu
Hình thức hóa các mô tả trường hợp sử dụng điển hình trong một hoặc nhiều biểu đồ diễn tiến.
Mô hình hóa dịch vụ:
Trong pha mô hình hóa dịch vụ, chúng ta sử dụng các biểu đồ diễn tiến và các mô tả trường hợp sử dụng nguyên mẫu được phát triển trong pha mô hình hóa trường hợp sử dụng như một nền tảng để phát triển một mô hình phân tích cụ thể hơn. Mô hình phân tích chúng ta triển khai là một mô hình được định nghĩa một cách hình thức cho các kiến trúc dịch vụ.
Mô hình phân tích của một hệ thống hướng dịch vụ bao gồm một số các tác nhân. Đối với sự phát triển của các hệ thống hướng dịch vụ, chúng ta tập trung vào các đặc tả của các tác nhân dịch vụ. Các vai trò của con người và các hệ thống ngoài tạo thành môi trường của chúng.
Thiết kế thành phần.
Kiến trúc dịch vụ logic cung cấp một khung nhìn chức năng trên hệ thống, tức là định nghĩa của các dịch vụ và các phụ thuộc dịch vụ tương ứng. Cho đến pha thiết kế thành phần, không có một ràng buộc kiến trúc nào được xem xét. Ở đây, các dịch vụ có thể được ánh xạ tới một hoặc thậm chí là một số các kiến trúc thành phần.
Tuy nhiên, việc thiết kế các thành phần với sự chú ý tới việc bao gồm các dịch vụ trong các thành phần không phải là trọng tâm ở đây.
Phát triển gia tăng.
Trong mô hình thác nước, hệ thống được phân tích, thiết kế, cài đặt và kiểm thử như một khối tổng thể. Các tương tác thường được nhận ra trong các giai đoạn phát triển sau và để giải quyết vấn đề này thì thường rất khó và tốn nhiều thời gian cũng như chi phí. Vì lý do này, các hệ thống hướng đối tượng thường được xây dựng theo cách gia tăng hơn là theo cách phát triển toàn bộ một lần. Một lý do khác cho việc áp dụng quy trình phát triển gia tăng là đội ngũ làm việc có thể làm việc một cách hiệu quả hơn.
Trong miền của vấn đề mô hình hóa hướng dịch vụ, chúng ta bắt đầu một tương tác với sự chi tiết hóa của một hoặc nhiều yêu cầu từ danh sách đặc tả các yêu cầu thành một luồng hoạt động cho mỗi yêu cầu. Sự chi tiết hóa này được thực hiện trong pha xác định dịch vụ.
Sau đó, trong pha mô hình hóa trường hợp sử dụng và pha mô hình hóa dịch vụ, các chức năng dịch vụ (đã được xác định và chỉ rõ trong kiến trúc dịch vụ logic) được mô hình hóa một cách chi tiết.
Các dịch vụ, bao gồm các tập chức năng dịch vụ, bây giờ có thể được ánh xạ tới các kiến trúc hệ thống trong thiết kế thành phần. Các pha xây dựng và chuyển giao có thể được tiến hành, vì tất cả các chức năng dịch vụ tương ứng với các yêu cầu chi tiết đã được mô hình hóa.
Trong bước gia tăng kế tiếp, các yêu cầu mới được chuyển đổi thành các luồng hoạt động. Có thể là hoặc các chức năng dịch vụ mới sẽ được thêm vào một dịch vụ được xây dựng và mô hình hóa từ trước (nghĩa là dịch vụ sẽ được gia tăng thêm một số chức năng), hoặc các dịch vụ mới cần được chi tiết hóa. Các chức năng dịch vụ mới phải được mô hình hóa trong pha mô hình hóa trường hợp sử dụng và trong pha mô hình hóa dịch vụ, và sau đó được thêm vào trong pha thiết kế thành phần và pha xây dựng cũng như chụyển giao.
Chúng ta sẽ lặp lại với các yêu cầu từ bản đặc tả yêu cầu cho tới khi tất cả đều được thỏa mãn.
4. Các công nghệ hướng dịch vụ
4.1. Sun JINI
Công nghệ Jini cho phép xây dựng một hệ thống là một mạng của các dịch vụ. Các dịch vụ có thể được thêm vào và xoá bỏ khỏi mạng, và người dùng mới có thể tìm kiếm các dịch vụ hiện có. Tất cả đều xảy ra động, không có sự quản lý.
Dịch vụ được dựa trên các giao diện đã biết được viết trong ngôn ngữ lập trình Java. Nó không quan tâm tới việc dịch vụ được cài đặt bằng phần cứng hay phần mềm. Đối tượng dịch vụ mà người dùng tải về được cung cấp bởi các thành phần cung cấp dịch vụ. Client chỉ cần biết rằng họ đang làm việc với một cài đặt của một giao diện được viết bằng ngôn ngữ lập trình Java. Việc thiết kế dựa trên các giao diện dịch vụ cho phép xây dựng các hệ thống với tính sẵn dùng cao. Một thành phần có thể sử dụng bất kỳ dịch vụ nào phù hợp với giao diện, thay vì được cấu hình tĩnh để giao tiếp với một thành phần nhất định nào đó.
Công nghệ Jini được xây dựng phía trên công nghệ Java (xem hình dưới). Phương thức triệu gọi từ xa của Java (RMI) cung cấp cơ chế thu rác từ xa của các đối tượng từ xa và khả năng truyền trạng thái của đối tượng cũng như mã đối tượng qua mạng.
Hình 1.18: Mô hình kiến trúc Jini
Kiến trúc Jini bao gồm:
Dịch vụ tra cứu (Lookup Service):
Dịch vụ tra cứu lưu giữ các dịch vụ Jini và cung cấp các ủy nhiệm để truyền thông với dịch vụ, bản thân nó cũng là một dịch vụ Jini.
Dịch vụ Jini (Jini service)
Dịch vụ Jini được đăng ký với dịch vụ tra cứu và có khả năng được triệu gọi thông qua giao diện công khai của mình (giao diện này được định nghĩa qua một giao diện Java từ xa). Hệ thống nền tảng truyền thông của Jini là RMI.
Thành phần sử dụng dịch vụ Jini (Jini client)
Thành phần sử dụng dịch vụ Jini là một phần mềm yêu cầu đối tượng ủy nhiệm từ dịch vụ tra cứu để gọi dịch vụ Jini.
Jini có một số các dịch vụ được xây dựng sẵn, bao gồm:
Dịch vụ tìm kiếm tra cứu (Lookup Discovery Service):
Dịch vụ tìm kiếm tra cứu thông báo cho các thành phần sử dụng dịch vụ về các thay đổi trong mạng Jini. Các dịch vụ có thể kết hợp hoặc tách ra khỏi mạng bất kỳ thời gian nào.
Dịch vụ tái tạo ràng buộc (Lease Renewal Service):
Khái niệm tái tạo ràng buộc hỗ trợ mạng dịch vụ Jini tính năng tự hàn gắn và khắc phục lỗi. Dịch vụ phải tái tạo ràng buộc của chúng với dịch vụ tra cứu, trong trường hợp một ràng buộc không được tái tạo, dịch vụ sẽ là một ứng viên bị loại bỏ khỏi mạng lưới dịch vụ. Trách nhiệm của những người quản trị trong lĩnh vực này được giảm tới mức tối thiểu nhờ tính năng tự hàn gắn của hệ thống.
Dịch vụ giao dịch (Transaction Service):
Dịch vụ giao dịch cho phép sử dụng các giao dịch trong một hệ thống phân tán. Thông thường, các tổ chức sử dụng cơ sở dữ liệu để tạo ra các hệ thống giao dịch. Dịch vụ giao dịch của Jini đưa tính năng giao dịch của cơ sở dữ liệu lên mạng. Các dịch vụ có thể tham gia vào các giao dịch để đảm bảo các thuộc tính ACID (Atomicity – Consistency – Isolation – Durability) gắn liền với giao dịch.
Dịch vụ hộp thư sự kiện (Event Mailbox Service):
Các thay đổi trong mạng dịch vụ Jini được truyền đi trong hệ thống bằng cách sử dụng các sự kiện phân tán. Dịch vụ hộp thư sự kiện hỗ trợ tính năng thông báo các sự kiện cho các dịch vụ ngay cả khi dịch vụ không được kích hoạt tại thời điểm hiện tại.
4.2. Openwings
Openwings là một khung kiến trúc hướng dịch vụ cho việc xây dựng các hệ thống hoặc các siêu hệ thống (hệ thống của hệ thống). Mặc dù không bị ràng buộc cụ thể với Jini, nó xây dựng dựa trên các khái niệm của Java và Jini để cung cấp một giải pháp hoàn thiện hơn.
Openwing có hàng loạt các dịch vụ cốt lõi hỗ trợ tính toán hướng đối tượng.
Component services (Các dịch vụ thành phần) : cung cấp các kỹ thuật cho việc đưa ra công bố một dịch vụ trong hệ thống đảm bảo cho quá trình tìm kiếm phát hiện (discover), thông qua sử dụng component service, việc tạo và đưa ra công bố một dịch vụ sẽ đảm bảo được tính nhất quán theo một quy cách chung. Cụ thể hơn, component cung cấp các thư viện cho phép :
Tạo ra khả năng cung cấp, định vị và sử dụng các dịch vụ nói chung trong hệ thống mà không phụ thuộc vào bất cứ một kỹ thuật định vị /tìm kiếm (location/lookup) nào. Ví dụ các kỹ định vị/tìm kiếm như Jini, UDDI với mô hình Web-services , giao thức phát hiện (discovery) Bluetooth.
Quá trình giao tiếp giữa các thành phần hay dịch vụ được định nghĩa với các API chuẩn cho các dịch vụ thông qua việc kế thừa từ những giao diện chuẩn mà openwings đề xuất.
Cung cấp các component API cho giao thức tương tác giữa các dịch vụ qua mạng mà không phụ thuộc vào tính đồng bộ hay không đồng bộ của các dịch vụ.
Cung cấp khả năng điều khiển các dịch vụ thành phần ngay trong thời điểm dịch vụ đó đang được gọi thực thi.
Hỗ trợ việc đưa ra các báo cáo về trạng thái của các thành phần tham gia vào hệ thống.
Cho phép thiết lập môi trường thực thi động dựa theo yêu cầu tại thời điểm sử dụng.
Qua hình vẽ minh họa sau, ta có thể thấy được vị trí trung tâm của các dịch vụ thành phần trong mô hình khung mà openwings đề xuất :
Hình 1.19: Mô hình khung của Openwings
Install services (Các dịch vụ cài đặt): là thành phần dịch vụ của framewok cho phép thực hiện cài đặt các thành phần mới vào hệ thống. Để cài đặt được thì các thành phần này cần phải qua các quy trình chuẩn mà openwings đề xuất.
Cung cấp khả năng cài đặt thêm những dịch vụ mới với hạn chế tối đa các tương tác bằng tay cho người sử dụng. Đảm bảo không gây ra ảnh hưởng tới các file hay dịch vụ đã được cài đặt trước đó.
Cung cấp khả năng tự động dò tìm và cho phép gọi thực hiện với các thành phần được lưu trữ trong các thiết bị lưu trữ lưu động.
Có cơ chế thẩm định quyền và độ ưu tiên cho việc cài đặt và gọi thực hiện.
Có cơ chế hủy cài đặt an toàn cho hệ thống khi cần thiết.
Context serives (các dịch vụ ngữ cảnh): là thành phần cho hỗ trợ việc kết hợp chức năng các dịch vụ trong môi trường hệ thống để có được một dịch vụ lớn hơn. Đồng thời còn hỗ trợ việc kết hợp các dịch vụ được chia sẻ trong một mạng WAN.
Menagement services (các dịch vụ quản lý): cung cấp các phương thức cơ bản hỗ trợ việc quản lý các thành phần và dịch vụ trong hệ thống. Với các hỗ trợ từ dạng quản lý thông qua can thiệp bằng tay hay thông qua việc đặt các cơ chế quản lý tự động. Các hỗ trợ này được đóng gói trong Mbean.
Security services (các dịch vụ bảo mật): cung cấp các phương thức cho việc mã hóa, truyền tải dữ liệu trọng hệ thống, các hỗ trợ cơ bản cho việc cấp quyền, thẩm định quyền, đảm bảo an toàn khi truyền tin, tính toàn vẹn, khả năng phát hiện tấn công và đáp trả các tấn công vào hệ thống.
Connector services (các dịch vụ kết nối): cung cấp các kỹ thuật cho việc giao tiếp gữa các thành phần hay dịch vụ trong hệ thống. Hỗ trợ trực tiếp cho các kỹ thuật giao tiếp thông qua một đối tượng chuyển tiếp trung gian như CORBA, RMI, JMS … Một kết nối theo định hướng của Openwings sẽ cài đặt trực tiếp giao thức giao tiếp từ một giao diện dịch vụ được định trước theo các kỹ thuật chuyển tiếp trung gian chuẩn với cơ chế động ngay tại thời điểm diễn ra giao tiếp tùy theo yêu cầu sử dụng. Với đầy đủ các hỗ trợ cho việc giao tiếp theo phiên hay theo dạng giao tiếp không duy trì kết nối. Hỗ trợ đầy đủ các hàm cơ bản cho phép làm việc với RMI, CORBA, JMS, SOAP …
Container services (các dịch vụ chứa đựng): cung cấp môi trường tương ứng cho việc thực hiện các dịch vụ trong mô hình openwings. Đây là một thành phần quan trọng tạo nên khả năng vận hành động không phụ thuộc vào nền tảng hay môi trường vận hành phân tán của hệ thống.
Cung cấp khả năng gọi chạy các dịch vụ trên máy hiện tại qua một nền hệ thống từ xa.
Hỗ trợ việc quản lý vòng đời của các tiến trình dịc vụ, các phương thức cho phép tự động khởi động lại, tạm dừng hay hủy dịch vụ.
Cung cấp khả năng gán hay thiết lập cho một số tiến trình xây dựng bằng Java có thể hoạt động độc lập trên các máy ảo Java mà không ảnh hưởng tới các thành phần khác.
Hỗ trợ việc gọi khởi động các dịch vụ không được xây dựng trên nền Java.
Cung cấp các phương thức cho phép theo dõi tài nguyên hệ thống như theo dõi các thông tin về dung lượng bộ nhớ trong, khả năng hoạt động của bộ vi xử lý hay khả năng đáp ứng lưu lượng của đường truyền tải dữ liệu.
4.3. Dịch vụ Web
Mặc dù các khái niệm nền tảng cho kiến trúc hướng dịch vụ đã được thiết lập từ trước khi dịch vụ Web xuất hiện nhưng Web service vẫn đóng một vai trò quan trọng trong một kiến trúc hướng dịch vụ. Đó là bởi vì dịch vụ Web được xây dựng trên một tập các giao thức được biết tới nhiều và độc lập về nền tảng. Các giao thức này bao gồm HTTP, XML, UDDI, WSDL và SOAP. Chính sự kết hợp của các giao thức này đã làm dịch vụ Web đáp ứng được các yêu cầu chính của kiến trúc hướng dịch vụ: SOA yêu cầu dịch vụ phải được phát hiện và triệu gọi động, yêu cầu này được thỏa mãn bằng UDDI, WSDL và SOAP; SOA yêu cầu dịch vụ có một giao ước giao diện độc lập nền tảng, yêu cầu này được thỏa mãn bởi XML; SOA nhấn mạnh tới tính liên thông, yêu cầu này được thoả mãn bởi HTTP. Đây là lý do tại sao các dịch vụ Web lại có vai trò trung tâm trong kiến trúc hướng dịch vụ. Chi tiết hơn về dịch vụ Web sẽ được đề cập tới trong chương sau.
4.4. Enterprise Service Bus (ESB)
Các công nghệ dựa trên nền Web service đang ngày càng được ứng dụng rộng rãi trong phát triển và tích hợp ứng dụng trong các tổ chức. Một trong những vấn đề nổi lên hiện nay là việc tìm kiếm các phương pháp hiệu quả hơn trong việc thiết kế, phát triển và triển khia Web service dựa trên các hệ thống kinh doanh; quan trọng hơn nữa là việc chuyển kiểu truyền thông Web service điểm tới điểm tới các ứng dụng lớn hơn của các công nghệ này thành các quy trình kinh doanh ở mức xí nghiệp. Trong bối cảnh này, mô hình ESB (Enterprise Service Bus) đang xuất hiện như một bước tiến mới trong sự phát triển của Web service và kiến trúc hướng đối tượng.
Hình 1.20: Mô hình ESB
Web service cơ bản:
Web service cơ bản (SOAP/HTTP điểm tới điểm) cung cấp một nền tảng vững chắc cho việc cài đặt một kiến trúc hướng dịch vụ, nhưng có những vấn đề ảnh hưởng tới tính mềm dẻo và khả năng bảo trì của chúng trong các kiến trúc ở quy mô xí nghiệp.
Thứ nhất, bản chất điểm tới điểm của Web service cơ bản có nghĩa là người dùng dịch vụ thường cần phải được sửa đổi bất kỳ khi nào giao diện người cung cấp dịch vụ thay đổi. Điều này không thành vấn đề trên quy mô nhỏ, nhưng trong các xí nghiệp lớn chúng ta sẽ phải thay đổi nhiều các ứng dụng client. Nó cũng có thể trở nên khó khăn hơn để tạo ra các thay đổi đối với các client đã có.
Thứ hai, chúng ta có thể kết thúc bằng một kiến trúc dễ đổ vỡ và không linh hoạt khi một số lượng lớn người dùng dịch vụ và người cung cấp dịch vụ liên lạc với nhau sử dụng các kết nối kiểu điểm tới điểm hỗn loạn.
Cuối cùng, Web service cơ bản đòi hỏi mỗi người dùng phải có một bộ điều hợp giao thức thích hợp với mỗi nhà cung cấp dịch vụ. Việc phải triển khai nhiều bộ điều hợp giao thức trên nhiều ứng dụng client làm tăng giá thành và chi phí bảo trì.
Cách tiếp cận ESB sẽ giải quyết được những vấn đề này.
Vậy ESB là gì?
Khái niệm ESB không phải là một sản phẩm, nhưng là một thực tiễn kiến trúc tốt nhất cho việc cài đặt một kiến trúc hướng dịch vụ. Như chỉ ra trong hình dưới, nó thiết lập một đường bus thông điệp lớp-xí nghiệp kết hợp hạ tầng thông điệp với sự chuyển đổi thông điệp và định tuyến dựa vào nội dung trong một tầng tích hợp logic giữa những người dùng và người cung cấp dịch vụ.
Mục đích chính của ESB là cung cấp một sự trừu tượng hoá về các nguồn tài nguyên của doanh nghiệp, cho phép các nghiệp vụ của doanh nghiệp có thể được phát triển và quản lý độc lập với hạ tầng, mạng và sự có mặt của các dịch vụ doanh nghệp khác. Các nguồn tài nguyên trong ESB được mô hình hoá như những dịch vụ có một hay nhiều thao tác.
Cài đặt một ESB đòi hỏi một tập hợp được tích hợp của các dịch vụ phần giữa hỗ trợ các kiểu kiến trúc sau:
Các kiến trúc hướng dịch vụ: ở đây, các ứng dụng phân tán bao gồm các dịch vụ có thể sử dụng lại được với các giao diện rõ ràng, có thể được xuất bản và tương thích với các chuẩn.
Các kiến trúc hướng thông điệp: ở đây, các ứng dụng gửi thông điệp thông qua ESB tới các ứng dụng nhận thông điệp.
Các kiến trúc hướng sự kiện: ở đây, các ứng dụng tạo mới và sử dụng các thông điệp độc lập lẫn nhau.
Các dịch vụ phần giữa (middleware) được cung cấp bởi một ESB cần chứa:
Phần giữa truyền thông hỗ trợ nhiều mô hình truyền thông (như đồng bộ, không đồng bộ, yêu cầu/ trả lời, một chiều …), chất lượng dịch vụ (bảo mật, hiệu năng…), các API, nền tảng và các giao thức độc lập.
Một cơ chế cho việc chèn xử lý thông minh của các lần yêu cầu và đáp ứng dịch vụ trong mạng.
Các công cụ dựa theo chuẩn để cho phép sự tích hợp nhanh chóng của các dịch vụ.
Hệ thống quản lý cho các ứng dụng liên kết lỏng và các tương tác của chúng.
5. Kết luận chương:
Kiến trúc hướng dịch vụ xác định một kiến trúc hướng nghiệp vụ trừu tượng nhằm mục đích xây dựng các hệ thống phần mềm bằng cách liên kết và kết tập các dịch vụ cục bộ và từ xa một cách mềm dẻo. Trong khi các mô hình kiến trúc trước đó kiểm soát tính phức tạp bằng cách gom nhóm các chức năng chung, SOA lại cố gắng thực hiện việc xác định các yêu cầu kiến trúc cụ thể đảm bảo rằng các công nghệ hỗ trợ đảm nhiệm trách nhiệm công nghệ chính. Bằng cách này, SOA đạt được một kiểu kiến trúc trừu tượng mà tập trung chính vào việc lắp ráp các hoạt động nghiệp vụ theo yêu cầu. Công nghệ dịch vụ Web hiện tại đang là công nghệ hỗ trợ nổi bật nhất cho SOA. Nó cung cấp các giải pháp kỹ thuật cho phép thực hiện hóa các hệ thông phần mềm theo kiến trúc hướng dịch vụ. Với sự chú trọng tập trung vào việc thiết kế các quy trình nghiệp vụ, SOA yêu cầu việc phát triển phần mềm tương tác chặt chẽ với môi trường nghiệp vụ. Một sự tham gia tích cực của các nhà quản lý và phân tích nghiệp vụ có thể cải tiến một cách đáng kể kết quả của việc thiết kế hệ thống.
“Mọi việc nên được thực hiện theo cách đơn giản đến mức có thể” (Albert Einstein) - đây là vấn đề đặt ra hiện nay trong lĩnh vực phát triển phần mềm, và cũng là triết lý của SOA. Với SOA, công việc phát triển phần mềm trở nên dễ dàng và nhanh chóng hơn.
Trong chương sau, NVLV sẽ trình bày về công nghệ dịch vụ Web, một công nghệ hỗ trợ SOA một cách tự nhiên và dễ dàng.
CHƯƠNG II. CÔNG NGHỆ DỊCH VỤ WEB
Chương này sẽ trình bày những lý thuyết cơ bản về dịch vụ Web:
Kiến trúc dịch vụ Web.
Các tính chất giúp dịch vụ Web là thể hiện cài đặt của SOA.
Các chuẩn cho dịch vụ Web.
Vòng đời của dịch vụ Web.
Cách xây dựng các dịch vụ Web bằng Java và .NET, tính liên thông giữa chúng.
Dịch vụ Web là nền tảng cơ bản để chuyển tính toán phân tán lên Internet. Các chuẩn mở và sự nhấn mạnh vào truyền thông và hợp tác giữa người dùng và ứng dụng đã tạo làm cho dịch vụ Web trở thành nền tảng để tích hợp ứng dụng: các ứng dụng được xây dựng bằng cách sử dụng nhiều dịch vụ Web từ nhiều nguồn khác nhau làm việc cùng nhau không quan tâm tới việc chúng được đặt ở đâu và được cài đặt như thế nào.
Có rất nhiều các định nghĩa về dịch vụ Web do các tổ chức công nghệ thông tin đưa ra, nhưng tất cả những định nghĩa này đều có những điểm chung sau:
Dịch vụ Web thể hiện các chức năng tới người dùng thông qua một chuẩn Web, thường là giao thức truy cập đối tượng đơn giản SOAP (Simple Object Access Protocol).
Dịch vụ Web đưa ra một cách thức cho việc mô tả giao diện của các dịch vụ một cách chi tiết đủ để người dùng xây dựng được các ứng dụng khách giao tiếp với chúng. Mô tả này được cung cấp trong một tài liệu XML được gọi là tài liệu WSDL (Web Service Description Languague – ngôn ngữ đặc tả dịch vụ).
Các dịch vụ được đăng ký để người dùng tiềm năng có thể tìm thấy chúng một cách dễ dàng. Điều này được thực hiện nhờ chuẩn đặc tả mô tả và tích hợp tìm kiếm chung UDDI (Universal Discovery Description and Integration)
Khái niệm kiến trúc hướng dịch vụ đã gây được sự chú ý mới với sự xuất hiện của công nghệ dịch vụ Web (Web service). Tuy nhiên, có một vấn đề quan trọng cần xem xét là SOA chỉ đơn thuần là một mô hình thiết kế - tức là một cách suy nghĩ và xây dựng các thành phần phần mềm – do đó, nó không phụ thuộc vào bất kỳ một giải pháp công nghệ cụ thể nào. Tuy vậy, công nghệ dịch vụ Web hỗ trợ nhiều các đặc điểm cần có của SOA. Các công nghệ khác, như công nghệ mạng Jini của Sun hay CORBA cũng cung cấp một giải pháp mang tính công nghệ cho SOA. Nhưng đến nay, các công nghệ này đã thất bại trong việc nhận được một sự chấp nhận rộng rãi trong công nghiệp phần mềm. Trái lại, công nghệ dịch vụ Web đã được phổ biến rộng rãi đặc biệt là sau quá trình chuẩn hóa của nhiều giao thức hỗ trợ. Vì vậy, quyết định sử dụng dịch vụ mạng làm giải pháp công nghệ cho SOA là hoàn toàn hợp lý.
Công nghệ dịch vụ Web khá thích hợp để cài đặt một kiến trúc hướng dịch vụ. Về bản chất, các dịch vụ Web có khả năng tự mô tả và là các ứng dụng có tính mô đun có thể thể hiện logic nghiệp vụ như các dịch vụ được xuất bản, tìm kiếm và thực thi qua Internet. Dựa trên chuẩn XML, dịch vụ Web có thể được phát triển như các thành phần ứng dụng gắn kết không chặt chẽ với nhau, không quan tâm tới bất kỳ ngôn ngữ lập trình, giao thức hay nền tảng nào. Điều này làm các ứng dụng nghiệp vụ được xây dựng thành dịch vụ được có thể được truy cập bởi bất kỳ ai, vào bất kỳ thời điểm nào, tại bất kỳ vị trí nào và sử dụng bất kỳ nền tảng nào.
1. Kiến trúc dịch vụ Web
Hình 2.1: Mô hình dịch vụ Web
Có thể thấy công nghệ dịch vụ Web có kiến trúc giống với kiến trúc hướng dịch vụ, nó hiện thực hóa cơ chế xuất bản / tìm kiếm / liên kết dịch vụ trong SOA bằng các chuẩn được chấp nhận rộng rãi như sau:
Cơ chế xuất bản: tạo ra một tài liệu WSDL, đăng ký tài liệu này lên một kho đăng ký dịch vụ bằng chuẩn đặc tả UDDI.
Cơ chế tìm kiếm: dùng chuẩn đặc tả UDDI để tìm kiếm tại nơi đăng ký dịch vụ, nhận được địa chỉ URL và tải về tài liệu WSDL.
Cơ chế liên kết dịch vụ: dựa trên tài liệu WSDL để tạo ra thành phần sử dụng dịch vụ, thực hiện việc gửi yêu cầu (thông điệp SOAP) và nhận đáp ứng (thông điệp SOAP).
2. Các chuẩn cho dịch vụ Web
2.1. Ngôn ngữ mô tả dịch vụ Web WSDL.
WSDL là viết tắt của Web Service Description Language – ngôn ngữ mô tả dịch vụ Web. Tài liệu WSDL được viết bằng ngôn ngữ XML, mô tả bốn loại dữ liệu quan trọng sau:
Thông tin về giao diện: mô tả tất cả các hàm sẵn dùng một cách công khai.
Thông tin về kiểu dữ liệu: dùng cho các thông điệp yêu cầu và thông điệp đáp ứng.
Thông tin về liên kết: mô tả giao thức vận chuyển được sử dụng.
Thông tin về địa chỉ: dùng để định vị các dịch vụ cụ thể.
Tài liệu WSDL
Tài liệu WSDL gồm các phần tử chính sau:
Phần tử
Ý nghĩa
Các thao tác được thực hiện bởi dịch vụ Web
Các thông được được sử dụng bởi dịch vụ Web
Các kiểu dữ liệu được sử dụng bởi dịch vụ Web
Các giao thức truyền thông được sử dụng bởi dịch vụ Web
Cấu trúc của tài liệu WSDL như sau:
định nghĩa các kiểu dữ liệu........
định nghĩa một thông điệp....
định nghĩa một cổng.......
định nghĩa một liên kết....
Cổng WSDL:
Phần tử là phần tử WSDL quan trọng nhất. Nó xác định một dịch vụ và các thao tác mà dịch vụ có thể được thực hiện cũng như các thông điệp liên quan. Phần tử này có thể so sánh như một thư viện hàm trong ngôn ngữ lập trình truyền thống.
Thông điệp WSDL:
Phần tử xác định các dữ liệu thành phần của một thao tác. Mỗi thông điệp có thể chứa một hoặc nhiều phần, mỗi phần có thể được xem là một tham số của lời gọi hàm trong ngôn ngữ lập trình truyền thống.
Kiểu WSDL:
Phần tử xác định kiểu dữ liệu được sử dụng bởi dịch vụ Web. Để tối đa hóa tính độc lập nền tảng, WSDL sử dụng cú pháp lược đồ XML để định nghĩa các kiểu dữ liệu.
Liên kết WSDL:
Phần tử xác định khuôn dạng thông điệp và giao thức cụ thể cho mỗi cổng.
Một ví dụ WSDL:
Đây là một phần trích từ một tài liệu WSDL:
Trong ví dụ này, phần tử portType xác định tên của cổng là “glossaryTerms”, và tên của thao tác là “getTerm”.
Thao tác “getTerm” có một thông điệp đầu vào là “getTermRequest” và một thông điệp đầu ra là “getTermResponse”.
Các phần tử message xác định tên và kiểu dữ liệu của từng thành phần trong mỗi thông điệp.
So với mô hình lập trình truyền thống, cổng “glossaryTerms” có thể được xem là một thư viện hàm, “getTerm” là một hàm có “getTermRequest” là tham số vào và “getTermResponse” là tham số trả về.
Cổng WSDL
Một cổng WSDL mô tả các giao diện được thể hiện bởi một dịch vụ Web.
Cổng WSDL:
Phần tử là phần tử WSDL quan trọng nhất. Nó xác định một dịch vụ web, các thao tác mà dịch vụ có thể thực hiện được cũng như các thông điệp liên quan. Cổng xác định điểm nối tới dịch vụ Web và được so sánh với một thư viện hàm trong ngôn ngữ lập trình truyền thống còn mỗi thao tác được xem như một hàm.
Các kiểu thao tác:
Ngoài kiểu thao tác phổ biến nhất là yêu cầu – đáp ứng, WSDL còn định nghĩa bốn kiểu sau:
Kiểu
Ý nghĩa
Một chiều
Thao tác nhận thông điệp nhưng sẽ không trả về thông điệp trả lời
Yêu cầu – đáp ứng
Thao tác nhận yêu cầu và trả về thông điệp trả lời
Yêu cầu đáp ứng
Thao tác gửi một yêu cầu và đợi một thông điệp trả lời
Thông báo
Thao tác gửi một thông điệp nhưng không đợi thông điệp trả lời
Liên kết WSDL
Liên kết WSDL xác định khuôn dạng thông điệp và chi tiết giao thức cho dịch vụ Web.
Ví dụ liên kết tới SOAP:
<soap:binding style="document"
transport="" />
<soap:operation
soapAction=""/>
Phần tử binding có hai thuộc tính: name và type. Thuộc tính name xác định tên của liên kết, còn thuộc tính type xác định cổng để liên kết, ở ví dụ trên là “glossaryTerms”.
Phần tử soap:binding có hai thuộc tính: style và transport. Thuộc tính style có giá trị là “rpc” hoặc “document”, ở ví dụ trên là “document”. Thuộc tính transport xác định giao thức SOAP được dùng, ở ví dụ trên là HTTP.
Phần tử operation xác định mỗi thao tác mà cổng thực hiện. Với mỗi thao tác, hành động SOAP tương ứng được xác định. Chúng ta phải xác định phương pháp mã hóa đầu vào và đầu ra, ở ví dụ trên sử dụng kiểu “literal”.
Bất cứ khi nào một dịch vụ Web được sử dụng, một bản sao của file WSDL trên Web server sẽ được copy xuống máy khách. File WSDL này được xem như là ủy nhiệm dịch vụ Web. Sau đó, các tham số được chuyển tới dịch vụ Web dưới dạng một thông điệp yêu cầu (SOAP, HTTP GET, HTTP POST), một hành động kiểm tra được thực hiện để kiểm tra tính hợp lệ của các tham số bằng cách dựa trên ủy nhiệm dịch vụ Web. Do vậy, trong trường hợp có lỗi xảy ra ở các tham số truyền vào dịch vụ Web, các lỗi này sẽ được thông báo tới máy khách tuân theo các đặc tả trong ủy nhiệm dịch vụ Web.
Nói tóm lại, WSDL là ngôn ngữ dùng để mô tả dịch vụ dựa trên XML, nó là tập con của 2 tài liệu khác nhau, NASSL (Network Accessible Service Specification Language – ngôn ngữ đặc tả dịch vụ có khả năng truy cập qua mạng) và WDS (Well Defined Service document – tài liệu xác định dịch vụ).
Một tài liệu WSDL gồm các thành phần chính sau:
message (thông điệp): là định nghĩa trừu tượng của dữ liệu được truyền đi.
Operation (thao tác): là định nghĩa trừu tượng của các hành động cụ thể được hỗ trợ bởi dịch vụ mạng. Một tập các thông điệp vào/ra xác định một thao tác.
Types (kiểu): là một cơ chế để định nghĩa kiểu dữ liệu sử dụng trong dịch vụ Web, ví dụ: XSD (XML Style Definition).
PortType (kiểu cổng): là một tập hợp các thao tác.
Binding (liên kết/ kết nối): xác định một danh sách các giao thức truyền thông và các định dạng dữ liệu cho các kiểu cổng cụ thể. Liên kết xác định cách thức để các thao tác truy cập dịch vụ bằng cách sử dụng một giao thức cụ thể nào đó.
Port (cổng): là một điểm cuối, là sự kết hợp giữa một địa chỉ mạng và một liên kết.
Service (dịch vụ): là một tập các cổng.
2.2. Giao thức truy cập đối tượng đơn giản SOAP.
Giao thức truy cập đối tượng đơn giản SOAP là giao thức dựa trên chuẩn XML để truyền tải thông tin trong một môi trường phân tán. Khi SOAP được mô tả như một chuẩn truyền thông, hầu hết mọi người nghĩ đến DCOM hay CORBA và bắt đầu đặt các câu hỏi như: “SOAP thực hiện việc kích hoạt đối tượng như thế nào?” hay “SOAP sử dụng dịch vụ đặt tên nào?”. Trong khi một cài đặt SOAP cụ thể sẽ có thể bao gồm những điều này, bản thân chuẩn SOAP không xác định chúng. SOAP là một đặc tả nhằm xác định một vỏ bao (envelope) dựa trên chuẩn XML cho thông tin cần truyền tải, và một tập các quy tắc cho việc dịch ứng dụng và các kiểu dữ liệu của một nền tảng cụ thể thành dạng XML. Các thiết kế SOAP làm cho nó thích hợp với rất nhiều các ứng dụng thông điệp và tích hợp các mẫu (pattern).
Cách SOAP được sử dụng trong dịch vụ Web là:
Thành phần sử dụng dịch vụ sử dụng tài liệu XML phù hợp với đặc tả SOAP và chứa yêu cầu dịch vụ.
Thành phần sử dụng gửi tài liệu tới một SOAP server.
Dịch vụ Web nhận thông điệp SOAP và gửi thông điệp như một lời gọi dịch vụ tới ứng dụng cung cấp dịch vụ được yêu cầu.
Đáp ứng từ dịch vụ được trả về cho SOAP server và thông điệp này sẽ được gửi trả thành phần yêu cầu dịch vụ nhờ giao thức SOAP.
SOAP và XML
SOAP là một ứng dụng của đặc tả XML. Các định nghĩa và hàm của SOAP chủ yếu dựa trên các chuẩn XML như lược đồ XML và không gian tên XML.
Tất cả các thông điệp SOAP đều được mã hoá bằng XML. Một ứng dụng SOAP cần bao gồm không gian tên SOAP phù hợp trên tất cả các phần tử và thuộc tính được định nghĩa bởi SOAP trong các thông điệp mà nó sinh ra. Một ứng dụng SOAP phải có khả năng xử lý các không gian tên SOAP trong các thông điệp nhận được. Nó phải huỷ bỏ các thông điệp chứa các không gian tên không đúng và nó có thể xử lý các thông điệp SOAP không cần các không gian tên SOAP mặc dù chúng có các không gian tên đúng.
Thông điệp SOAP
Một thông điệp SOAP bao gồm một vỏ bao chứa một phần đầu (header) tuỳ chọn và một phần thân (body) bắt buộc. Phần đầu chứa các khối thông tin chỉ ra cách thức thông điệp được xử lý, bao gồm các thiết lập chọn đường và phân phối, các khẳng định sự xác thực hoặc bản quyền, và các ngữ cảnh giao dịch. Phần thân chứa thông điệp thực sự được gửi đi và được xử lý. Bất cứ cái gì có thể biểu diễn bằng cú pháp XML đều có thể chứa trong phần thân của thông điệp.
Hình 2.2: Cấu trúc thông điệp SOAP
Cú pháp XML để biểu diễn thông điệp SOAP dựa trên không gian tên Không gian tên này chỉ ra một lược đồ XML định nghĩa cấu trúc của một thông điệp SOAP.
Sau đây là một tài liệu SOAP biểu diễn bằng XML.
<s:Envelope
xmlns:s=''>
<m:transaction xmlns:m=''soap-transaction''
s:mustunderstand="true">
1234
Christogher Robin
Accounting
Pooh Bear
Honey
1
Pooh Stick
Ví dụ này minh hoạ tất cả các thành phần cơ bản của đặc tả vỏ bao SOAP, trong đó:
: thành phần chứa ở mức cao nhất của thông điệp SOAP.
: chứa các khối bổ sung thông tin về cách thức xử lý thông điệp.
: phần tử chính chứa thông điệp thật sự cần được xử lý.
SOAP Fault (lỗi SOAP)
Lỗi SOAP là một loại thông điệp đặc biệt nhằm truyền tải thông tin về lỗi có thể xảy ra trong quá trình xử lý thông điệp SOAP.
Phần tử SOAP Fault được sử dụng để truyền thông tin trạng thái hoặc lỗi trong một thông điệp SOAP. Nếu có trong thông điệp, phần tử này phải xuất hiện như một điểm vào phần thân và không được xuất hiện quá một lần trong phần tử body.
Phần tử SOAP Fault định nghĩa 4 loại phần tử con sau:
Faultcode:
Phần tử faultcode được sử dụng bởi phần mềm để cung cấp một cơ chế toán học cho phép xác định lỗi. Faultcode phải có mặt trong một phần tử SOAP Fault. SOAP định nghĩa một tập nhỏ các mã lỗi SOAP cho các lỗi SOAP cơ bản.
Faultstring:
Phần tử faultstring cung cấp một giải thích lỗi mà người dùng có thể đọc được, không dùng để xử lý toán học.
Faultactor:
Phần tử faultactor cung cấp thông tin về người gây ra lỗi trong đường dẫn thông điệp. Nó tương tự như thuộc tính SOAP actor nhưng thay vì chỉ ra đích của điểm vào phần đầu, nó chỉ ra nguồn của lỗi. Giá trị của thuộc tính faultactor là một URI xác định nguồn gây ra lỗi. Các ứng dụng không phải là đích cuối cùng phải chứa phần tử faultactor trong phần tử SOAP Fault. Đích cuối cùng của thông điệp có thể sử dụng phần tử faultactor để chỉ ra nguồn gây lỗi một cách tường minh.
Detail:
phần tử detail được dùng để truyền thông tin lỗi của ứng dụng cụ thể có liên quan đến phần thân. Nó phải có mặt nếu nội dung của phần thân có thể không được xử lý thành công. Nó không được sử dụng để mang thông tin về lỗi của phần đầu. Thông tin chi tiết về lỗi của điểm vào phần đầu phải được truyền trong các điểm vào của phần đầu.
Sự vắng mặt của phần tử detail trong phần tử Fault chỉ ra rằng lỗi không liên quan tới xử lý phần thân, do vậy, nó được dùng để xác định xem phần thân có được xử lý hay không trong trường hợp có lỗi xảy ra.
Tất cả các phần tử con trực tiếp của phần tử detail được gọi là các điểm vào cụ thể và mỗi điểm vào cụ thể được mã hoá như một phần tử độc lập trong phần tử detail.
Các quy tắc mã hoá cho các điểm vào cụ thể như sau:
Một điểm vào cụ thể được xác định bằng tên đầy đủ của phần tử, bao gồm không gian tên URI và tên địa phương. Thuộc tính encodingStyle có thể được sử dụng để chỉ ra cách mã hoá cho các điểm vào cụ thể.
Mô hình truyền thông điệp SOAP
SOAP hỗ trợ hai kiểu truyền thông điệp:
Lời gọi thủ tục từ xa (Remote Procedure Call - RPC): cho phép xử lý thông điệp dạng yêu cầu-đáp ứng, trong đó, đích nhận một thông điệp hướng thủ tục và trả lại một thông điệp đáp ứng.
Truyền tải thông tin hướng thông điệp: hỗ trợ các tổ chức và ứng dụng cần truyền tải nghiệp vụ hoặc các tài liệu khác, trong đó, một thông điệp được gửi nhưng người gửi không yêu cầu phải trả lời ngay.
Các thông điệp SOAP phần lớn được truyền theo kiểu một chiều từ người nhận đến người gửi. Các thông điệp SOAP thường được kết hợp để cài đặt các mẫu như request/response.
Các cài đặt SOAP có thể được tối ưu hoá để khai thác các đặc trưng của các hệ thống mạng cụ thể. Ví dụ, kết nối HTTP cho phép các thông điệp SOAP đáp ứng được truyền như các đáp ứng HTTP, sử dụng cùng một kết nối giống như thông điệp yêu cầu.
Không phụ thuộc vào giao thức mà SOAP bị ràng buộc, các thông điệp được định hướng dọc theo một “đường dẫn thông điệp” (message path), cho phép xử lý tại một hoặc nhiều nút tr
Các file đính kèm theo tài liệu này:
- A9003.DOC