0 引言
Web應(yīng)用(Web Application ,Web App)是基于萬維網(wǎng)的一種延伸,既包括以瀏覽器為入口的站點(diǎn),也包括一些更適應(yīng)移動終端的Native App。在普通計(jì)算機(jī)上以瀏覽器訪問Web資源為主,根據(jù)WordWebSize官網(wǎng)對Web網(wǎng)頁的實(shí)時統(tǒng)計(jì),截至2013年6月27日,Web網(wǎng)頁數(shù)量已超過4506億頁 。而各類移動終端上,瀏覽器啟動次數(shù)逐漸減少,因?yàn)镹ative App更適用于移動互聯(lián)網(wǎng),很多Native App(如微博、微信、淘寶等)已內(nèi)置瀏覽器。根據(jù)百度2013年一季度的移動互聯(lián)網(wǎng)發(fā)展趨勢報(bào)告,截至2013年3月,移動互聯(lián)網(wǎng)的人均上網(wǎng)時長已超越PC互聯(lián)網(wǎng)的29%。
Web應(yīng)用的特點(diǎn)是基于Http等協(xié)議以統(tǒng)一資源標(biāo)識符的形式對資源進(jìn)行訪問,資源存放在互聯(lián)網(wǎng)中的某一服務(wù)器(物理的或虛擬的)中,但其中存在以下兩個問題:①負(fù)載(訪問量)周期性變化,在部分時間需要大量的計(jì)算資源(網(wǎng)絡(luò)帶寬、數(shù)據(jù)處理、存儲等) ,如新學(xué)期學(xué)生選課、購物網(wǎng)促銷等,而其它時間需要的計(jì)算資源要小得多甚至零負(fù)載;②易受突發(fā)事件影響,如美女畢業(yè)照致人大網(wǎng)絡(luò)癱瘓等。這些問題是Web應(yīng)用與生俱來的缺陷,目前主流的解決方法包括基于分層的Web架構(gòu)、分布式集群、緩存技術(shù)、負(fù)載均衡等。這些方法能在一定程度上解決Web應(yīng)用的負(fù)載問題,但存在管理成本高、可伸縮性有限、浪費(fèi)計(jì)算資源等問題。
本文通過分析傳統(tǒng)的分層架構(gòu)集群存在的問題,并針對問題設(shè)計(jì)了SPI云架構(gòu)方案。結(jié)合開源Openstack、Cloudify平臺,設(shè)計(jì)并實(shí)現(xiàn)了“Openstack+Cloudify+WebApp”的SPI方案,該方案具有應(yīng)用安全、彈性計(jì)算、高性價比等特點(diǎn)。
1 傳統(tǒng)分層架構(gòu)集群
大多數(shù)現(xiàn)代企業(yè)級應(yīng)用的構(gòu)建分為3個或4個物理層。第一層是數(shù)據(jù)層,一般采用關(guān)系型數(shù)據(jù)庫實(shí)現(xiàn)。第二層是業(yè)務(wù)邏輯層,實(shí)現(xiàn)應(yīng)用核心的業(yè)務(wù)邏輯功能。第三層是Web表示層,實(shí)現(xiàn)應(yīng)用請求響應(yīng)的用戶結(jié)果呈現(xiàn)(比如HTML、JSON、XML等) 。通常在Web表示層之上還有負(fù)載均衡。許多應(yīng)用系統(tǒng)也使用一個消息傳遞層,基于可靠的異步通信和事件驅(qū)動的處理模式,業(yè)務(wù)邏輯服務(wù)消費(fèi)消息層到達(dá)的消息,并處理消息映射的工作。為了實(shí)現(xiàn)高可用性和更高的處理能力,每個層都使用集群配置。3個或4個不同的集群,由網(wǎng)絡(luò)通信組成一個整體,形成企業(yè)級應(yīng)用,如圖1所示。
圖1 分層架構(gòu)的集群
分層架構(gòu)的集群在一定程度上增加了Web應(yīng)用的處理能力,但同時存在以下問題:
(1)管理存在困難。每一層是一個不同的集群,需要不同的特定技術(shù)支持,會造成如下問題:①每一層集群需購買相關(guān)組件并雇傭?qū)I(yè)人員安裝維護(hù),帶來昂貴成本;②組件繁多帶來跟蹤和監(jiān)控上的困難;③業(yè)務(wù)處理需要多個組件動態(tài)組合,若產(chǎn)生故障難以維護(hù);④應(yīng)用多個分層協(xié)同工作,分層部署困難。
(2)性能方面受到一定限制。一項(xiàng)完整的業(yè)務(wù)處理需要多個層共同協(xié)作,而每層間只能通過網(wǎng)絡(luò)傳輸完成,使得每一項(xiàng)業(yè)務(wù)處理的時延受到限制。同時,隨著集群的擴(kuò)展,計(jì)算能力增加,但網(wǎng)絡(luò)帶寬存在瓶頸,整個系統(tǒng)吞吐受限。
上述延遲和可伸縮性受限問題,一般通過建立緩存機(jī)制解決。在數(shù)據(jù)庫層增加基于內(nèi)存技術(shù)的緩存層,適用于讀操作次數(shù)遠(yuǎn)大于寫操作的情況。同時可在Web表示層建立基于資源分類的緩存,此方法特別適用于靜態(tài)資源的緩存,可減少請求處理的路徑。增加緩存層同樣會付出一定代價。增加新的層,需要為新的技術(shù)和管理付費(fèi),同時緩存技術(shù)對于寫操作多的場景并不適用。
(3)造成計(jì)算資源浪費(fèi)。一個Web應(yīng)用系統(tǒng)為了解決系統(tǒng)負(fù)載高峰,對集群節(jié)點(diǎn)進(jìn)行擴(kuò)展,而在運(yùn)營中為了應(yīng)對突發(fā)事件的影響,需開啟更多節(jié)點(diǎn)以防止系統(tǒng)宕機(jī),造成大量的計(jì)算資源浪費(fèi)。
2 SPI云計(jì)算架構(gòu)
云計(jì)算有著較多定義,其中美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)的定義是云計(jì)算定義的權(quán)威。云計(jì)算是一種無所不在、方便、按需通過網(wǎng)絡(luò)使用可配置計(jì)算資源共享池的計(jì)算模型。計(jì)算資源包括網(wǎng)絡(luò)、服務(wù)器、存儲、應(yīng)用程序等。計(jì)算資源共享池可以最小化平臺的服務(wù)管理、服務(wù)交互,并且迅速地提供或釋放計(jì)算資源。云計(jì)算具有按需自助服務(wù)、網(wǎng)絡(luò)獲取、資源池化、快速彈性、可計(jì)量服務(wù)五個基本特征。
云計(jì)算可分為軟件即服務(wù)(Software as a Service,SaaS)、平臺即服務(wù)(Platform as a Service,PaaS)、基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service,IaaS)三類服務(wù)模型,也被簡稱為SPI模型,如圖2所示。
圖2 SPI模型棧
不同企業(yè)對SPI三層模型的劃分略有差別,但大體相同。圖2中,IaaS層對物理服務(wù)器集群進(jìn)行統(tǒng)一管理,形成集群系統(tǒng),向外提供各種帶有操作系統(tǒng)的虛擬主機(jī)服務(wù)。這些虛擬主機(jī)的內(nèi)存、硬盤、網(wǎng)絡(luò)均是可配置的。PaaS層通過IaaS層提供的接口使用虛擬主機(jī),并向用戶提供應(yīng)用程序的運(yùn)行環(huán)境服務(wù),如數(shù)據(jù)庫服務(wù)。SaaS層利用PaaS層提供的運(yùn)行環(huán)境運(yùn)行相關(guān)應(yīng)用,用戶可以在線使用。
在SPI模型棧中部署的應(yīng)用有分層架構(gòu)集群中應(yīng)用所不具備的優(yōu)勢,具體有以下幾方面:① SPI中運(yùn)行的應(yīng)用可根據(jù)應(yīng)用負(fù)載或訪問量動態(tài)伸縮。假設(shè)應(yīng)用A運(yùn)行在SPI中,應(yīng)用A就運(yùn)行在Tomcat容器并使用MySQL數(shù)據(jù)庫。當(dāng)A負(fù)載量過大時,可向PaaS申請更多的MySQL服務(wù)實(shí)例和Tomcat實(shí)例。而PaaS層則向IaaS層申請相應(yīng)操作系統(tǒng)的虛擬主機(jī)以運(yùn)行MySQL與Tomcat;當(dāng)應(yīng)用A的負(fù)載遠(yuǎn)小于其服務(wù)的實(shí)例時,PaaS層即進(jìn)行空閑實(shí)例回收,IaaS層銷毀相應(yīng)的虛擬機(jī);② SPI中可同時運(yùn)行多個應(yīng)用,實(shí)現(xiàn)應(yīng)用共享計(jì)算資源。由于PaaS層的實(shí)例是無狀態(tài)或數(shù)據(jù)同步的,可隨時增加與銷毀,因此可以將應(yīng)用間的計(jì)算能力共享,以平衡多個應(yīng)用的同時運(yùn)行。另外,由于所有的運(yùn)行環(huán)境運(yùn)行在虛擬機(jī)中,形成網(wǎng)絡(luò)、系統(tǒng)、主機(jī)的隔離,保證了多個應(yīng)用間的隔離與安全;③ 成本降低。公有云(如GAE、SAE等)平臺按需付費(fèi),相比自己購置或租用同等計(jì)算能力的服務(wù)器更加實(shí)惠。自建私有云有著大量的開源云平臺,如Openstack、CloudStack等IaaS平臺,Cloudify、CloudFoundry等PaaS平臺。IaaS與PaaS平臺間耦合度低,能夠較好地相互組合使用,而且這些平臺均有較為活躍的社區(qū)進(jìn)行技術(shù)討論與支持。
3 “Openstack+Cloudify+WebApp”SPI設(shè)計(jì)方案
3.1 Openstack計(jì)算資源管理
OpenStack基于一系列開源技術(shù),提供了大量可伸縮的云計(jì)算服務(wù)軟件。公司、服務(wù)提供商、增值代理商、中小型企業(yè)、研究人員和全球數(shù)據(jù)中心均可利用Openstack部署大規(guī)模的私有云或公共云。
Openstack是SPI架構(gòu)的基礎(chǔ),通過網(wǎng)絡(luò)虛擬化、存儲虛擬化、計(jì)算能力虛擬化及相關(guān)管理與調(diào)度技術(shù),提供虛擬主機(jī)服務(wù)。OpenStack 包括7個核心組件:計(jì)算(Compute)、對象存儲(Object Storage)、身份(Identity) 、儀表板(Dashboard)、塊存儲(Block Storage)、網(wǎng)絡(luò)(Network)和鏡像(Image Service)。
如圖3所示,Dashboard為其他OpenStack服務(wù)組件提供了一個web前端。Identity實(shí)現(xiàn)所有服務(wù)的身份驗(yàn)證。Compute是整個Openstack平臺的核心組件,提供虛擬服務(wù)器,同時依賴Network、Block Storage、Image三個組件,分別為虛擬服務(wù)器提供虛擬網(wǎng)絡(luò)、虛擬存儲卷以及鏡像服務(wù)。Image服務(wù)為計(jì)算節(jié)點(diǎn)提供存儲、檢索鏡像及相關(guān)的元數(shù)據(jù)信息。而鏡像及相關(guān)元數(shù)據(jù)信息存儲在Object Storage中,也可以存放在本地文件系統(tǒng)、網(wǎng)絡(luò)文件系統(tǒng)中等。
圖3 openstack的七大組件
如圖4所示,本文將Openstack部署在三臺服務(wù)器中,一臺作為控制節(jié)點(diǎn),兩臺作為計(jì)算節(jié)點(diǎn)。由于實(shí)驗(yàn)平臺硬件資源有限,取消了對實(shí)驗(yàn)非必須的一些組件(如swift)的部署,并將與計(jì)算(提供虛擬機(jī))無關(guān)的組件統(tǒng)一安裝到控制節(jié)點(diǎn)。控制節(jié)點(diǎn)有以下組件:數(shù)據(jù)庫(MySQL)、消息隊(duì)列(RabbitMQ)、身份認(rèn)證(keystone)、鏡像服務(wù)(glance)、網(wǎng)絡(luò)(nova‐network)、服務(wù)API(novaapi/glance‐api)、計(jì)算調(diào)度(nova‐scheduler)、控制臺服務(wù)(nova‐consoleauth)、遠(yuǎn)程訪問(nova‐novncproxy);計(jì)算節(jié)點(diǎn)有虛擬化(KVM)、計(jì)算(nova‐compute)組件,其中虛擬化為計(jì)算提供基礎(chǔ)服務(wù)。
三臺服務(wù)器由兩臺交換機(jī)組成外網(wǎng)與內(nèi)網(wǎng),10.10.4.0/24作為外部網(wǎng)絡(luò),各節(jié)點(diǎn)通過此交換機(jī)與外部通信,外部通過此網(wǎng)絡(luò)獲取計(jì)算服務(wù)資源;192.168.1.0/24為內(nèi)部網(wǎng)絡(luò),用于組件之間的通信和虛擬機(jī)之間私有信息的傳遞。計(jì)算節(jié)點(diǎn)內(nèi)虛擬機(jī)的網(wǎng)絡(luò)采用FlatDHCP 模式,在該模式下,控制節(jié)點(diǎn)提供dhcp 和nat 服務(wù)形成虛擬網(wǎng)絡(luò)的網(wǎng)關(guān),平臺內(nèi)所有虛擬機(jī)向控制節(jié)點(diǎn)請求虛擬IP ,組成虛擬內(nèi)部網(wǎng)絡(luò)。虛擬IP 網(wǎng)段為192.168.100.0/24。為了保證虛擬機(jī)能夠?yàn)橥獠烤W(wǎng)絡(luò)提供計(jì)算服務(wù),需要提供外部訪問方法,一種為遠(yuǎn)程控制(noVNC) ,另一種為直接分配外部IP(浮動IP)。遠(yuǎn)程控制由控制節(jié)點(diǎn)中的遠(yuǎn)程控制組件提供相應(yīng)服務(wù),但并不能滿足Web應(yīng)用的需求,因此建立了浮動IP表。將空閑的外部IP(或IP 段)裝入表中,根據(jù)用戶需求由網(wǎng)絡(luò)組件控制虛擬機(jī)的浮動IP分配。
通過上述部署,三臺物理服務(wù)器統(tǒng)一對外提供計(jì)算資源服務(wù)。通過Dashboard或Shell命令配置一些基本信息,為Cloudiy平臺建立基礎(chǔ)(安全認(rèn)證、操作系統(tǒng)、虛擬機(jī)配置、總配額等)。
圖4 openstack部署拓?fù)?/p>
3.2 基于Cloudify的平臺服務(wù)
Cloudify設(shè)計(jì)為任何應(yīng)用可部署到任何云中,使得企業(yè)、ISVs 、托管服務(wù)供應(yīng)商們都因?yàn)樵频淖詣踊蛷椥怨芾矶杆佾@益。Cloudify通過對應(yīng)用部署和運(yùn)行進(jìn)行的額外組織,幫助應(yīng)用管理(Application onborading )和自動化最大化。Cloudify開發(fā)運(yùn)營的途徑是將基礎(chǔ)設(shè)施作為代碼,允許描述部署與部署后的步驟。
如圖5所示,Cloudify工作在Openstack的基礎(chǔ)上,通過Cloud Driver操作Openstack的API,實(shí)現(xiàn)權(quán)限驗(yàn)證、開啟虛擬機(jī)、關(guān)閉虛擬機(jī)、連接虛擬機(jī)、向虛擬機(jī)傳文件、部署應(yīng)用程序等功能。
圖5 Cloudify在Openstack之上工作
Cloudify Cloud Driver是基于云環(huán)境的Cloufify抽象層,為Cloudify提供云基礎(chǔ)設(shè)施接口,為Cloudify運(yùn)行應(yīng)用按需提供計(jì)算資源。在Cloudify需配置一些必要信息以操作Openstack,作為Cloud Driver工作的基礎(chǔ)。具體配置如表1。
通過上述配置,Cloudify通過Cloud Driver訪問Openstack,啟動一臺(本文實(shí)驗(yàn)啟動了一臺,可以是多臺)虛擬機(jī)并上傳腳本文件、a.pem文件、Cloudify運(yùn)行組件程序等。當(dāng)以上文件上傳成功后,Cloudify在該虛擬機(jī)中通過腳本文件下載并安裝JDK、啟動Management組件。由此Cloudify進(jìn)入了正常工作階段,可以在任一地點(diǎn)訪問Cloudify平臺。Cloudify提供了REST API和CloudShell客戶端兩種訪問方式。
表1 Cloud Driver依賴的配置
3.3 WebApp自部署與自管理
WebApp的運(yùn)行依賴于數(shù)據(jù)庫和Web容器兩種平臺,因此Cloudify需要為WebApp提供這些平臺。而無論是數(shù)據(jù)庫還是容器,相對Cloudify而言均可稱之為一個實(shí)例(如一個或多個MySql實(shí)例、Tomcat實(shí)例等)。Cloudify通過用戶上傳Recipe的方式對WebApp進(jìn)行自部署與自管理。
Recipe具有一個龐大的配置體系,可配置應(yīng)用的部署過程、應(yīng)用生命周期中的事件響應(yīng)。部署過程包括在WebApp部署前先部署數(shù)據(jù)庫或數(shù)據(jù)庫集群、安裝JDK及容器等工作。應(yīng)用生命周期事件響應(yīng)包括每個實(shí)例的生命周期事件(如啟動、初始化、銷毀等) ,同時也包括每個實(shí)例工作狀態(tài)的變化(如訪問用戶數(shù)變化、網(wǎng)絡(luò)吞吐流量變化等) 。通過Recipe配置,該應(yīng)用在用戶數(shù)量或網(wǎng)絡(luò)吞吐量超過一個實(shí)例負(fù)載時啟動新的實(shí)例,以動態(tài)減少實(shí)例的壓力;在應(yīng)用實(shí)例空閑較多時,可銷毀一定數(shù)量的實(shí)例以節(jié)省計(jì)算資源。當(dāng)部署多個應(yīng)用在一個平臺之上時,可以使應(yīng)用相互支援、共享計(jì)算資源等。
圖6即為WebApp在Cloudify上自部署的過程。
Management首先啟動,由開發(fā)者通過REST API 或CloudShell訪問Management并上傳Recipe 。Management解析Recipe,獲取應(yīng)用部署過程,通過Cloud Driver控制Openstack按部署過程開啟虛擬機(jī)、安裝依賴的軟件、部署應(yīng)用程序,并在每臺虛擬機(jī)中安裝Cloudify‐Agent監(jiān)聽每個實(shí)例的狀態(tài),以便于自管理。
Cloudify的彈性服務(wù)依賴于基于元組的思想。元組表示應(yīng)用程序的最小業(yè)務(wù)單元,相對Cloudify是一個處理單元實(shí)例,相對Openstack是一個虛擬機(jī)實(shí)例。Openstack與Cloudify之間相互獨(dú)立,相對Cloudify、Openstack是一臺大機(jī)器,透明地提供了大量計(jì)算資源。如圖7所示,Openstack提供網(wǎng)絡(luò)與計(jì)算資源,Cloudify則根據(jù)應(yīng)用程序需求向Openstack申請即可,一個應(yīng)用程序可以有多種平臺支持,圖中WebApp由一個ApachBL實(shí)例、兩個Tomcat實(shí)例、一個MySQL實(shí)例及一個公網(wǎng)和四個內(nèi)網(wǎng)資源組成。實(shí)例之間是相互獨(dú)立的透明服務(wù),Cloudify對實(shí)例動態(tài)增加或減少并不影響用戶業(yè)務(wù),并且實(shí)例增加不會給其它實(shí)例帶來負(fù)擔(dān)。
圖6 WebApp在Cloudify平臺上自部署
圖7 WebApp在平臺中運(yùn)行邏輯
3.4 測試實(shí)驗(yàn)
部署一個簡單的Web應(yīng)用到Cloudify中,以實(shí)驗(yàn)該開源云平臺。在Cloudify 官網(wǎng)下載一個測試WebApp(HelloWorld),然后啟動CloudifyShell(也可以通過Cloudify Web 部署),與Management 建立連接。將下載好的HellowWorld Recipe放到Cloudify Shell可以找到的目錄中,通過install‐application HelloWorld命令即可完成應(yīng)用的自動部署。
部署完成后,可以通過CloudifyShell中的命令或Cloudify Web查看應(yīng)用的運(yùn)行狀態(tài)。
同時在Openstack中也可以發(fā)現(xiàn)新啟動了虛擬機(jī),如圖9所示。
圖9 Openstack中的實(shí)例
4 結(jié)語
本文提出的開源云平臺與當(dāng)前Google的GAE、Amazon的AWS、Sina的SAE提供的功能類似。由于它們是商用的,我們無法在實(shí)驗(yàn)室運(yùn)行,也看不到其內(nèi)部技術(shù)細(xì)節(jié)。本文的Openstack、Cloudify均為開源技術(shù)平臺,任何人均可研究或?qū)⑵渖逃谩?/p>
在該平臺中部署的Web應(yīng)用具有以下特點(diǎn):①應(yīng)用安全。除一般Web應(yīng)用的安全措施外,每一個實(shí)例都運(yùn)行在獨(dú)立的虛擬機(jī)中,每臺虛擬機(jī)均有獨(dú)立的防火墻與虛擬網(wǎng),形成了很好的安全防護(hù);②彈性服務(wù)。根據(jù)開發(fā)者開發(fā)的Recipe,平臺按預(yù)選配置好的策略進(jìn)行增加或減少服務(wù)實(shí)例,在使用足夠計(jì)算資源的同時不浪費(fèi)計(jì)算資源;③性價比高。多應(yīng)用可同時部署在一個平臺中,共享硬件資源,而軟件平臺均是開源,同時平臺自部署與自管理減少了管理人員。
該組合適用于建立各種云平臺,如智能家居云、電視服務(wù)云等,將所有家居、電視服務(wù)部署到本文討論的平臺中可實(shí)現(xiàn)服務(wù)間共享計(jì)算資源,還可解決單一應(yīng)用負(fù)載峰值過高時的壓力問題,同時平臺的自部署、自管理功能大大減少了服務(wù)器的運(yùn)維、管理工作。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://m.lukmueng.com/
本文標(biāo)題:基于開源云技術(shù)的高可用Web應(yīng)用云研究
本文網(wǎng)址:http://m.lukmueng.com/html/consultation/10839713888.html