尹培培
(國家廣電總局信息中心 北京 100866)
1996 年Gartner最早提出了SOA的概念設想[1],但在當時只是個預言,后來隨著軟件和信息化程度的發展,以及Web服務的提出和應用,SOA概念才逐漸走入實質性應用。SOA全稱為面向服務的體系架構(Service Oriented Architecture),是一類分布式系統的體系架構。其主要思想是在傳統的業務層和技術層之間增加一個服務層,服務層通過一套協議或規范把應用程序從底層技術層調出去,加以封裝,再根據業務層需求靈活組合。SOA是一個組件模型,它將異構平臺上的應用程序拆分為不同的功能單元(服務),服務之間通過定義良好的接口和規范以松耦合的方式整合在一起。從2005年開始,很多專家學者、軟件廠商都開始關注SOA,SOA推廣與普及工作開始加速。各大廠商共同協作制定了SOA的多個重量級規范,SOA進入了實施階段。
同時,在20世紀80年代網格計算、90年代公用計算,21世紀初虛擬化技術、SOA、SaaS應用的支撐下,云計算作為一種新興的資源使用和交付模式逐漸為學界和產業界所認知。根據wiki百科的定義[2],云計算是一種通過Internet以服務的方式提供動態可伸縮的虛擬化的資源的計算模式。云計算是分布式計算、并行計算、效用計算、網絡存儲、虛擬化、負載均衡等傳統計算機和網絡技術發展融合的產物。近幾年來,在各大廠商和研究機構的努力下,云計算開始真正落地實施,各個廠商的云技術、云方案陸續出臺,如亞馬遜的Cloud Drive,蘋果公司推出的iCloud,Google的云計算平臺,微軟的System Center 系統等等。云計算也成了IT界乃至全社會的熱點。
從概念上看來,SOA和云計算之間好像并無太大聯系,但它們都涉及到軟件架構問題,并且各自提出了不同方向的解決方案。關于SOA和云計算的關系,自從云計算概念提出至今,始終是產業界、學術界和用戶界關注的焦點問題。業界觀點大致有以下3種:SOA和云計算融合發展;云計算將取代SOA;SOA中包含云計算。本文將從各個方面分析這兩種架構之間的區別和聯系,以及在業界的發展趨勢。
1)云架構
云計算的一開始出現主要是為了解決計算機硬件資源問題,它通過虛擬化方式大大降低企業數據中心的應用成本。在這些年的發展之后,云計算的概念和范疇已經擴展為3個層次[3]:基礎架構云(Infrastructure as a Service,IaaS)、平臺云(Platform as a Service,PaaS)和軟件應用云(Software as a Service, SaaS)。IaaS指基礎設施即服務,這一層的作用是提供虛擬機或者其他資源作為服務提供給用戶。PaaS指平臺即服務,其作用是將一個開發平臺作為服務提供給用戶。SaaS指軟件即服務,是指將應用作為服務提供給客戶。它們主要提供的服務如圖1。企業利用云計算架構去進一步解決它的煙囪式問題,但主要目標是降低IT運營成本、提升IT資源的利用率,促進企業自身IT建設從粗曠型向集約型進行轉變。

圖1 云計算的3個層級架構Fig. 1 The 3-tier architecture of cloud computing
從上圖可以看出,從底至上,IaaS層主要是將服務器、存儲及網絡資源虛擬化,將虛擬后的資源作為服務提供給用戶;PaaS層可以為用戶提供一個包括開發、測試環境以及文檔等的開發平臺,用戶可以在此開發平臺上編寫應用,并且不用關心服務器部署、網絡和存儲等問題;SaaS層主要是給普通用戶提供無需安裝就能直接使用的應用。
由于SOA架構主要涉及的是軟件體系的架構,而云計算的三層架構中的PaaS的平臺開發中亦涉及到軟件架構問題,所以本文中主要將云計算中的PaaS模式與SOA進行分析。在PaaS模式中,對用戶提供的服務是一種分布式平臺服務,包括開發環境、測試環境、服務器平臺、硬件資源等。通過PaaS提供的服務,用戶可在分布式平臺上定制開發應用程序,并通過互聯網傳遞給其他客戶。PaaS能夠給企業或個人提供研發的中間件平臺,提供應用程序開發、數據庫、應用服務器、試驗、托管及應用服務。Gartner將PaaS分成兩類[4],APaaS(application platform as a service)和 IPaaS(integration platform as a service)。APaaS主要為應用提供運行環境和數據存儲,能夠將企業內部自建的簡單三層架構的應用直接部署到APaaS;IPaaS主要用于集成和構建復合應用。據Gartner稱,雖然PaaS市場的規模相對較小,但在市場上提供不完全PaaS產品的公司卻有超過150多家。目前市場上的PaaS產品既包括綜合PaaS產品,例如網站Salesforce.com旗下的Force.com,也包含獨立的應用基礎架構組件,如數據庫及其它為云計算服務提供支持的功能型中間件。目前代表產品有Google App Engine, Salesforce的force.com平臺,八百客的800APP等。以Google App Engine為例,它是一個由python應用服務器群、BigTable數據庫及GFS組成的平臺,為開發者提供一體化主機服務器及可自動升級的在線應用服務。用戶編寫應用程序并在Google的基礎架構上運行就可以為互聯網用戶提供服務,Google提供應用運行及維護所需要的平臺資源。
另外,云計算除了三層架構之外,從橫向范疇來說,云還可以劃分為公有云、私有云、社區云和混合云等。公有云是指第三方提供商為用戶提供的能夠使用的云,可在整個開放的公有網絡中提供服務。在公有云中,云服務提供商通過自己的基礎設施直接向外部用戶提供服務,外部用戶通過互聯網訪問服務,并不擁有云計算資源。私有云是為一個客戶單獨使用而構建的,該客戶擁有基礎設施,并可以控制在此基礎設施上部署應用程序的方式。私有云可由公司自己的IT機構,也可由云服務提供商進行構建,可部署在企業數據中心的防火墻內,也可部署在一個安全的主機托管場所。社區云是由幾個組織共享的云端基礎設施,支持特定的社區。混合云由兩個或者更多云端系統組成云端基礎設施,這些云端系統中可能包含公有云、私有云、社區云等,這些系統保有獨立性,但借由標準化或封閉式專屬技術相互結合,可確保資料與應用程序的可攜性。
2)SOA架構
長期以來企業面臨的關鍵問題是如何解決已形成的煙囪式的企業計算環境,SOA的出現就是為了解決獨立系統間的整合問題,或者說系統架構的問題。SOA作為一種面向服務的架構,是一種軟件架構設計的模型和方法論。SOA將異構平臺上的應用程序拆分為不同的功能單元(服務),服務之間通過定義良好的接口和規范以松耦合的方式整合在一起。接口是采用中立的方式進行定義的,它獨立于實現服務的硬件平臺、操作系統和編程語言,這使得構建在各種系統中的服務可以使用一種統一和通用的方式進行交互。
從業務角度來看,SOA利用企業現有的各種軟件體系,重新整合并構建起一套新的軟件架構。這套軟件架構能夠隨著業務的變化,隨時靈活地結合現有服務,組成新軟件,共同服務于整個企業的業務體系。我們可以把SOA看作是模塊化的組件,每個模塊都可以實現獨立功能,而不同模塊之間的結合則可以提供不同的服務,模塊之間的接口遵循統一標準,可以實現低成本的重構和重組。在SOA的技術框架下,可以把雜亂無章的龐大系統整合成一個全面有序的系統,從而增加企業在業務發展過程中應用系統的靈活性,實現最大的IT資產利用率。
從上兩節云架構和SOA架構的概念來看,它們的出現也是為了解決不同的問題,但它們都是企業或政務信息化實施的架構,在業界看來屬于競爭關系,甚至有些學者認為云計算可以取代SOA成為新的架構風格。實質上,云計算和SOA架構應用在企業或政務信息化中,各有優勢,也有自己的局限性。
從發展至今,云計算主要有處理能力強大、應用高度集成、用戶成本低、大規模數據存儲等優勢。但云計算還處于發展初期,局限性也有明顯。云的安全性是企業或政府需要考慮的首要問題。另外,現在不同云服務之間的交互能力非常弱,混合云架構缺乏成熟的技術支撐。同時網絡帶寬的限制也會給云的部署和實施帶來一定影響。
SOA的優勢主要有模塊的重用性、模塊之間的交互能力以及快速應變能力。SOA 方法從服務提供者和服務消費者的角度對功能方面涉及的對象、數據、組件、業務流程、界面等進行層次化,為所有服務提取安全架構、數據架構、集成架構、服務質量管理等中的共用部分。SOA 架構契合了企業信息化建設過程中業務創新的需要,同時也可以達到業務重用的效果,充分降低了企業的成本。
但是SOA 在企業信息化實施過程中仍有一些不足。目前SOA最好的實現方式是web服務,但web服務本身也有不成熟的地方[5],比如在可靠消息傳遞、web事務處理等方面的標準還有待完善。另外,如何快速組裝服務以及控制服務顆粒度這兩方面,還有待進一步研究,而服務顆粒大小問題在某種程度上決定了整個系統的靈活性和效率。
上一節提到云架構與SOA架構在信息化建設中各有優缺點,但其實它們之間除了競爭之外,還有著比較復雜的關系。我們認為,云架構和SOA架構之間可以取長補短,在一定程度上結合起來形成新的架構來更好地支撐復雜的信息化建設。
首先,從云計算的架構和SOA的概念來看,SOA在云計算中最廣泛使用的地方是PaaS平臺的中間件組件。PaaS的中間件包含事務型中間件、消息中間件、遠程過程/對象調用中間件、應用服務器、數據庫服務器、ESB、BPM等多種類型,SOA架構本身即是一種組件模型,可以組合異構平臺中的各種應用程序,而目前PaaS平臺的能力還尚未成熟,PaaS架構中正是需要這種標準化的組件模型,來支持其平臺中應用程序的開發及部署。同時,SOA架構的特性決定了它可用于包括PaaS在內的任何云服務(包括基礎設施服務IaaS和軟件服務SaaS)的創建與交付中。
其次,云計算對于SOA有著良好的促進作用。由于SOA架構是一個好的架構方法,使用SOA架構建成的信息系統間的運行與協作更加方便、標準化。為了獲得云計算的優勢,企業用戶需要通過接口和架構延展出去連接到云計算資源。為了更好的使用云計算的資源,企業內部需要一定的架構在核心企業信息系統和云計算資源之間建立鏈接,而這正是SOA可以做到的。
另外,市場上云的類型很多,私有云、公有云、社區云將長時間在市場上共存,形成混合云架構。在這種情況下,SOA架構可以很好的支持混合云的發展,利用模塊化架構既可以更好地將模塊遷移到云,同時還可幫助云端的應用程序進行整合。SOA在企業應用與混合云架構中的作用大致如圖2所示。

圖2 SOA架構應用于混合云Fig. 2 SOA architecture used in hybrid cloud
如圖2所示,企業內部應用可通過SOA與混合云中某種云的應用進行互相遷移,同時混合云中不同平臺的應用及服務也可通過SOA來進行整合或遷移。
總的來說,云計算的發展對于SOA架構在網絡、基礎架構上的應用都造成一定的影響,它們并不是排斥的關系,相反云計算的發展不僅對SOA不是一種取代關系,而是有顯著的促進作用,同時云計算中也需要SOA架構的應用,有效地部署云計算服務需要SOA方法。云計算時代的到來,給SOA架構帶來了更大的發展空間。
通過對云計算和SOA架構之間關系的分析,可以看出兩者之間的關系比較復雜,并不是簡單的替代關系。上一節最后也提到,SOA與云計算架構是密不可分的,對于將來的發展趨勢來說,由于兩種架構各自的優勢,更實際的方式是將兩種架構結合應用。將兩種架構結合起來有兩種方式,一種是在SOA架構中引入云計算,另一種是在云計算架構中引入SOA,兩種方式各有偏重,主要區別是解決問題的出發點和側重點不一致,而實現的途徑基本一致。
1)在SOA中引入云計算
在SOA架構中引入云計算,主要目的還是為了更好的集成軟件服務,包括企業內部信息系統與外部服務的集成,如SaaS和IaaS。有研究表示[6],使用SOA整合SaaS是可以實現的。通過SOA來整合SaaS服務,可以將較小粒度的SaaS服務集成到一起,提供更抽象、粗粒度的軟件服務。SOA平臺中的ESB總線可以將云計算中的分布式計算模塊、云存儲等以服務的方式接入。同時SOA平臺需要的IT硬件基礎設施,可以直接使用云計算中IaaS層的虛擬化的計算能力單元和存儲能力單元,均以服務的方式接入到ESB總線上。
前文中提到了,SOA中的中間件平臺類似于云計算中的PaaS平臺,SOA中所包含的ESB總線、流程引擎、規則引擎等都可以發展為PaaS平臺的能力。
2)在云計算中引入SOA
在云計算中引入SOA,主要是為了解決云計算中不同云服務之間的交互能力弱的問題。如圖2所示,混合云架構中不同云服務之間通常很難進行整合和遷移,將SOA應用到此處將有益于解決此問題。同時,通過引入SOA中的ESB總線,還可實現云計算中SaaS、PaaS、IaaS三層架構之間的集成。
另外,PaaS層可以將SOA中的數據、業務、流程、展現服務均納入,提供給在線開發環境中應用,這些服務在線進行服務編排和組裝可借助SOA本身已有的流程引擎和規則引擎來完成。
前文分析了云計算與SOA兩種架構各自的概念、優缺點,分析了兩種架構之間的關系,以及業界將來可能的發展趨勢。
云計算和SOA均有自己的優缺點。SOA使業務系統靈活應對業務需求的變化,而云計算使軟硬件環境靈活響應業務系統。同時云計算面臨不同云服務之間的交互問題,而SOA有利于整合技術平臺,統一技術標準,打通不同云平臺上的服務,促使云上的軟件和服務日趨成熟。
在實際工作中,企業或政府可以根據自身特點和實際需求,選擇通過適當的方式將兩種架構結合應用,發揮兩種架構各自的長處和優勢。如果能將云計算和SOA進行科學的結合,必將進一步提高各自應用時的效用,也有助于實現分布式系統和云計算產業的新一輪高速發展。
[1] W.Roy Schulte, Yefim V.Natis."Service Oriented" Architectures,Part 1[M].SSA Research Note,1996.
[2] Wikipedia.云計算[EB/OL].(2013-06-29)[2013-07-15].http://zh.wikipedia.org/wiki/%E4%BA%91%E8%AE%A1%E7%AE%97.
[3] 美國國家標準和技術研究院(NIST).NIST Cloud Computing Reference Architecture [S]. 2011.
[4] Massimo Pezzini, Benoit J. Lheureux. Integration Platform as a Service: Moving Integration to the Cloud [R].March, 2011.
[5] 王鄭. Web服務安全性研究[D]. 合肥:合肥工業大學, 2007.
[6] 朱志良,苑海濤. SOA與云計算:競爭還是融合[J].計算機科學,2011,38 (12):6-11.ZHU Zhi-liang, YUAN Hai-tao. SOA and cloud computing:competition or integration[J].Computer Science,2011,38(12):6-11.