丁振凡
?
STS實現(xiàn)Cloud Foundry云平臺應(yīng)用部署
丁振凡
(華東交通大學(xué)信息工程學(xué)院,江西,南昌 330013)
STS(Springsource Tool Suite)是Spring應(yīng)用開發(fā)的一個強大工具,Cloud Foundry是Spring Source提供的一個開源云平臺。在STS中通過添加Cloud Foundry擴展可支持云應(yīng)用部署,對云平臺上個人虛擬機的服務(wù)器及應(yīng)用進行管理。分析了Cloud Foundry 的架構(gòu)組成,討論了將Web應(yīng)用部署到云環(huán)境的具體操作過程,重點針對云數(shù)據(jù)庫訪問、文檔管理應(yīng)用以及面向消息應(yīng)用,分析了在云環(huán)境下編程要注意的問題。最后,給出了一個網(wǎng)絡(luò)教學(xué)系統(tǒng)樣例以及云應(yīng)用部署的優(yōu)劣分析。
Cloud Foundry;STS;云應(yīng)用部署;云數(shù)據(jù)庫訪問
云計算作為一種新型的資源共享和管理模式,成為近年來研究熱點。將軟件部署在公有云或私有云的虛擬化環(huán)境中,開發(fā)人員不用維護基礎(chǔ)設(shè)施,從而使軟件的部署和應(yīng)用變得快速方便。根據(jù)美國國家標(biāo)準(zhǔn)與技術(shù)研究所的定義[1],云計算提供的服務(wù)從下往上分為3個層次,分別是基礎(chǔ)設(shè)施服務(wù)(IaaS)、平臺服務(wù)(PaaS)和軟件服務(wù)(SaaS),這3種服務(wù)模型既相互獨立又相互聯(lián)系的。本文介紹的Cloud Foundry云平臺屬于PaaS類型。STS(Springsource Tool Suite)是開發(fā)Spring應(yīng)用的優(yōu)秀工具,Spring是一個開源框架,它是為了解決企業(yè)應(yīng)用復(fù)雜性而創(chuàng)建的高效開發(fā)環(huán)境,Cloud Foundry云平臺直接支持Spring的應(yīng)用部署。
Cloud Foundry 是 VMware 發(fā)布的業(yè)內(nèi)第一個開源 PaaS 項目。Cloud Foundry目前支持 Spring Java,Rails,Ruby等,也支持其他基于JVM 的框架,如 Groovy,Grails 等。并提供消息服務(wù)(如RabbitMQ)和數(shù)據(jù)服務(wù)(如MySQL,Mongo DB等)。利用Cloud Foundry構(gòu)建的云計算平臺,提供了軟件開發(fā)、測試和運行維護一整套完整的平臺環(huán)境, 確保安全性、可管理性、高可用性。
Cloud Foundry的最新架構(gòu)如圖1所示。通過VMC客戶端和STS部署應(yīng)用,通過瀏覽器和移動終端訪問應(yīng)用。Cloud Foundry采用基于消息的多組件架構(gòu),有利于集群節(jié)點間的松耦合,并使自注冊,自發(fā)現(xiàn)的功能得到實現(xiàn)。
圖1 Cloud Foundry的邏輯架構(gòu)
以下就邏輯架構(gòu)中主要模塊進行簡要說明,其中,Stager、Warden、BlobStore等是Cloud Foundry為提高效率在新版添加的模塊。
(1)路由器(Router)模塊:對所有進入Router的請求進行路由。請求可分為兩類:首先是來自VMCClient或者STS的管理型指令。例如,部署應(yīng)用、刪除應(yīng)用等。這類請求會被路由到云控制器。第二類是來自具體應(yīng)用的訪問請求,會被路由到執(zhí)行代理池。
(2)云控制器(Cloud Controller)模塊:是Cloud Foundry 的管理模塊。它與命令行工具 VMC 和 STS交互。主要工作有:①應(yīng)用程序的增刪改讀;②啟動、停止應(yīng)用程序;③把一個應(yīng)用程序打包成 Droplet;④管理service;⑤修改應(yīng)用程序的運行環(huán)境等。
(3)執(zhí)行代理池(Droplet Execution Agency)DEA模塊:DEA是應(yīng)用程序執(zhí)行引擎。Droplet 是由應(yīng)用源代碼、云運行環(huán)境和管理腳本壓縮在一起的tar包,存放在BlobStore中。DEA將Droplet解壓并通過執(zhí)行其中的start腳本讓應(yīng)用運行。
(4)NATS 模塊:NATS 是一個輕量級的基于發(fā)布/訂閱機制的消息系統(tǒng)。Cloud Foundry的是所有內(nèi)部組件通過NATS進行通信。每個模塊會根據(jù)自己的消息類別,向MessageBus發(fā)布多個消息主題;而同時也向自己需要交互的模塊,按照需要的信息內(nèi)容的消息主題訂閱消息。
(5)運行狀況管理(Health Manager)模塊:Health Manager 是一個獨立守護進程,它從DEA獲取應(yīng)用程序的運行信息,進行統(tǒng)計分析。統(tǒng)計結(jié)果與云控制器設(shè)定的指標(biāo)進行比較,實現(xiàn)系統(tǒng)自我管理及自我預(yù)警。
(6)Service模塊:該模塊是一個獨立的、可Plug-in 的模塊。用于將第三方的服務(wù)整合進來。目前 Cloud Foundry 支持?jǐn)?shù)據(jù)服務(wù),消息服務(wù)等。
(7)暫存器(Stager)是為解決應(yīng)用打包過程比較費時而在新引入的模塊,每當(dāng)Cloud Controller需要打包的時候,就會向Stager隊列中發(fā)送一個請求,Stager收到請求后,逐個處理。
(8)程序運行容器Warden是新引入的模塊,為防止用戶應(yīng)用隨意訪問文件系統(tǒng)、跑滿CPU、占盡內(nèi)存等現(xiàn)象。該容器提供了一個孤立的環(huán)境,Droplet只可以獲得受限的CPU、內(nèi)存、磁盤訪問權(quán)限。
(9)BlobStore模塊是新引入的模塊,原先存放運行包的NFS是一處單點,一旦Crash,整個Cloud Foundry的部署功能要癱瘓。新版用BlobStore替代NFS,提供高可用、可擴展的存儲服務(wù)。
對于應(yīng)用開發(fā)者來說,云平臺的支撐框架的改進只是為了提高云的運作效率,用戶的應(yīng)用部署過程是保持不變的。本文重點是各種應(yīng)用在云環(huán)境的部署處理。
STS能夠與CloudFoundry深度耦合,使用STS 可部署Spring web應(yīng)用程序到Cloud Foundry云平臺上,也可以通過STS 管理已經(jīng)部署好的應(yīng)用程序。以下為利用STS部署應(yīng)用到CloudFoundry云平臺的流程。
在http://my.cloudfoundry.com/signup注冊一個免費帳戶。帳號是以用戶的電子郵件地址作為用戶登錄名,注冊后,將收到一封包含用戶憑據(jù)的電子郵件。每個用戶在云平臺分配有一個虛擬機,在虛擬機上可以部署多個應(yīng)用。
具體步驟如下:①選擇菜單Help→Dashboard。②打開面板,點擊Extensions標(biāo)簽,可看到STS加載擴展名列表。③向下滾動到Server and Clouds類別,選擇“Cloud Foundry Integration”。④點擊Install,按安裝向?qū)е鸩桨惭b。
通過STS的Server添加功能,添加一個服務(wù)器,在服務(wù)器的類型選擇中要選擇來自云平臺,連接服務(wù)器將需要注冊的帳戶和密碼。用戶使用“Run At Server”運行Web應(yīng)用程序時選擇來自云的服務(wù)器,則該應(yīng)用將自動部署到云平臺上。在云空間的虛擬機上將部署一個Tomcat服務(wù)器,該服務(wù)器可以通過STS進行啟??刂?。
云上的應(yīng)用直接以工程的名稱作為服務(wù)器的域名前綴,這點和本地應(yīng)用不同。例如,工程名稱為“xyz”的應(yīng)用,在云上的根訪問為“http://xyz.cloudfoundry.com/”,而在本地服務(wù)器訪問為“http://localhost:8080/xyz/”。因此,在應(yīng)用的相對路徑計算時要注意。正因為工程名作為應(yīng)用域名前綴,所以,在該云空間上不存在同名應(yīng)用時才能完成部署。
3.2.1 開發(fā)云數(shù)據(jù)庫應(yīng)用的基本過程
對于數(shù)據(jù)庫應(yīng)用,需要使用云上的數(shù)據(jù)庫,具體過程如下。
(1)配置數(shù)據(jù)源
連接云服務(wù)器,雙擊Cloud Foundry server,在其設(shè)置界面中,點擊add按鈕打開service控制面板。在彈出的對話框中,選擇數(shù)據(jù)源并輸入名稱,假設(shè)選擇的數(shù)據(jù)源類型為mysql數(shù)據(jù)庫,名稱為mysql。然后,點擊“Finish”按鈕即可。
(2)在應(yīng)用中通過建立基于數(shù)據(jù)源的JdbcTemplate對象訪問數(shù)據(jù)庫
第一步:在云應(yīng)用的虛擬機控制窗體中,將Services面板的數(shù)據(jù)源服務(wù)拖到Application Services面板。如圖2所示。這樣,在應(yīng)用中才能通過標(biāo)識連接到該數(shù)據(jù)源。
圖2 將數(shù)據(jù)源拖放到Application Services面板
第二步:在應(yīng)用配置文件引用云上定義的數(shù)據(jù)源要用到cloud標(biāo)簽,相應(yīng)地,在配置文件中要引入cloud 命名空間。如果應(yīng)用中通過JdbcTemplate訪問數(shù)據(jù)庫[4],以下代碼使用SpEL表達式引用數(shù)據(jù)源mysql。
xmlns:cloud=http://schema.cloudfoundry.org/spring …… http://schema.cloudfoundry.org/spring http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.6.xsd"> class="org.springframework.jdbc.core.JdbcTemplate"> 第三步:在應(yīng)用邏輯中通過屬性依賴引用Spring容器中的JdbcTemplate對象。例如: @Resource(name="jdbcTemplate") private JdbcTemplate jdbc; (3)在Maven依賴關(guān)系中添加Cloud Foundry的支持 部署在云端的應(yīng)用通常要使用Maven創(chuàng)建工程,為支持Cloud Foundry,需要在Maven工程的pom.xml文件中添加cloudfoundry-runtime依賴。 以上過程完成后,就可以通過STS控制Cloud Foundry應(yīng)用的部署,啟動和停止。 【注意】Cloud Foundry不支持STS動態(tài)Web工程,對于用MVC模式進行應(yīng)用開發(fā)的Web項目,需要用Spring MVC模板工程創(chuàng)建,它是一個Maven項目。 3.2.2 關(guān)于云數(shù)據(jù)庫的建表和數(shù)據(jù)管理 云上數(shù)據(jù)庫沒有直接打開的管理工具,需要編寫應(yīng)用對數(shù)據(jù)庫進行管理。尤其是涉及安全認(rèn)證的應(yīng)用系統(tǒng),假設(shè)帳戶信息存儲在數(shù)據(jù)庫中,則在沒有部署安全前,要先建立數(shù)據(jù)庫表格和添加部分?jǐn)?shù)據(jù)。例如,以下為實現(xiàn)建表處理的相應(yīng)控制器Mapping方法。代碼中通過@Resource注解將IOC容器中的JdbcTemplate對象注入給控制器的jdbc屬性變量。用戶訪問“/createdata”請求時,將執(zhí)行createdata()方法,在方法中通過調(diào)用JdbcTemplate對象的execute方法執(zhí)行sql建表語句實現(xiàn)數(shù)據(jù)庫的建表處理。 @Resource(name="jdbcTemplate") private JdbcTemplate jdbc; @RequestMapping(value="/createdata", method=RequestMethod.GET) public String createdata() { String sql="create table users(username varchar(20), password varchar(20),enabled int(10),primary key(username))"; jdbc.execute(sql); …… } 其他數(shù)據(jù)庫管理應(yīng)用可采用類似方法,采用Spring MVC模式實現(xiàn)可視化管理[4-5]。 文檔上傳與管理是Web應(yīng)用的一項常用功能,在網(wǎng)上教學(xué)、博客、辦公等系統(tǒng)均需要支持各類資源文檔的上傳與管理。利用Spring的CommonsMultipartResolver解析器可實現(xiàn)文件上傳的處理。為支持文件上傳,需要在工程的Maven配置中添加commons-fileupload和commons-io兩個依賴部件。 值得注意的是,云上應(yīng)用資源的存儲路徑受到云的保護限制,用戶上傳的文件不能任意存儲到云空間的任何位置。云環(huán)境和本地硬盤環(huán)境不同,沒有普通Windows應(yīng)用的C、D盤,虛擬機的文件系統(tǒng)采用類似linux的文件結(jié)構(gòu)。存放操作系統(tǒng)資源文件的目錄路徑,不允許應(yīng)用系統(tǒng)添加和修改文件,用戶上傳的文件通常考慮安排在Web應(yīng)用部署的目錄路徑的某個子目錄下。這也是云上應(yīng)用虛擬化的基本要求,每個應(yīng)用在云上有各自獨立的空間,方便云對其空間的管理及對用戶資源的限制。 企業(yè)里很多系統(tǒng)通信,特別是與外部組織間的通信,實質(zhì)上都是異步的。面向消息的應(yīng)用編程處理成為目前SOA應(yīng)用的核心,Spring提供了強大的支持來編寫面向消息的應(yīng)用。Spring Integration是Spring的一個擴展框架,提供了一個輕量級的、聲明式模型實現(xiàn)面向消息的應(yīng)用集成。Spring Integration應(yīng)用可直接部署到云環(huán)境。 提供消息隊列服務(wù)的產(chǎn)品較多(如:ActiveMQ、RabitMQ等),Cloud Foundry云平臺下目前支持RabitMQ,RabitMQ用AMQP協(xié)議(高級消息隊列協(xié)議)實現(xiàn)消息的分發(fā),具有快速、可靠、開源、安全、可擴展的特點。為支持RabitMQ編程,要在工程的Maven配置中添加Spring框架的工件標(biāo)識為“spring-rabbit”依賴包。 和前面介紹的mysql數(shù)據(jù)庫服務(wù)的使用類似,STS開發(fā)環(huán)境中使用RabitMQ服務(wù),首先要云服務(wù)器的service控制面板中添加“RabitMQ message queue”類型的服務(wù)部件,并將其拖放到具體應(yīng)用面板。這樣,在具體應(yīng)用中通過隊列標(biāo)識引用隊列。 然后,程序通過Spring框架提供的Amqp Template模板實現(xiàn)AMQP消息的發(fā)送與接受。 例如,以下代碼發(fā)送一條消息到 "messages" 隊列。 amqpTemplate.convertAndSend("messages","hello" ); 以下代碼從"messages" 隊列接受1條消息。 String message = (String)amqpTemplate. receiveAndConvert("messages"); 為提高應(yīng)用效率,一般將AmqpTemplate配置為Bean。在應(yīng)用中可通過Spring的依賴關(guān)系引用該Bean對象。以下為配置代碼。 國家《教育信息化十年發(fā)展規(guī)劃(2011-2020)》中明確提出了建設(shè)中國教育信息化云服務(wù)平臺的任務(wù)和行動計劃。構(gòu)建基于云環(huán)境的網(wǎng)絡(luò)互動學(xué)習(xí)系統(tǒng),將降低維護、運營成本,達到整合資源、強化資源共享的目標(biāo)。Java網(wǎng)上教學(xué)系統(tǒng)在部署中采用了前面介紹的技術(shù),應(yīng)用界面如圖3所示,數(shù)據(jù)庫采用MySQL,系統(tǒng)利用Spring Security實現(xiàn)用戶認(rèn)證[6],用戶可進行課件學(xué)習(xí)、討論、答疑、提交作業(yè)、習(xí)題操練[7]、單元自測[8]、存放個人文檔、內(nèi)容搜索[9]等。系統(tǒng)控制每個登錄用戶對應(yīng)有一個以自己標(biāo)識為根目錄的虛擬空間,用戶可在各自目錄下可以建立子目錄和上傳文件。 圖3 Java教學(xué)系統(tǒng)部署到云平臺 不難發(fā)現(xiàn),Spring應(yīng)用可容易移植到Cloud Foundry云環(huán)境,在STS中通過添加擴展插件支持,就可在STS環(huán)境下對云虛擬機進行應(yīng)用部署、控制和管理,應(yīng)用編程只需要根據(jù)云環(huán)境的特點進行簡單的修改即可。 云平臺具有可擴展性和高可用性等諸多優(yōu)點,可減輕應(yīng)用系統(tǒng)維護負擔(dān)(如服務(wù)器斷電、死機、病毒、黑客攻擊等),從而提升應(yīng)用的整體訪問運作效率。規(guī)模較小的應(yīng)用,利用Cloud Foundry云環(huán)境來運作是方便有效的方式。 但同時也應(yīng)該看到,將應(yīng)用部署到云平臺在訪問速度上通常會低于內(nèi)部局域網(wǎng)應(yīng)用。其中原因主要是來自網(wǎng)絡(luò)擁擠的因素,也有來自云的訪問瓶頸因素。從云控制器的邏輯架構(gòu)可以看到,云環(huán)境下應(yīng)用的運行需要經(jīng)過一些中間控制環(huán)節(jié),所有虛擬機的應(yīng)用均要通過統(tǒng)一的路由模塊進行路由。另外,云環(huán)境中每個虛擬機能享受的資源是受限的,云使用者要按服務(wù)質(zhì)量要求進行付費。對于免費帳戶,每個用戶可部署應(yīng)用的內(nèi)存總和是2G, 默認(rèn)給每個應(yīng)用安排512M的內(nèi)存。 因此,應(yīng)用開發(fā)者根據(jù)各自實際來選擇應(yīng)用的部署環(huán)境。有條件的單位可組建內(nèi)部私有云,從而實現(xiàn)單位內(nèi)部應(yīng)用的統(tǒng)一管理。為整合已部署的應(yīng)用,還可以采用“云-地”結(jié)合的方式,將應(yīng)用部分部署在云上,部分部署在本地服務(wù)器上。 本文在介紹Cloud Foundry云平臺架構(gòu)的基礎(chǔ)上,給出了STS環(huán)境中將Spring web應(yīng)用部署到Cloud Foundry云平臺的過程,分析了各類應(yīng)用設(shè)計部署應(yīng)注意問題。Cloud Foundry支持眾多的流行應(yīng)用開發(fā)框架,并支持MySQL、MongoDB、RabitMQ等典型的應(yīng)用架構(gòu)服務(wù)。隨著云計算優(yōu)勢的廣泛認(rèn)可,將有越來越多的應(yīng)用部署到云環(huán)境中。 [1] 林利,石文昌. 構(gòu)建云計算平臺的開源軟件綜述[J]. 計算機科學(xué),2012,39(11):1-6. [2] 高文濤,郭明森.Cloud Foundry:第一個開源Platform as a Service[J]. 科技傳播,2012,1:154-155. [3] 丁振凡, 李馨梅.基于JdbcTemplate的數(shù)據(jù)庫訪問處理[J].智能計算機與應(yīng)用,2012,2(3):29-32. [4] 丁振凡,吳根斌. Spring 3.x MVC模型的數(shù)據(jù)校驗國際化處理[J]. 計算機時代,2012,8:26-28. [5] 丁振凡. 用Spring MVC實現(xiàn)數(shù)據(jù)分頁顯示處理[J]. 智能計算機與應(yīng)用,2012,2(5):20-22. [6] 丁振凡. 基于Spring Security的Web資源訪問控制[J].宜春學(xué)院學(xué)報,2012,34(8):71-74. [7] 丁振凡.利用XML數(shù)據(jù)島實現(xiàn)網(wǎng)絡(luò)課件中的習(xí)題操練[J].計算機系統(tǒng)應(yīng)用,2002,8:71-73. [8] 丁振凡,李卓群.基于XML的單元自測應(yīng)用的設(shè)計[J].華東交通大學(xué)學(xué)報,2008,25(3):69-73. [9] 丁振凡. 基于Tika語義分析的文檔內(nèi)容檢索服務(wù)研究[J].井岡山大學(xué)學(xué)報:自然科學(xué)版, 2013,34(2):60-64. THE APPLICATION DEPLOYMENT FOR CLOUD FOUNDRY PLATFORM BY USING STS DING Zhen-fan (School of Information Engineering, East China Jiao Tong University, Nanchang,Jiangxi 330013, China) STS (Springsource Tool Suite) is a powerful tool for spring application development. Cloud Foundry is an open cloud platform provided by Spring Source. By adding Cloud Foundry extension, STS can supports the cloud application deployment, and the management of server and application in cloud platform virtual machine. We analyze the architecture of the Cloud Foundry and discuss the concrete operation process for deploying web application into the cloud environment. Furthermore, we focus on the programming problems about cloud database access, document management application and message oriented application. Finally, we give a sample of network teaching system and analyze the advantages and disadvantages about cloud application deployment. cloud Foundry; STS; cloud application deployment; access to Cloud database 1674-8085(2013)05-0045-05 TP393 A 10.3969/j.issn.1674-8085.2013.05.011 2012-12-22; 2013-02-03 江西省教育廳教改項目(JXJG-12-5-24) 丁振凡(1965-),男,江西豐城人,教授,碩士生導(dǎo)師,主要從事云計算,語義Web,計算機輔助教學(xué)研究(E-mail: zfding@ecjtu.jx.cn).3.3 文檔管理應(yīng)用在云上的設(shè)計
3.4 面向消息應(yīng)用在云上的設(shè)計部署
4 網(wǎng)絡(luò)教學(xué)系統(tǒng)應(yīng)用樣例
5 應(yīng)用部署到云環(huán)境的利弊分析
6 結(jié)束語