第一節 云計算的基本知識
一、云計算的內涵
近年來,云計算(Cloud Computing)成為信息技術(Information Techno logy,IT)領域最令人關注的話題之一,也是當前大型企業、互聯網的IT建設正在考慮和投入的重要領域。云計算的興起,催生了新的技術變革和新的IT服務模式。但是對大多數人而言,云計算還是一種不確切的定義。到底什么是云計算?
目前,無論是國外還是國內,云計算都取得了前所未有的發展勢頭,云計算相關產品與服務遍地開花,服務于各行各業。然而,云計算技術和策略的不斷發展以及不同云計算之間的差異性結構,導致云計算到目前仍然沒有一個統一的概念,但各方也分別根據自己的理解給出略有差異的云計算的定義。
作為網格計算(Grid Computing)之父,伊安·福斯特對云計算的發展也相當關注。他認為云計算是“一種由規模經濟效應驅動的大規模分布式計算模式,可以通過網絡向客戶提供其所需的計算能力、存儲及帶寬服務等可動態擴展的資源”。
不同于以往文獻中所提出的概念,伊安·福斯特明確指出了云計算作為一種新型的計算模式,與之前的效用計算的不同,即其由規模經濟效應驅動,也就是說,云計算可以看作效用計算的商業實現。這一說法得到了普遍的引用和贊同,也是第一個被廣泛引用的關于云計算的概念。
全球最具權威的IT研究與顧問咨詢企業高通(Gartern)將云計算定義為一種計算模式,具有大規模可擴展的IT計算能力,可以通過互聯網以服務的形式傳遞給最終客戶。
國際商業機器公司(International Business Machines Corporation,IBM)IBM在白皮書《“智慧的地球”——IBM云計算2.0》中闡述了對云計算的理解:云計算是一種計算模式,在這種模式中,應用、數據和IT資源以服務的方式通過網絡提供給用戶使用;云計算也是一種基礎架構管理的方法論,大量的計算資源組成IT資源池,提供動態創建高度虛擬化的資源以滿足用戶需求。IBM將云計算看作一個虛擬化的計算機資源池。
相對于IBM、亞馬遜公司(Amazon)等云計算服務商業巨頭企業,谷歌(Google)的商業就是云計算。因此,Google一直在不遺余力地推廣云計算的概念。Google前大中華地區總裁李開復博士將整個互聯網比作一朵云,而云計算服務就是以互聯網這朵云為中心。在安全可信的標準協議的基礎上,云計算為客戶提供數據存儲、網絡計算等服務,并允許客戶采用任何方式方便快捷地訪問使用相關服務。
目前受到廣泛認同,并具有權威性的云計算定義,是由美國國家標準和技術研究院(NIST)提出的:“云計算是一種可以通過網絡接入虛擬資源池以獲取計算資源(如網絡、服務器、存儲、應用和服務等)的模式,只需要投入較少的管理工作和耗費極少的人為干預就能實現資源的快速獲取和釋放,且具有隨時隨地、便利且按需使用等特點?!?/p>
綜上所述,云計算的核心是可以自我維護和管理的虛擬計算資源,通常是一些大型服務器集群,包括計算服務器、存儲服務器和寬帶資源等。云計算將計算資源集中起來,并通過專門軟件實現自動管理,無需人為參與。用戶可以動態申請部分資源,支持各種應用程序的運行,無需為煩瑣的細節而煩惱,能夠更加專注于自己的業務,有利于提高效率、降低成本和創新技術。
根據這些不同的定義不難發現,無論是專家學者,還是云計算運營商或相關企業,其對云計算的看法基本上還是有一致的地方,只是在某些范圍的劃定上有所區別,這也是云計算的表現形式的多樣性所造成的。不同類型的云計算具有各自不同的特點,要想用一個統一的概念來概括所有種類的云計算的特點是比較困難且不太實際的。只有通過描述云計算中比較典型的特點以及商業模式的特殊性才能給出一個較為全面的概念。
二、云計算的特點
作為一種新穎的計算模式,云計算可擴展、有彈性、按需使用等特點都得到了業界和學術界的認可。
美國國家標準和技術研究院提出了云計算的五個基本特性。第一,按需使用的自助服務。客戶無需直接接觸每個云計算服務的開發商,就可以單方面自主獲取其所需的服務器、網絡存儲、計算能力等資源或根據自身情況進行組合。第二,廣泛的網絡訪問方式。客戶可以使用移動電話、個人計算機(Personal Computer,PC)、平板電腦或工作站點等各種不同類型的大/小客戶端通過網絡(主要是互聯網)隨時隨地訪問資源池。第三,資源池??蛻魺o需掌握或了解所提供資源的具體位置,就可以從資源池中按需獲得存儲以及網絡帶寬等計算資源,且資源池可以實現動態擴展以及分配。第四,快速地彈性使用。云計算所提供的計算能力可以被彈性地分配和釋放,此外還可以自動地根據需求快速伸縮,也就是說,計算能力的分配常常呈現出無限的狀態,并且可以在任何時間分配任何數量。第五,可評測的服務。云計算系統可以根據存儲、處理、帶寬和活躍用戶賬號的具體情況進行自動控制,以優化資源配置,同時還可以將這些數據提供給客戶,從而實現透明化的服務。
由幾大云計算商業巨頭IBM、Sun、VMware、思科等企業共同支持的《開放云計算宣言》(Open Cloud Manifesto),賦予了云計算幾個主要的特征:云計算提供了可動態擴展的計算資源,具有低成本、高性能的特點;云計算客戶(最終用戶、組織或IT員工)無需擔心基礎設施的建設與維護,可以最大限度地使用相關資源;云計算包含私有性(在某個組織的防火墻內部使用)和公有性(在互聯網上使用)兩種構架。
國內云計算方面的專家也給出了云計算的七大特性,該觀點也受到了國內業界的普遍認可。第一,超大規模。無論是IBM、Google、Amazon等跨國大型企業所提供的云計算,還是國內企業私有云計算,一般都擁有上百臺至上百萬臺服務器,規模巨大,同時也為客戶提供了前所未有的計算資源和能力。第二,虛擬化。虛擬化是支撐云計算的最重要的技術基石,使得用戶可以在任何地方通過各種終端接入“云”以獲取應用服務。第三,高可靠性。相比本地計算機,云計算采用了數據多副本容錯等措施,可靠性更高。第四,通用性。云計算的架構支持開發出各種各樣的應用,且一個云計算可以允許多個應用同時運行與操作。第五,高擴展性。高擴展性也是云計算服務的一大重要特征,能夠實現云計算資源的動態伸縮,以滿足客戶的不同等級和規格的需求。第六,按需服務。用戶可以像購買公共資源那樣從“云”這個龐大的資源池中購買自己所需的應用和資源。第七,極其廉價。云計算的自動化集中式管理省去了企業開發、管理以及維護數據中心的成本和精力,且可以通過動態配置和再配置大幅度提高資源的使用率。
IT業專家將云計算與網格計算(Grid Computing)、全局計算(Global Computing)以及互聯網計算(Internet Computing)等多種計算模式相比,也歸納出云計算的幾大特點。第一,客戶界面友好。使用云計算服務的客戶無需改變原有的工作習慣和工作環境,只需要在本地安裝比較小的云客戶端軟件即可,不會占用大量電腦空間和花費較大的安裝成本,云計算的界面也與客戶所在的地理位置無關,只要通過諸如Web服務框架和互聯網瀏覽器等成熟的界面訪問即可,真正實現隨時隨地、安全放心、快捷方便地享用云計算所提供的服務與資源。第二,按需配置服務資源。云計算服務是根據客戶需求或購買的權限提供相關資源和服務,客戶可以根據自身實際的需求選擇普通或個性化的計算環境,并獲得管理特權。第三,服務質量保證。云計算為客戶提供的計算環境都擁有服務質量保證,客戶可以放心使用,不必擔心底層基礎設施的建設與維護、備份與保存等問題。第四,獨立系統。云計算是一個獨立系統,向客戶實行透明化的管理模式,云計算中軟件、硬件和數據都可自動配置、安排和強化,并以單一平臺的形象呈現給客戶。第五,可擴展性和靈活性??蓴U展性和靈活性是云計算最重要的特征,也是云計算區別于其他效用計算的根本特征,云計算服務可以從地理位置、硬件性能、軟件配置等多個方面被擴展。云計算服務具有足夠的靈活性,可以滿足大量客戶的不同需求。
三、云計算的分類
云計算是一種通過網絡向客戶提供服務和資源的新型IT模式。通過這種方式,軟硬件資源和信息按需要彈性地提供給客戶。目前,幾乎所有的大型IT企業、互聯網提供商和電信運營商都涉足云計算產業,提供相關的云計算服務。
按照部署方式分類,云計算包括私有云、公有云、社區云、混合云。
(一)公有云
公有云(Public Cloud)又稱為公共云,即傳統主流意義上所描述的云計算服務。目前,大多數云計算企業主打的云計算服務就是公有云服務,用戶一般可以通過互聯網接入使用。此類云一般是面向一般大眾、行業組織、學術機構、政府機構等,由第三方機構負責資源調配。例如,Google App Engine,IBM Develop Cloud,以及Windows Azure都屬于公有云服務范疇。公有云的核心屬性是共享資源服務。
1.公有云的優勢
(1)靈活性。
公有云模式下,用戶幾乎可以立即配置和部署新的計算資源,可以將精力和注意力集中于更值得關注的方面,提高整體商業價值。在之后的運行中,用戶可以更加快捷方便地根據需求變化進行計算資源組合的更改。
(2)可擴展性。
當應用程序的使用或數據增長時,用戶可以輕松地根據需求進行計算資源的增加。同時,很多公有云服務商提供自動擴展功能,幫助用戶自動完成增添計算實例或存儲。
(3)高性能。
當企業中部分工作任務需要借助高性能計算(HPC)時,企業如果選擇在自己的數據中心安裝HPC系統,那將會是十分昂貴的。而公有云服務商可以輕松部署,并且在其數據中心安裝最新的應用與程序,為企業提供按需支付使用的服務。
(4)低成本。
由于規模原因,公有云數據中心可以取得大部分企業難以企及的經濟效益,公有云服務商的產品定價通常也處于一個相當低的水平。除了購買成本,通過公有云,用戶同樣也可以節省其他成本,如員工成本、硬件成本等。
2.公有云的劣勢
(1)安全問題。
當企業放棄他們的基礎設備并將其數據和信息存儲于云端時,很難保證這些數據和信息會得到足夠的保護。同時,公有云龐大的規模和涵蓋用戶的多樣性也讓其成為黑客們喜歡攻擊的目標。
(2)不可預測成本。
按使用付費的模式其實是把雙刃劍,一方面它確實降低了公有云的使用成本,但另一方面它也會帶來一些難以預料的花費。比如,在使用某些特定應用程序時,企業會發現支出相當驚人。
(二)私有云
私有云(Private Cloud)是指僅僅在一個企業或組織范圍內部所使用的“云”。使用私有云可以有效地控制其安全性和服務質量等。此類云一般由該企業或第三方機構或者雙方共同運營與管理。例如,支持SAP服務的中化云計算和快播私有云就是國內典型的私有云服務。私有云的核心屬性是專有資源。
1.私有云的優勢
(1)安全性。
通過內部的私有云,企業可以控制其中的任何設備,從而部署任何自己覺得合適的安全措施。
(2)法規遵從。
在私有云模式中,企業可以確保其數據存儲滿足任何相關法律法規。而且,企業能夠完全控制安全措施,必要的話可以將數據保留在一個特定的地理區域。
(3)定制化。
內部私有云還可以讓企業能夠精確地選擇進行自身程序應用和數據存儲的硬件,不過實際上往往由服務商來提供這些服務。
2.私有云的劣勢
(1)總體成本。
由于企業購買并管理自己的設備,因此私有云不會像公有云那樣成本較低。在部署私有云時,其員工成本和資本費用依然會很高。
(2)管理復雜性。
企業建立私有云時,需要自己進行私有云中的配置、部署、監控和設備保護等一系列工作。此外,企業還需要購買和運行用來管理、監控和保護云環境的軟件。而在公有云中,這些事務將由服務商來解決。
(3)有限靈活性、擴展性和實用性。
私有云的靈活性不高,如果某個項目所需的資源尚不屬于目前的私有云,那么獲取這些資源并將其增添到云中的工作可能會花費幾周甚至幾個月的時間。同樣,當需要滿足更多的需求時,擴展私有云的功能也會比較困難。私有云的實用性需要由基礎設施管理、連續性計劃及災難恢復計劃工作的成果決定。
(三)混合云
顧名思義,混合云(Hybrid Cloud)就是將單個或多個私有云和單個或多個公有云結合為一體的云環境。它既擁有公有云的功能,又可以滿足客戶基于安全和控制原因而對私有云的需求。混合云內部的各種云之間是保持相互獨立的,但同樣也可以實現各個云之間的數據和應用的相互交換。此類云一般由多個內外部的提供商負責管理與運營?;旌显频氖纠ㄟ\行在荷蘭iTricity的云計算中心。
混合云的獨特之處:混合云集成了公有云強大的計算能力和私有云的安全性等優勢,讓云平臺中的服務通過整合變為更具靈活性的解決方案?;旌显瓶梢酝瑫r解決公有云與私有云的不足,比如公有云的安全和可控制問題,私有云的性價比不高、彈性擴展不足的問題等。當用戶認為公有云不能夠滿足企業需求的時候,在公有云環境中可以構建私有云來實現混合云。
(四)社區云
社區云(Community Cloud)是面向具有共同需求(如隱私、安全和政策等方面)的兩個或多個組織內部的“云”,隸屬于公有云概念范疇以內。該類云一般由參與組織或第三方組織負責運營與管理。深圳大學城云計算服務平臺和阿里旗下的phpwind云就是典型的社區云,其中前者是國內首家社區云計算服務平臺,主要服務于深圳大學城園區內的各高校單位以及教師職工等。
社區云具有以下特點:區域型和行業性、有限的特色應用、資源的高效共享、社區內成員的高度參與性。
四、云計算的基本架構
云計算是一種商業計算模型,它將計算任務分布在大量計算機構成的資源池上,使用者能夠按需獲取計算力、存儲空間和信息服務。美國國家標準和技術研究院提出云計算的三個基本框架(服務模式),即基礎設施即服務(In frastructure as a Service,IaaS)、平臺即服務(Platform as a Service,PaaS)、軟件即服務(Software as a Service,SaaS)。
(一)基礎設施即服務
基礎設施即服務(IaaS)位于云計算三層架構的最底端,主要負責提供虛擬的服務器、存儲、帶寬和其他基本的計算資源,用以幫助用戶解決計算資源定制的問題。用戶可以根據自己的購買權限部署、運行操作系統和應用程序,而不需花時間和精力去管理、維護底層的硬件基礎設施。此外,用戶也可以根據自身需求去更改部分網絡組件。該層通常按照所消耗資源的成本進行收費。
1.IaaS的基本功能
雖然不同云服務提供商的基礎設施層在所提供的服務上有所差異,但是作為提供底層基礎IT資源的服務,該層一般都具有以下基本功能:
(1)資源抽象。
要搭建基礎設施層,我們首先面對的是大規模的硬件資源,比如通過網絡相互連接的服務器和存儲設備等。為了能夠實現高層次的資源管理邏輯,我們必須對資源進行抽象,也就是對硬件資源進行虛擬化。
虛擬化的過程,一方面需要屏蔽硬件產品上的差異,另一方面需要對每一種硬件資源提供統一的管理邏輯和接口。值得注意的是,根據基礎設施層實現的邏輯不同,同一類型的資源的不同虛擬化方法可能存在著非常大的差異。另外,根據業務邏輯和基礎設施層服務接口的需要,基礎設施層資源的抽象往往是具有多個層次的。例如,目前業界提出的資源模型中就出現了虛擬機(Vir tual Machine)、集群(Cluster)和云(Cloud)等若干層次分明的資源抽象。資源抽象為上層資源管理邏輯定義了被操作的對象和粒度,是構建基礎設施層的基礎。如何對不同品牌和型號的物理資源進行抽象,以一個全局統一的資源池的方式進行管理并呈現給客戶,是基礎設施層必須解決的一個核心問題。
(2)資源監控。
資源監控是負載管理的前提,是保證基礎設施層高效率工作的一個關鍵功能?;A設施層對不同類型的資源監控方法是不同的。對于CPU,我們通常監控的是其使用率;對于內存和其他存儲器,除了監控使用率,還會根據需要監控讀寫操作;對于網絡,則需要對其實時的輸入、輸出及路由狀態進行監控。
基礎設施層首先需要根據資源的抽象模型建立一個資源監控模型,用來描述資源監控的內容及其屬性。例如,Amazon的Cloud Watch是一個提供給用戶來監控Amazon EC2實例并負責負載均衡的Web服務。該服務定義了一組監控模型,使得用戶可以基于模型使用監控工具對EC2實例進行實時監測,并在此基礎上進行負載均衡決策。同時,資源監控還具有不同的粒度和抽象層次。典型的資源監控是對某個具體的解決方案整體進行監控。一個解決方案往往由多個虛擬資源組成,整體監控結果是對解決方案各個部分監控結果的整合。通過對結果進行分析,用戶可以更加直觀地監控到資源的使用情況及其對性能的影響,從而采取必要的措施對解決方案進行調整。
(3)負載管理。
在基礎設施層這樣大規模的資源集群環境中,任何時刻所有節點的負載都不是均勻的。如果節點的資源利用率合理,它們的負載即使在一定程度上不均勻,也不會導致嚴重的問題??墒?,當太多節點資源利用率過低或者節點之間負載差異過大時,會造成一系列突出的問題。如果太多節點負載較低,會造成資源上的浪費,就需要基礎設施層提供自動化的負載平衡機制,將負載進行合并,提高資源使用率并且關閉負載整合后閑置的資源;如果資源利用率差異過大,則會造成有些節點的負載過高,上層服務的性能受到影響,而另外一些節點的負載太低,資源沒能充分利用,這時就需要基礎設施層的自動化負載平衡機制將負載進行轉移,即負載過高節點轉移到負載過低節點,從而使得所有資源在整體負載和整體利用率上面趨于平衡。
(4)存儲管理。
在云計算環境中,軟件系統經常處理的數據分為很多不同的種類,如結構化的XML數據、非結構化的二進制數據及關系型的數據庫數據等。不同的基礎設計層提供的功能不同,會使得數據管理的實現有著非常大的差異。由于基礎設施層由數據中心大規模的服務器集群所組成,甚至由若干不同數據中心的服務器集群組成,因此數據的完整性、可靠性和可管理性是對基礎設施層數據管理的基本要求。
(5)資源部署。
資源部署指的是通過自動化部署流程將資源交付給上層應用的過程。在應用程序環境構建初期,當所有虛擬化的硬件資源環境都已經準備就緒時,就需要進行初始化過程的資源部署。另外,在應用運行過程中,往往會進行二次甚至多次資源部署,從而滿足上層應用對于基礎設施層中資源的需求,也就是運行過程中的動態部署。
動態部署有多種應用場景,一個典型的應用場景就是實現基礎設施層的動態可伸縮性,即云的應用可以在極短的時間內根據用戶需求和服務狀況的變化而調整。當用戶應用的工作負載過高時,用戶可以非常容易地將自己的服務實例從數個擴展到數千個,并自動獲得所需要的資源。通常,這種伸縮操作不但要在極短的時間內完成,還要保證操作復雜度不會隨著規模的增大而增大。另外一個典型場景是故障恢復和硬件維護。在云計算這樣由成千上萬服務器組成的大規模分布式系統中,硬件出現故障在所難免,在硬件維護時也需要將應用暫時移走,基礎設施層需要能夠復制該服務器的數據和運行環境,并通過動態資源部署在另外一個節點上建立起相同的環境,從而保證服務從故障中快速恢復過來。
資源部署的方法也會因構建基礎設施層所采用技術的不同而有著巨大的差異。使用服務器虛擬化技術構建的基礎設施層和未使用這些技術的傳統物理環境有很大的差別,前者的資源部署更多是虛擬機的部署和配置過程,而后者的資源部署則涉及從操作系統到上層應用整個軟件堆棧的自動化安裝和配置。相比之下,采用虛擬化技術的基礎設施層資源部署更容易實現。
(6)安全管理。
安全管理的目標是保證基礎設施資源被合法地訪問和使用。在個人電腦上,為了防止惡意程序通過網絡訪問計算機中的數據或者破壞計算機,一般都會安裝防火墻來阻止潛在的威脅。數據中心也設有專用防火墻,甚至通過規劃出隔離區來防止惡意程序入侵。云計算需要能夠提供可靠的安全防護機制來保證云中的數據是安全的,并提供安全審查機制保證對云中數據的操作都是經過授權的且是可被追蹤的。
云是一個更加開放的環境,用戶的程序可以被更容易地放在云中執行,這就意味著惡意代碼甚至病毒程序都可以從云內部破壞其他正常的程序。由于程序在運行和使用資源的方式上都和傳統的程序有著較大區別,因此如何在云計算環境里更好地控制代碼的行為或者識別惡意代碼和病毒代碼就成為管理員面臨的新挑戰。同時,在云計算環境中,數據都存儲在云中,如何通過安全策略阻止云的管理人員泄露數據也是一個需要著重考慮的問題。
(7)計費管理。
云計算倡導按使用量計費的模式。通過監控上層的使用情況,可以計算出在某個時間段內應用所消耗的存儲、網絡、內存等資源,并根據這些計算結果向用戶收費。對于一個需要傳輸海量數據的任務,通過網絡傳輸可能還不如將數據存儲在移動存儲設備中,再由快遞公司送到目的地更有效。因為大規模數據傳輸一方面占用大量時間,另一方面消耗大量網絡帶寬,數據傳輸費用相當可觀??梢?,在具體實施的時候,云計算提供商可以采用一些適當的替代方式來保證用戶業務的順利完成,同時降低用戶需要支付的費用。
2.IaaS的優勢
(1)低成本。
IaaS服務使用戶不需要購置硬件,省去了前期的資金投入;使用IaaS服務是按照實際使用量進行收費的,不會產生閑置浪費;IaaS可以滿足突發性需求,用戶不需要提前購買服務。
(2)免維護。
IT資源運行在IaaS服務中心,用戶不需要進行維護,維護工作由云計算服務商承擔。
(3)靈活遷移。
雖然很多IaaS服務平臺都存在一些私有功能,但是隨著云計算技術標準的誕生,IaaS的跨平臺性能得到提高。運行在IaaS上的應用將可以靈活地在IaaS服務平臺間進行遷移,不會被固定在某個企業的數據中心。
(4)伸縮性強。
IaaS只需幾分鐘就可以給用戶提供一個新的計算資源,而傳統的企業數據中心則需要數天甚至更長時間才能完成,并且IaaS可以根據用戶需求來調整資源的大小。
(5)支持應用廣泛。
IaaS主要以虛擬機的形式為用戶提供IT資源,可以支持各種類型的操作系統。因此,IaaS所支持應用的范圍非常廣泛。
(二)平臺即服務
平臺即服務(PaaS)位于云計算三層架構的最中間,主要是為用戶提供一個基于互聯網的應用開發環境(或平臺),以支持應用從創建到運行整個生命周期所需的各種軟硬件資源和工具。在PaaS層面,服務提供商提供的是經過封裝的IT能力,或者說是一些邏輯的資源,比如數據庫、文件系統和應用運行環境等。用戶可以在該云平臺中開發和部署新的應用程序,但應用程序的開發和部署必須遵守該平臺的規定和限制,如編程語言、編程框架等,通常按照用戶或登錄情況計費。
1.PaaS的核心功能
云計算平臺層與傳統的應用平臺在所提供的服務方面有很多相似之處。傳統的應用平臺,如本地Java環境或Net環境都定義了平臺的各項服務標準、元數據標準、應用模型標準等規范,并為遵循這些規范的應用提供了部署、運行和卸載等一系列流程的生命周期管理。云計算平臺層是對傳統應用平臺在理論與實踐上的一次升級,這種升級給應用的開發、運行和運營等各個方面都帶來了變革。平臺層需要具備一系列特定的基本功能,才能滿足這些變革的需求。
(1)開發測試環境。
平臺層對于在其上運行的應用來說,首先扮演的是開發平臺的角色。一個開發平臺需要清晰地定義應用模型,具備一套應用編程接口(API)代碼庫,提供必要的開發測試環境。
一個完備的應用模型包括開發應用的編程語言、應用的元數據模型以及應用的打包發布格式。一般情況下,平臺基于對傳統應用平臺的擴展而構建,因此應用可以使用的流行的編程語言進行開發,如Google App Engine目前支持Python和Java這兩種編程語言。即使平臺層具有特殊的實現架構,開發語言也應該在語法上與現有編程語言盡量相似,從而縮短開發人員的學習時間,如Salesforce.com使用的是自有編程語言Apex,該語言在語法和符號表示上與Java類似。元數據在應用與平臺層之間起著重要的接口作用,比如平臺層在部署應用的時候需要根據應用的元數據對其進行配置,在應用運行時也會根據元數據中的記錄為應用綁定平臺層服務。應用的打包格式需要指定應用的源代碼、可執行文件和其他不同格式的資源文件應該以何種方式進行組織,以及這些組織好的文件如何整合成一個文件包,從而以統一的方式發布到平臺層。
平臺層所提供的代碼庫及其API對于應用的開發至關重要。代碼庫是平臺層為在其上開發應用而提供的統一服務,如界面繪制、消息機制等。定義清晰、功能豐富的代碼庫能夠有效地減少重復工作,縮短開發周期。傳統的應用平臺通常提供自有的代碼庫,使用了這些代碼庫的應用只能在此平臺上運行。在云計算平臺中,某一云計算提供商的平臺層代碼庫可以包含由其他云計算提供商開發的第三方服務,這樣的組合模式對用戶的應用開發過程是透明的。假設某云平臺提供了自有服務A與B,同時該平臺也整合了來自第三方的服務D。那么,用戶看到的是該云平臺提供的A、B和D三種服務程序接口,可以無差異地使用它們??梢?,平臺層作為一個開發平臺應具有更好的開放性,為開發者提供更豐富的代碼庫和API。
平臺層需要為用戶提供應用的開發和測試環境,通常,這樣的環境有兩種實現方式。第一種方式是通過網絡向軟件開發者提供在線的應用開發和測試環境,即一切的開發測試任務都在服務器端完成。這樣做的好處是開發人員不需要安裝和配置開發軟件,但需要平臺層提供良好的開發體驗,而且要求開發人員所在的網絡穩定且有足夠的帶寬。第二種方式是提供離線的集成開發環境,為開發人員提供與真實運行環境非常類似的本地測試環境,支持開發人員在本地進行開發與測試。這種離線開發的模式更符合大多數開發人員的經驗,也更容易獲得良好的開發體驗。在開發測試結束以后,開發人員需要將應用上傳到云中,讓它運行在平臺層上。
(2)運行環境。
完成開發測試工作以后,開發人員需要做的就是對應用進行部署上線。應用上線首先要將打包好的應用上傳到遠程的云平臺上。然后,云平臺通過解析元數據信息對應用進行配置,使應用能夠正常訪問其所依賴的平臺服務。平臺層的不同用戶之間是完全獨立的,不同的開發人員在創建應用的時候不可能對彼此應用的配置及其如何使用平臺層進行提前約定,配置沖突可能導致應用不能正常運行。因此,在配置過程中需要加入必要的驗證步驟,以避免沖突的發生。配置完成之后,將應用激活即可使其進入運行狀態。
以上云應用的部署激活是平臺層的基本功能。此外,該層還需要具備更多的高級功能來充分利用基礎設施層提供的資源,通過網絡交付給客戶高性能、安全可靠的應用。為此,平臺層與傳統的應用運行環境相比,必須具備三個重要的特性:隔離性、可伸縮性和資源的可復用性。
隔離性具有兩個方面的含義,即應用間隔離和用戶間隔離。應用間隔離是指不同應用之間在運行時不會相互干擾,包括對業務和數據的處理等各個方面。應用間隔離保證應用都在一個隔離的工作區內運行,平臺層需要提供安全的管理機制對隔離的工作區進行訪問控制。用戶間隔離是指同一解決方案中不同用戶之間的相互隔離,比如對不同用戶的業務數據相互隔離,或者每個用戶都可以對解決方案進行自定義配置而不影響其他用戶的配置。
可伸縮性是指平臺層分配給應用的處理、存儲和帶寬能夠根據工作負載或業務規模的變化而變化,即工作負載或業務規模增大時,平臺層分配給應用的處理能力能夠增強;當工作負載或者業務規模減小時,平臺層分配給應用的處理能力可以相應減弱。比如,當應用需要處理和保存的數據量不斷增加時,平臺層能夠按需增強數據庫的存儲能力,從而滿足應用對數據存儲的需求??缮炜s性對于保障應用性能、避免資源浪費都是十分重要的。
資源的可復用性是指平臺層能夠容納數量眾多的不同應用的通用平臺,滿足應用的擴展性。當用戶應用業務量提高、需要更多的資源時,可以向平臺層提出請求,讓平臺層為其分配更多的資源。當然,這并不是說平臺層所擁有的資源是無限的,而是通過統計復用的辦法使得資源足夠充裕,能夠保證應用在不同負載下可靠運行,用戶可以隨時按需索取。這就需要平臺層所能使用的資源數量本身是充足的,并要求平臺層能夠高效利用各種資源,對不同應用所占有的資源根據其工作負載變化來進行實時動態的調整。
(3)運維環境。
隨著業務和客戶需求的變化,開發人員往往需要改變現有系統從而產生新的應用版本。云計算環境簡化了開發人員對應用的升級任務,因為平臺層提供了升級流程自動化向導。為了提供這一功能,云平臺要定義出應用的升級補丁模型及一套內部的應用自動化升級流程。當應用需要更新時,開發人員需要按照平臺層定義的升級補丁模型制作應用升級補丁,使用平臺層提供的應用升級腳本上傳升級補丁、提交升級請求。平臺層在接收到升級請求后,解析升級補丁并執行自動化的升級過程。應用的升級過程需要考慮兩個重要問題:第一,升級操作的類型對應用可用性的影響,即在升級過程中客戶是否還可以使用老版本的應用處理業務;第二,升級失敗時如何恢復,即如何回應升級操作對現有版本應用的影響。
在應用運行過程中,平臺層需要對應用進行監控。一方面,用戶通常需要實時了解應用的運行狀態,比如應用當前的工作負載及是否發生了錯誤或出現異常狀況等。另一方面,平臺層需要監控解決方案在某段時間內所消耗的系統資源,不同目的的監控所依賴的技術是不同的。對于應用運行狀態的監控,平臺層可以直接監測到響應時間、吞吐量和工作負載等實時信息,從而判斷應用的運行狀態。比如,可以通過網絡監控來跟蹤不同時間段內應用所處理的請求量,并由此來繪制工作負載變化曲線,根據相應的請求響應時間來評估應用的性能。
對于資源消耗的監控,可以通過調用基礎設施層服務來查詢應用的資源消耗狀態,這是因為平臺層為應用分配的資源都是通過基礎設施層獲得的。比如通過使用基礎設施層服務為某應用進行初次存儲分配。在運行時,該應用同樣通過調用基礎設施層服務來存儲數據。
這樣,基礎設施層記錄了所有與該應用存儲相關的細節,以供平臺層查詢。
用戶所需的應用不可能是一成不變的,市場會隨著時間推移不斷改變,總會有一些新的應用出現,也會有老的應用被淘汰。因此,平臺層需要提供卸載功能幫助用戶淘汰過時的應用。平臺層除了需要在卸載過程中刪除應用程序,還需要合理地處理該應用所產生的業務數據。通常,平臺層可以按照用戶的需求選擇不同的處理策略,如直接刪除或備份后刪除等。平臺層需要明確應用卸載操作對用戶業務和數據的影響,在必要的情況下與用戶簽署書面協議,對卸載操作的功能范圍和工作方式作出清楚說明,避免造成業務上的損失和不必要的糾紛。
平臺層運維環境應該具備統計計費功能。這個計費功能包括兩方面:第一,根據應用的資源使用情況,對使用了云平臺資源的ISV計費,這一點在前面基礎設施層的資源監控功能中有所提及;第二,根據應用的訪問情況,幫助ISV對最終用戶進行計費。通常,平臺層會提供諸如用戶注冊登錄、ID管理等平臺層服務,通過整合這些服務,ISV可以便捷地獲取最終用戶對應用的使用情況,并在這些信息的基礎上加入自己的業務邏輯,對最終用戶進行細粒度的計費管理。
2.PaaS的優勢
一般來說,與現有的基于本地的開發和部署環境相比,PaaS平臺主要在下面這六方面有非常大的優勢:
(1)友好的開發環境。
PaaS平臺通過提供軟件開發工具包(Software Development Kit,SDK)和集成開發環境(Integrated Development Environment,IDE)等工具來讓用戶不僅能在本地方便地進行應用的開發和測試,而且能夠進行遠程部署。
(2)豐富的服務。
PaaS平臺會以API的形式將各種各樣的服務提供給上層的應用。系統軟件(比如數據庫系統)、通用中間件(比如認證系統,高可靠消息隊列系統)、行業中間件(比如OA流程,財務管理等)都可以作為服務提供給應用開發者使用。
(3)精細的管理和監控。
PaaS能夠提供應用層的管理和監控,能夠觀察應用運行的情況和具體數值(如吞吐量和響應時間等)來更好地衡量應用的運行狀態,還能夠通過精確計量應用所消耗的資源進行計費。
(4)伸縮性強。
PaaS平臺會自動調整資源來幫助運行于其上的應用更好地應對突發流量。當應用負載突然提升的時候,平臺會在很短時間(1分鐘左右)內自動增加相應的資源來分擔負載。當負載高峰期過去以后,平臺會自動回收多余的資源,避免資源浪費。
(5)多租戶(Multi-Tenant)機制。
PaaS平臺具備多租戶機制,能讓一個單獨的應用實例為多個組織服務,而且能保持良好的隔離性和安全性。通過這種機制,不僅能更經濟地支撐龐大的用戶規模,而且能夠提供一定的可定制性以滿足用戶的特殊需求。關于多租戶將在之后詳細介紹。
(6)整合率和經濟性。
PaaS平臺的整合率是非常高的,比如PaaS的代表Google App Engine能在一臺服務器上承載成千上萬的應用。而普通的IaaS平臺的整合率最多也不會超過100,而且普遍在10左右,使得IaaS的經濟性不如PaaS。
(三)軟件即服務
軟件即服務(SaaS)是最常見的云計算服務,位于云計算三層架構的頂端。軟件即服務是將軟件服務通過網絡(主要是互聯網)提供給客戶,客戶只需通過瀏覽器或其他符合要求的設備接入使用即可。SaaS所提供的軟件服務都是由服務提供商或運營商負責維護和管理,客戶根據自身需求進行租用,從而消除了客戶購買、構建和維護基礎設施和應用程序的過程。SaaS的概念早已有之,是一種創新的軟件應用模式。
1.SaaS的特性
與傳統軟件相比,SaaS服務依托于軟件和互聯網,不論從技術角度還是商務角度都擁有與傳統軟件不同的特性,具體表現在:
(1)互聯網特性。
一方面,SaaS服務通過互聯網瀏覽器或Web Services/Web 2.0程序連接的形式為用戶提供服務,使得SaaS應用具備了典型互聯網技術特點;另一方面,SaaS極大地縮短了用戶與SaaS提供商之間的時空距離,從而使得SaaS服務的營銷、交付與傳統軟件相比有著很大的不同。
(2)多租戶特性。
SaaS服務通?;谝惶讟藴受浖到y為成百上千的不同租戶提供服務。這要求SaaS服務能夠支持不同租戶之間數據和配置的隔離,從而保證每個租戶數據的安全與隱私,以及用戶對諸如界面、業務邏輯、數據結構等的個性化需求。由于SaaS同時支持多個租戶,每個租戶又有很多用戶,這對支撐軟件的基礎設施平臺的性能、穩定性、擴展性提出很大挑戰。
(3)服務特性。
SaaS使得軟件以互聯網為載體的服務形式被客戶使用,所以服務合約的簽訂、服務使用的計量、在線服務質量的保證、服務費用的收取等問題都必須考慮。而這些問題通常是傳統軟件沒有考慮到的。
(4)可擴展特性。
可擴展性意味著最大限度地提高系統并發性,更有效地使用系統資源。
(5)可配置特性。
SaaS通過不同的配置滿足不同用戶的需求,而不需要為每個用戶進行定制,以降低定制開發的成本。但是,軟件的部署架構沒有太大的變化,依然為每個客戶獨立部署一個運行實例。只是每個運行實例運行的是同一段代碼,通過配置的不同來滿足不同客戶的個性化需求。在SaaS模式的使用環境中,一般使用元數據(Metadata)來為其終端用戶配置系統的界面以及相關的交互行為。
(6)隨需應變特性。
傳統應用程序被封裝起來或在外部被主程序控制,無法靈活地滿足新的需求。而SaaS模式的應用程序則是隨需應變的,應用程序的使用將是動態的,提供了集成的、可視化的或自動化的特性。隨需應變的應用程序有助于幫助客戶應對新時代不斷的需求變化、殘酷的市場競爭、金融壓力以及不可預測的威脅及風險等帶來的挑戰。
2.多租戶SaaS架構
(1)多租戶架構。
首先,我們需要厘清三個概念,即多用戶、單租戶、多租戶的概念。
多用戶,即不同的用戶擁有不同的訪問權限,但是多個用戶共享同一個實例。
單租戶,又被稱作多實例(Multi-instance),指的是為每個用戶單獨創建各自的軟件應用和支撐環境。通過單租戶的模式,每個用戶都有一份分別放在獨立的服務器上的數據庫和操作系統,或者使用強的安全措施進行隔離的虛擬網絡環境中。
多租戶,也稱為多重租賃技術,是一種軟件架構技術,它是在探討如何實現于多用戶的環境下共用相同的系統或程序組件,并且仍可確保各用戶間數據的隔離性。
多租戶是實現SaaS的核心技術之一。通常,應用程序支持多個用戶,但是前提是它認為所有用戶都來自同一個組織。這種模型適用于未出現SaaS的時代,組織會購買一個軟件應用程序供自己的成員使用。但是在SaaS和云的世界中,許多組織都將使用同一個應用程序;它們必須能夠允許自己的用戶訪問應用程序,但是應用程序只允許每個組織自己的成員訪問其組織的數據。從架構層面來說,SaaS和傳統技術的重要區別就是多租戶模式。
多租戶是決定SaaS效率的關鍵因素。它將多種業務整合到一起,降低了面向單個租戶的運營維護成本,實現了SaaS應用的規模經濟,從而使得整個運維成本大大減少,同時使收益最大化。多租戶實現了SaaS應用的資源共享,充分利用了硬件、數據庫等資源,使服務供應商能夠在同一時間內支持多個用戶,并在應用后端使用可擴展的方式來支持客戶端訪問以降低成本。而對用戶而言,他們是基于租戶隔離的,同時能夠根據自身的獨特需求實現定制。
在一個多租戶的結構下,應用都是運行在同樣或者是一組服務器下,這種結構被稱為“單實例”架構(Single Instance)、單實例多租戶。多個租戶的數據保存在相同位置,依靠對數據庫分區來實現隔離操作。既然用戶都在運行相同的應用實例,服務運行在服務供應商的服務器上,用戶無法去進行定制化的操作。因此,多租戶比較適合通用類需求的客戶,即不需要對主線功能進行調整或者重新配置的客戶。
(2)多租戶的實現方案。
多租戶就是說多個租戶共用一個實例,租戶的數據既有隔離又有共享,說到底就是如何解決數據存儲的問題。目前,SaaS多租戶在數據存儲上存在三種主要的方案,分別是完全隔離、部分共享以及完全共享。下面就分別對這三種方案進行介紹。
①完全隔離。
每個租戶使用單獨的數據庫。這是第一種方案,即一個租戶(Tenant)有一個數據庫(Database)。這種方案的用戶數據隔離級別最高,安全性最好,但成本也高。
優點:為不同的租戶提供獨立的數據庫,有助于簡化數據模型的擴展設計,滿足不同租戶的獨特需求;如果出現故障,恢復數據比較簡單。
缺點:增加了數據庫的安裝數量,隨之帶來維護成本和購置成本的增加。
這種方案與傳統的一個客戶、一套數據、一套部署類似,差別只在于軟件統一部署在運營商那里。如果面對的是銀行、醫院等需要非常高數據隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商來說是無法承受的。
②部分共享。
共享數據庫,但是使用單獨的模式。這是第二種方案,即多個或所有租戶共享一個數據庫,但每個租戶都有一個模式(Schema)。
優點:為安全性要求較高的租戶提供了一定程度的邏輯數據隔離,并不是完全隔離;每個數據庫可以支持更多的租戶數量。
缺點:如果出現故障,數據恢復比較困難,因為恢復數據庫將牽扯到其他租戶的數據。如果需要跨租戶統計數據,存在一定困難。
③完全共享。
使用相同的數據庫和相同的模式。這是第三種方案,即租戶共享同一個數據庫、同一個模式,但在表中通過tenantID來區分租戶的數據。也就是說每插入一條數據時都需要有一個客戶的標識,這樣才能在同一張表中區分出不同客戶的數據。這是共享程度最高、隔離級別最低的模式。
優點:維護和購置成本最低,允許每個數據庫支持的租戶數量最多。
缺點:隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;數據備份和恢復最困難,需要逐條逐表備份和還原。
如果希望以最少的服務器為最多的租戶提供服務,并且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。
- 計算機綜合設計實驗指導
- Building Computer Vision Projects with OpenCV 4 and C++
- 數據庫原理及應用教程(第4版)(微課版)
- 算法競賽入門經典:習題與解答
- Hands-On Machine Learning with Microsoft Excel 2019
- 數據庫應用基礎教程(Visual FoxPro 9.0)
- Enterprise Integration with WSO2 ESB
- Sybase數據庫在UNIX、Windows上的實施和管理
- OracleDBA實戰攻略:運維管理、診斷優化、高可用與最佳實踐
- Hands-On Mathematics for Deep Learning
- SQL Server 2012數據庫管理教程
- Oracle數據庫管理、開發與實踐
- 機器學習:實用案例解析
- Tableau商業分析從新手到高手(視頻版)
- Configuration Management with Chef-Solo