首先在云計算中實施SOA是很麻煩的一件事。這是因為沒有人知道還有什么別的人有成功實施案例和相關技能,尤其是那些以云計算為目標的案例,最后,“SOA作為一個術語在業內已被過度濫用。”
根據SOA標準(源于OASIS、OMG以及Open集團),首先SOA是架構。這就意味著,它允許任意的實施,其中可能會或可能不會使用特定的技術,例如網絡服務或REST。根據SOA標準導航白皮書(該文件由OASIS、OMG以及Open集團于2009年共同發布),只使用網絡服務或REST并不構成SOA。此外,一個體系架構可以采用幾種不同的方法來實現。
在SOA中,大部分技能位于架構設計范疇而不屬于開發范圍。因此,任何關于”SOA實施技能的假設都只能是一種炒作。”讓我們假設我們有一個可以實施重要但復雜業務邏輯的應用程序。我們需要對新任務使用這個邏輯應用程序,同時我們需要令其成為SOA中的一個服務。有些人(事實上很不幸的是有太多的人)會為這個應用程序添加一個網絡服務接口,從而宣稱他們實施了SOA。好啦,這并不是真的SOA。
首先,這些人必須驗證應用程序能夠處理類似于網絡流量的請求(如果應用程序并不是真正的多線程?)。其次,即便應用程序能夠處理多個并發請求,其網絡服務將使用新的網絡服務接口創建相同的應用程序,僅此而已,但是這與面向服務無關。這個應用程序仍然不是面向服務的,它并不符合面向服務的原則。
另外,有些了解應用程序行為模式和信息模式的人創建了一個輕量級應用程序,一個真正的服務,它將應用程序作為資源來使用。這才是一個面向服務的解決方案,因為我們在通過資源提供所需業務能力的SOA中有一個服務。但是,所有這些又是如何與云計算相關聯的呢?其答案取決于云計算的類型,例如IaaS、SaaS、PaaS等等。
IaaS(基礎設施即服務)并不是真正的服務,租賃也不是。客戶以在其自有數據中心或其他人數據中心中相同的方式使用基礎設施。硬件資源虛擬化并不是服務,而是使用模式。因此,IaaS與基礎設施的所有權相關。即便IaaS彈性特性對客戶很重要,但是從客戶端來看它是無形的,而客戶為IaaS支付的成本并沒有隨資源彈性擴張或IaaS資源收縮而改變;其成本只取決于資源的使用而不是規模的彈性擴張收縮。
與IaaS相比,乍看之下SaaS和PaaS更像是服務。在現實中,從符合面向服務原理中提供某一業務功能和影響真實世界(OASIS SOA RM & RAF)的實體來說,SaaS和PaaS都不是服務。顧名思義,這項服務是基于其他人維護的應用程序和平臺的,而應用程序和平臺可能是完全沒有面向服務的。
如果你習慣于把SaaS視為一種服務,要知道那是一項在你自己的SOA實施中所處理過最困難的服務。這一結論的原因又一次地歸咎于所有權。SaaS是一種外部服務,而你對其的所有影響只限于服務合同。如果你的服務合同中并沒有明確指定所提供軟件應用程序的某一公共訪問接口,那么它也就能夠合法地拒絕你對該接口的所有服務請求。你無法調整/修改/修正SaaS,這對于IT人來說真是一個奇怪的現象。因此,你的SOA實施技能僅適用于這里的三個方面:
1. SaaS與你的其他系統之間的語義和實體集成
2. 服務合同,其中包括可訪問性、可用性、安全性、恢復以及SLA
3. 交互監控以及測量達成一致的指標
對于PaaS來說,這真是雪上加霜。除了與SaaS可用性相關的關注問題,PaaS通常執行某一云計算客戶所必需使用的設計、部署與管理工具。這就產生了受制于特定供應商的問題,這是PaaS供應商最樂于見到的,但對于你來說則必須用盡一切手段避免這種情況的發生。更勿論多租戶可能對你的組織所造成的業務問題。
PaaS和SOA技能所特有的另一個關注問題是,你計劃在PaaS部署的服務應避免使用任何PaaS的特定功能。如果你使用了它們這些功能,那么你將失去對你服務的控制,從而變得依賴于無監督的PaaS資源(功能)。但是,PaaS工具將盡最大努力去違反你的服務獨立性(這純粹是一個營銷問題)。
因此,為了在云計算中使用你的SOA實施,你必須學習和運用在面向服務生態系統中的所有權概念。這是技術的新的一面,但是你能夠在OASIS SOA參考架構基礎規范中找到所有需要的信息。