解讀SOA架構及其安全性的問題
CIO時代 發(fā)表于:13年05月10日 12:30 [轉載] 比特網
IT組織已經成功建立并實施SOA應用軟件很多年了,并有效的節(jié)約了成本和提高的生產效率,取得了很好的成果。那么,SOA如此風靡,它究竟是一種什么東西呢?簡單來說,SOA就是一個組件模型,應該屬于一個軟件一體化中的一個概念。這個組件模型,將不同的服務以應用程序的不通功能單元的形式,通過已經預定義的接口和協(xié)議聯系起來。這些預定義的接口,一般都使用比較中立的定義,這樣可以確保這種接口可以做到跟編程語言無關,跟所有的軟硬件無關,最大可能的滿足其跨平臺性。這樣,當構建一個這樣的平臺后,這樣一個平臺中的系統(tǒng)就能以一個統(tǒng)一的通用的方式進行交互,而不用去關心這些系統(tǒng)被部署在什么樣的環(huán)境中和部署在什么地方這些問題了。
當然,即使到目前,SOA依舊沒有一個統(tǒng)一的官方的定義,很多廠家在在拿出自己的SOA決絕方案的時候,都給除了自己的定義。這里,我們僅僅提供一個W3C提供的定義:SOA是指服務提供者完成一組工作,為服務使用者交付所需的最終成果。最終結果通常會使使用者的狀態(tài)發(fā)生變化,但也可以使提供者的狀態(tài)發(fā)生改變,或者雙方都發(fā)生改變。
在實施SOA架構時的關鍵目標是什么呢?其實就是為了節(jié)約成本,實現企業(yè)IT資產重用的最大化。這一目標促使人們在實施SOA的時候,必須考慮以下方面:可從企業(yè)外部訪問,這個是因為為了滿足企業(yè)的業(yè)務伙伴的需求。使業(yè)務伙伴即外部用戶也能像企業(yè)內部用戶一樣訪問相同的服務。當業(yè)務伙伴基于業(yè)務的目的交換業(yè)務信息時,這個會話過程應該不會受到阻止:隨時可用,當有服務使用者請求服務時,SOA要求服務提供者能夠及時響應。
這里有個問題需要說明的是,在實際上,服務的提供者總是多于服務的使用者,當使用者多到一定程度時,對使用者來說,很容易受到服務提供者短缺的影響,所以為了緩解這個問題,一般在提供服務時,會考異步應用,因為異步應用要更為穩(wěn)健,其采用隊列請求設計?梢匀菰S服務暫時短缺或遲滯的情況:考慮到減少使用者和服務層之間的多次往復,在設計接口時一般采用粗粒度服務接口,因為粗粒度服務一次能提供一項特定的服務功能。但是這里也會出現一個問題,那就是,粗粒度設計雖然能有效減少使用者和服務層的多次往復,但其重用性卻很差,有的甚至沒法重用,為了解決這個問題,人們在設計SOA架構的時候,采用了不通的粗粒度等級來創(chuàng)建服務。這種服務分級包含了粒度較細,重用性較高的服務,也包含粒度較粗,重用性較差的服務。在設計時,還有一個重要的特性。那就是需要滿足松散耦合,這以特性的滿足,使SOA與其它的大多數組件架構區(qū)別開來,而且,也將服務使用者和服務提供者在使用服務和提供服務上實現了完全的透明。早些時候,SOA架構一般采用ESB通信。但現在采用較多的是web services,這要優(yōu)于與服務特定接口的連接。還有一個特性就是需要可重用的接口設計,這個就不用說了,為了滿足重用性和易于管理性了。
由于SOA架構滿足上面描述的那些特性,其具有的優(yōu)點是顯而易見的。其具有的優(yōu)點主要表現在:編碼靈活性;能使每一個開發(fā)人員的角色明確:由于其采用了中立的通信格式,所以能支持多重客戶類型;其松散耦合讓其具有更易維護性,更高的可用性。對企業(yè)來說,最關心就是對現有的資產的利用和易于集成和管理了,而這個也能滿足,所以,企業(yè)的成本就自然而然的降低了。
雖然SOA現在發(fā)展的如火如荼,但還是處在不斷的發(fā)展中,還是存在很多有待改進的地方。其缺點目前來說,主要表現在以下幾個方面:可靠性,安全性,性能。在電子商務的應用中,有一個很重要的可靠性,就是不可否認性,信息確保發(fā)送且僅且一次以及事務的回滾,這點是必須得到滿足的,但是,目前來說,SOA架構還沒有為此做好準備。至于安全性我們在下面會做詳細的分析。至于性能問題,不可否認,這個SOA架構最遭人詬病的地方。SOA架構的性能稍低,主要是因為SOA的分布性質和web服務協(xié)議的開銷。任何分布式系統(tǒng)的執(zhí)行速度都不如獨立式系統(tǒng),因為這里面有網絡的制約因素。所以,在對那些實時性要求較高的地方,在構建SOA架構之前,就應該先搞清楚它的適用范圍了。
這里之所以特意把安全問題拿出來作為一個獨立的段落,是因為安全問題對一個系統(tǒng)來說應該受到足夠的重視。如果你沒有在在它上面付出應有的努力,也許,它就會成為導致SOA架構在實施的時候失敗的主要原因。
由于SOA架構的松散耦合性,當其向客戶提供服務時,任何形式的網絡都能獲取IT應用程序和系統(tǒng)時,人們會本能的擔心非正當人群也能訪問程序和系統(tǒng);ヂ摼W對世界開放,從而更加劇了人們的這一擔憂。通常我們企業(yè)都知道保護網絡接入,認證用戶以及運行訪問控制列表。假設所采用的SOA基礎架構具有實施安全粒度的全力,這就使得有效控制訪問方式成為可能。但是,如果保證數據在網絡中輸送的隱秘性又是一個難題,要達到一定的保護水平,可以采用各種加密標準。然而不幸的是,市場并沒有很好的處理整個SOA安全事件,簡單的看很多與安全相關的web服務“標準”草案都是尚未成熟,考慮欠佳,并不真正的實用。
那么一般來說,我們針對SOA的安全能做些什么呢?需要的SOA網絡安全策略和許多的基于web的應用程序是采用相同的策略的,他們采用的方式都可以歸結為創(chuàng)建一個虛擬局域網來保證服務器和客戶端達到交互,使用數字證書來建立SSL(secure socket layer)保護或者HTTPS;蛘咄ㄟ^在軟件或者硬件上部署防火墻基礎架構來檢測通過SOA進來的可疑請求。但是這只是構建一個安全的通道,我們依舊不能保證數據不被竊取,所以,為了確保數據的安全性,我們需要對數據加密。針對SOA架構來,說,就是對原始的XML數據進行保護了,通常,我們采用XML加密和XML簽名來把安全加入到基于XML的數據中去。XML加密可以讓數據能夠在請求者和晌應者之間以一種模糊的方式傳輸,這樣,即使數據受到竊取,信息也很難讀懂。而XML簽名,則是用來進行XML文檔的篡改檢測的。它可以保證所傳輸的數據沒有收到篡改或者狀態(tài)沒有發(fā)生改變。至于具體的操作方式,限于篇幅。就不在這里詳細講解了。
盡管SOA產品和平臺已經發(fā)展有一段時間了。但這僅僅意味著開始。相信SOA架構在以后的一段時間內,仍然會有巨大的發(fā)展。但畢竟SOA架構也還是存在一些問題,所以,對于用戶而言,究竟該選擇什么平臺或者什么產品,的確是應該三思而行。