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