在企業(yè)級 SOA 中使用 Web 服務,第 7 部分: 使用 XML 二進制優(yōu)化打包規(guī)范加速 Web 服務應用程序
您是否希望了解如何使用 XML 二進制優(yōu)化打包 (XOP) 規(guī)范來優(yōu)化 Web 服務應用程序?Judith M. Myerson 將向您展示在處理 Web 服務時,XOP 包比 XML 解析器更有效的原因。她將討論在多 SOA 中 Web 服務變得過于龐大的兩個場景。為了解決此問題,她討論了 XOP 包可以如何比 XML 解析器更為有效地處理二進制(而非文本)格式的大型文件。她給出了 XOP 處理前后的代碼示例,以幫助開發(fā)人員了解需要更改哪些元素。
在本系列的第 2 部分中,我討論了可以如何實現(xiàn)原始應用程序 Web 服務的業(yè)務流程并確定系統(tǒng)可以承載的可互操作 SOA 的最大個數(shù),以避免 SOA 過載。在本系列的第 5 部分中,我強調(diào)了將業(yè)務流程規(guī)則作為優(yōu)化 Web 服務的首要事項的重要性,并給出了一些示例,以說明可以如何減少 Web 請求的數(shù)量和執(zhí)行時間。
在這一部分中,我將討論基于 XML 的 Web 服務應用程序是如何變得過于龐大的。當大量使用 Web 服務時,這些 Web 服務將阻塞網(wǎng)絡通信,從而導致系統(tǒng)過載。為了解決此問題,我將討論可以如何應用 XML 二進制優(yōu)化打包 (XOP) 規(guī)范(請參閱參考資料)來加速 Web 服務。
此標準草案旨在比當前 XML 解析器更有效地處理 Web 服務。解析器的行為更像解釋器,而不是編譯器。當解析器讀寫大型文件(特別是文本格式的大型文件)時,并不能達到其讀取較小的文件或計算簡單函數(shù)時的性能。甚至加密也可能使 Web 服務陷于停頓,因為必須執(zhí)行復雜的計算才能獲得希望的結(jié)果。
![]() ![]() |
![]()
|
我在第 2 部分中提到,從企業(yè)應用程序提取組件,然后將其重新構(gòu)造為外部 Web 服務,這種做法更為恰當。如果這樣,您就可以更改 Web 服務中的代碼,而不用重新設計并編譯長時間運行的大型復雜應用程序。
第一個 SOA 中經(jīng)過重新設計而顯得更加緊湊的應用程序(請參見圖 1)可以通過發(fā)送 Web 請求來與第二個 SOA 中的外部企業(yè) MRP(托管資源原型)Web 服務進行動態(tài)鏈接。而 MRP Web 服務又指向第三個 SOA 中的外部企業(yè) CRM Web 服務。客戶關(guān)系管理 (CRM) Web 服務隨后將請求和信息發(fā)送到該應用程序以進行進一步處理。
圖 1. 動態(tài)鏈接到 Web 服務

讓我們假定在任何給定時間都可能出現(xiàn)對多個基于 XML 的 Web 服務的多個 Web 請求。鏈接到其他遺留系統(tǒng)或大型企業(yè)系統(tǒng)的企業(yè)應用程序未在上圖中顯示,而這些系統(tǒng)又與接收多個 Web 請求的多個 Web 服務鏈接。當大量使用時,Web 服務會變得過于龐大,從而阻塞網(wǎng)絡通信。
一個解決方案就是向基于 XML 的 MRP 和 CRM Web 服務應用 XOP 包(請參見圖 2),從而以二進制格式進行處理。
圖 2. 將 XOP 包應用于 Web 服務

在第二個場景中,可以首先開發(fā)業(yè)務流程規(guī)則,然后開發(fā)根據(jù)現(xiàn)有 Web 服務構(gòu)建新的 Web 服務所需的基于 XML 的 Web 請求。如果新的 Web 服務(業(yè)務邏輯 Web 服務或以數(shù)據(jù)為中心的 Web 服務)可以提供更好的或額外的服務和功能,則必須減少或完全消除冗余的 Web 請求、執(zhí)行時間、訪問時間和帶寬。
問題在于,當創(chuàng)建新的 Web 服務并大量使用時,它們將會變得過于龐大。與第一個場景類似,您需要將 XOP 包應用于 Web 服務。對于這兩個場景,您都需要與系統(tǒng)管理員協(xié)作,以確定在不引起系統(tǒng)過載的情況下可以使用 XOP 包的 Web 服務的最大數(shù)目。
![]() ![]() |
![]()
|
為了理解 XOP 的工作方式,我將首先討論一個與 SOAP 消息相似的 XML Infoset,其中描述了包含一張圖片和一個簽名的 XML 文檔。在清單 1 中,我使用粗體來突出顯示原始 XML Infoset,以說明哪些原始元素在 XOP 處理之前。
清單 1. XOP 處理前的 XML Infoset
|
正如您所看到的,其中有兩個元素:m:photo
和 m:sig
。m:photo
元素采用 base64 編碼的內(nèi)容為 /aWKKapGGyQ=
,而 m:sig
元素采用 base64 編碼的內(nèi)容為 Faa7vROi2VQ=
。這些元素也稱為元素信息項。內(nèi)容是元素的子項。請將該元素當作此子項的父項。子項是字符信息項,即包含字母數(shù)字字符的項。例如,m: photo
是子項 /aWKKapGGyQ=
的父項。該子項的名稱不便閱讀且難于發(fā)音,很容易出現(xiàn)鍵入錯誤。
當通過 XOP 處理放置 XML Infoset 時,可以解決此問題。XOP 的工作方式是:從原始 Infoset 提取優(yōu)化內(nèi)容,然后創(chuàng)建 XOP Infoset。優(yōu)化內(nèi)容是我剛剛談到的經(jīng)過縮減的內(nèi)容。在清單 2 中,我突出顯示了要刪除的內(nèi)容。
清單 2. 要刪除的內(nèi)容
|
![]() ![]() |
![]()
|
XOP 處理涉及到三個步驟。第一步,使用 Infoset 中的二進制元素替換文本元素。第二步,在包含已替換元素的 Infoset 前添加 MIME 包。第三步,在該 Infoset 后添加另一個包。
XOP 包使用名為 xop:Include
的新元素信息項來替換刪除的內(nèi)容。xop: Include
元素包含一個屬性信息項,帶有指向 XOP 包部分的鏈接,XOP 包承載從原始元素中刪除的數(shù)據(jù)的二進制表示。在清單 3 中,我突出顯示了替換原始 Infoset 中的圖片和簽名元素的內(nèi)容的 xop: Include
。
清單 3. 替換后的元素
|
正如您所看到的, href='cid:http://example.org/me.png'/
是圖片元素的屬性信息項,而 href='cid:http://example.org/my.hsh'
是簽名元素的屬性信息項。
更新 Infoset 部分(請參見清單 4)。而行數(shù)保持不變。
清單 4. 更新后的 XML Infoset 部分
|
為了完成更新,需要使用 MIME Multipart/Related 包中的 XOP 對原始 Infoset 進行序列化。XOP 是一種更有效的方法,用于序列化包含特定類型的 Xquery 和 Xpath 2.0 元素內(nèi)容的 XML Infoset。
在更新后的 Infoset 前后各添加一個 MIME 包,以分別描述包含文本格式和二進制格式的圖片和簽名的 XML 文檔。在清單 5 中,我突出顯示了 XOP 包識別 8 位文本格式的 XML Infoset 的代碼。
清單 5. Infoset 前的 XOP 包部分
|
清單 6 顯示了 XOP 包如何識別已被刪除的數(shù)據(jù)的二進制表示。
清單 6. Infoset 后的 XOP 包部分
|
正如您所看到的,Infoset 后的 Content-ID
的二進制內(nèi)容,xop: Include element
中提到的鏈接代替了 Infoset 前的消息的文本內(nèi)容。
![]() ![]() |
|
在清單 7 給出了序列化為 XOP 包的整個 XML Infoset。盡管其中還有其他行,但是此包比原始 Infoset 的 XML 解析器的效率高得多。
清單 7. 序列化為 XOP 包的 XML Infoset
|
![]() ![]() |
![]()
|
為了運行具有 XOP 包的 Web 服務,需要事先進行計劃,以確定應該如何設計應用程序,從而避免高峰時過載。應該就優(yōu)化 Web 服務時應采用何種編碼技術(shù)與系統(tǒng)管理員團隊進行溝通。
您會發(fā)現(xiàn)解決這些問題后,您的 Web 服務應用程序優(yōu)化工作變得容易得多。您可以使用 IBM Relational Web Developer for WebSphere? Software 來開發(fā)基于業(yè)務流程的 Web 服務,然后在 SOA 內(nèi)部及各個 SOA 之間將其與 XOP 包一起使用。管理員會發(fā)現(xiàn),解決了這些問題也使得他們的網(wǎng)絡管理工作變得更加輕松。他們能確定在不引起系統(tǒng)過載的前提下,可以將多少應用程序與 XOP 包一起使用。
posted on 2006-04-17 04:06 wsdfsdf 閱讀(216) 評論(0) 編輯 收藏 引用 所屬分類: 技術(shù)文章