AJax 概述
AJax 通過將用戶的浏覽器體驗(例如,企業對企業交易)轉換為一個基於 XML的 Web 服務門戶(例如企業對消費者交易),實現了響應式和交互式 Web 服務。AJax 使用的方法是在 Web 頁面和服務器之間,通過 HTTP 協議構建一個額外的處理層。該層攔截來自用戶的請求,然後在後台與服務器通信並異步獲得所需的 HTTP 協議內容。服務器請求和響應不需要匹配用戶操作,例如一個更新數據庫記錄的請求和一個更新成功的響應。
Web 服務漏洞
讓我們解決一些有關額外處理層的問題。由於它依賴 XML 作為請求和響應負載的內容類型,AJax 增加需要傳輸的 XML 流量。當出現大量的請求和響應時,Ajax 應用程序會阻塞網絡通信。而更嚴重的問題是,大量的通信會使 AJax 應用程序受到 Web 服務漏洞的威脅。如果這些漏洞被人利用,應用程序或系統的性能將受到損害。
讓我們看看四個漏洞實例:
過高的帶寬
破損數據
頻繁的小型 HTTP 請求
內存洩漏
過高的帶寬
文本格式的 XML 消息可能是二進制數據帶寬量的兩倍之多。傳輸 XML 消息所需的帶寬越多,系統或應用程序用來執行其他任務的可用資源就越少。例如執行復雜算法來獲取期望結果。過高的帶寬可能導致由系統超載引起的性能減退。
破損數據
過高的帶寬將導致 Ajax 應用程序輸出破損的數據,因為沒有足夠的資源生成干淨的數據。這意味著 Web 服務門戶(AJax 應用程序屬於其中的一部分)將把破損數據暴露給門戶的其他部分,從而導致畸形消息和過度解析。如果威脅者利用了這個漏洞,則會引起浏覽器崩潰。
頻繁的小請求
AJax 的一個缺點就是允許您生成大量較小的請求,而不是一個大的 post-back。頻繁的、較小的 HTTP 請求會加重後端服務器、負載均衡程序和防火牆的負擔,結果是造成過高的帶寬,最終導致性能降低。它們還會超出浏覽器或較慢的網絡連接的接受能力,從而導致網絡性能瓶頸。
內存洩漏
在一個典型的 Web 應用程序中,Web 頁面經常重新加載,清除該頁面的內存並開始一個干淨的頁面。使用 Ajax 時,等待 Web 服務門戶呈現下一部分內容的時候不需要重新加載頁面。使用 AJax 可以在浏覽器中保持一個單頁面應用程序長達數天,這使內存或其它資源洩漏更加嚴重。過度的內存洩漏(以及過高的帶寬和頻繁的 HTTP 請求)可能會造成 Web 門戶出現破損數據,增加了黑客從 Internet 中利用系統漏洞的風險。
風險評估
對於上面的四個例子,您需要判斷威脅方利用系統和服務器漏洞的風險級別以及對業務造成的影響。如果風險較高,需要使用一些保護措施提高 AJax 應用程序的性能。其中一種保護是使用 SLA 保證增強服務正常運行時間可用性。
Service Level Agreement
無論怎樣修改 Ajax 代碼來提高帶寬效率,始終存在一些風險和漏洞,需要您進行監視並解決。部署高效帶寬 Ajax 應用程序並不能保證 SLA 中的服務級別保持在或高於指定的性能阈值點(例如 99.9 或 99.999%)。在 AJax 應用程序中,當應用程序通過 Internet 從浏覽器應用程序轉移到服務器門戶時,它將更容易受到攻擊,特別是用來構建 Web 服務以檢測性能問題(例如包丟失)的 XML 部分。
改善服務運行時間的可用性
您需要考慮三件事情來改善服務運行時間的可用性。首先,要提高 AJax 應用程序性能,應該使用一些方法改善性能而不是優化帶寬(例如 XML內容過濾和 XML 加速)。其次,要保護 AJax 應用程序,應該考慮 Web 安全標准,例如 WS-Security(WSS)、ApplicationVulnerability Description Language(AVDL)以及其他標准。第三,考慮將監視這些應用程序的通信量作為度量性能的一種工具。
改進 #1. 加速應用程序
讓我們查看以下這些可以加速 AJax 應用程序的選項:
專門的硬件加速器
優化軟件
消除代碼冗余
XML 加速功能
解決互操作性問題
專門的硬件加速器
用硬件加速器加速 XML 通信。如果不使用加速器,加密、復雜圖形和語音識別算法會占用應用程序和相關資源,因為必須執行復雜的計算才能獲得理想結果。加速器通常不用於服務器端腳本。一種替代方法是將硬件加速器和優化軟件結合使用。
優化軟件
優化軟件用於修改和壓縮系統,這樣應用程序執行速度更快或操作更少的內存存儲量和其他資源。優化軟件在便攜電腦中耗電更少。要減少從服務器下載的體積和時間,需要兩個步驟:
使用 ASP.Net或 JavaScript 技術分析 AJax 應用程序負荷。
根據負荷分析開發優化軟件。
消除代碼冗余
消除代碼冗余的一個例子是減少 Ajax 回調的數量以及每個回調的負荷。如果回調之間存在復雜的交互,請查找並消除冗余代碼。另一個例子是將 AJax 應用程序分成多個模塊,然後合並功能類似的模塊,從而減少冗余。
XML 加速功能
取決於應用程序的復雜性,解析基於文本的大型 XML 文件產生了大量開銷,這就抵銷了使用硬件加速器和優化軟件消除代碼冗余帶來的好處。基於文本的 XML Web 服務應用程序體積較大並且會逐漸膨脹,因此從網絡、處理器和存儲性能的角度來看,不具備良好的帶寬效率。當使用大量的大型文件時,這些 Web 服務會阻塞網絡通信,導致系統超載。
Web 服務性能的一個主要阻礙因素是與 XML 有關的網絡和處理開銷。因此,行業趨向於標准化 XML 的二進制編碼模式,例如 XML-binary Optimized Packaging Specification(XOL)Package。如系列文章的 第 7 部分(關於在企業級 SOA中處理 Web 服務)中所述,我討論了這種包處理大型二進制文件的效率為何高於 XML 解析器處理基於文本的文件的效率。
解決互操作性問題
不論 Ajax 應用程序如何優化,使用了哪些硬件加速器,如何降低或消除了代碼冗余,您仍然需要解決互操作性問題。例如,當 Ajax 應用程序轉換為企業無法控制的 Web 服務時,您要根據共享語義和合同義務確保它們在外部可以進行互操作。語義的錯誤理解(例如專有語義)和合同漏洞(多平台差異)會造成互操作性問題,例如將 AJax 應用程序集成到遺留系統中。
改進 #2. Web 服務標准
讓我們看一些針對 AJax 應用程序的 OASIS Web 服務標准(OASIS 表示 Organization for the Advancement of Structured InformationStandards,由 International Open Standards Consortium 領導。)。
分結語
WS-Security Extensions(WS-SX)
Security AccessMarkup Language(SAML)
Service ProvisioningMarkup Language(SPML)
Digital SignatureServices(DSS)
ApplicationVulnerability Description Language(AVDL)
AJax 通過 Internet 從浏覽器應用程序轉移到服務器門戶產生了越來越多的安全漏洞,因此所有這些標准都是為了降低安全漏洞風險。如果應用了 XOL 包或其它二進制 XML模式,這些標准會更高效。
WS-SX
該標准提供了實現安全功能的技術基礎,例如實現更高級別的 AJax Web 服務應用程序時保持消息的完整性和保密性。由於 WSS 只關注單個的消息交換,因此可以擴展為 WS-SX,以支持涉及多個消息交換的可信 SOAP 消息交換,並定義管理消息的格式和標記的安全策略。Web Services SecureConversation、SecurityPolicy 和 Trust 規范為 WS-SX 的開發做了不少貢獻。
SAML
這種標記語言定義並保持了一種基於 XML 的標准框架,用於在在線合作伙伴之間創建和交換安全信息。SAML 現在被用於 Web 單點登錄、基於屬性的授權和保護 Web 服務。
SPML
該標准提供了一種 XML 框架,用於管理企業內部/之間的身份信息和系統資源的供給和分配。此外,SPML 1.0 規范允許使用 WSS、XML Digital Signatures 和 XML Encryption。
DSS
該標准定義了一個可以處理 Web 服務和其他應用程序的數字簽名的 XML 接口。DSS 在電子商務和其他 Web 應用程序安全性方面扮演著重要角色,它可以確保在交換並從存儲中檢索應用程序時 Web 數據的可靠性。DSS 規范包括用於簽名創建、簽名檢驗、時間戳和上述功能集合的服務。
AVDL
AVDL 的目標是定義一種語言,用於描述可以保護這種應用程序的信息。這些信息包括(但不限於)安全漏洞信息、已知的合法使用信息。在我的系列文章(在 Web 服務上下文中使用 SLA)的 第 7 部分 中,除了討論 AVDL 規范外,我還解決了針對某個 Web 服務的中斷阈值問題,比如這個服務沒有通過 HTTP 響應獲取安全漏洞信息的請求。
如果請求與響應的時間間隔非常大,中斷阈值所達到的水平將會對提供運行時間可用性的 SLA 保證產生不利影響。為了減少產生這種不利影響的機會,文章 討論了如何降低在異構的面向服務架構(SOA)中暴露 Web 服務漏洞的風險。使用 XOL 包可以進一步降低中斷阈值的影響。但是降低這種影響並不代表實現了 SLA 保證。
改進 #3. 監視通信流
積極地監視通信流可以持續地度量 Ajax 應用程序的網絡流量性能。它可以模仿網絡數據和 IP 服務,並實時收集 AJax 應用程序的網絡性能信息。收集的內容包括:有關響應時間的數據、帶寬量、單向延遲、抖動、包丟失和服務器響應時間。
對於同一個連接,可以針對不同的通信級別進行性能監視(例如高、中和低優先級)。通過將數據放入實時日志中,您可以查看在哪些位置何時出現大量的包丟失和抖動事件,響應變慢的原因以及如何通過修改應用程序的優先級來改善通信流性能。
結束語
要提高 Ajax 應用程序的性能,同時避開 Web 服務漏洞,您的團隊需要由開發人員、測試人員、系統管理員和潛在用戶組成。要消除冗余和內存洩漏,同時降低帶寬和小的 HTTP 請求的數量,您必須提前規劃 Ajax 性能改善項目的創建、測試和部署。解決了這些問題將使改善 AJax 應用程序的性能變得更加輕松。