云计算环境下的应用架构设计
作者從云計(jì)算環(huán)境下應(yīng)用的特點(diǎn)出發(fā),分析了在云計(jì)算環(huán)境下應(yīng)用程序開發(fā)設(shè)計(jì)的一些新變化。根據(jù)這些特點(diǎn),本文提出一個(gè)“自我感知應(yīng)用”(Self-Sensing Application)的新概念,接著以Windows Azure平臺(tái)為例闡述如何實(shí)現(xiàn)自我感知應(yīng)用。
多年來應(yīng)用程序開發(fā)者和架構(gòu)師們都在努力設(shè)計(jì)一種既能夠在功能上滿足當(dāng)前業(yè)務(wù)需求,又能夠適應(yīng)用戶需求發(fā)生變化或者能夠在可預(yù)見的將來適應(yīng)環(huán)境變化的應(yīng)用。尤其是在互聯(lián)網(wǎng)領(lǐng)域,架構(gòu)師都在努力讓自己設(shè)計(jì)的應(yīng)用具有比較強(qiáng)的擴(kuò)展能力,能夠跟得上用戶不斷增長或者出現(xiàn)突發(fā)請(qǐng)求的一些情況。在傳統(tǒng)的Web應(yīng)用設(shè)計(jì)中,我們?cè)诩軜?gòu)上一般采用基于多層架構(gòu)的設(shè)計(jì),在Web層中大量使用了負(fù)載均衡等技術(shù)。一般我們的處理方式都是在應(yīng)用程序設(shè)計(jì)好之后,在應(yīng)用部署的過程中事先把環(huán)境配置好,而應(yīng)用程序在運(yùn)行過程配置都是不變的。但是,隨著云計(jì)算時(shí)代的到來,我們面對(duì)一些新的挑戰(zhàn),相應(yīng)的應(yīng)用程序設(shè)計(jì)方式隨之發(fā)生了一些變化。我們首先從云計(jì)算的技術(shù)特點(diǎn)開始討論應(yīng)用的變化。
從技術(shù)角度看云計(jì)算的特點(diǎn)
毫無疑問,云計(jì)算是目前信息產(chǎn)業(yè)中討論得最多的話題。雖然大家對(duì)于云計(jì)算還沒有一致定義,但是對(duì)于云計(jì)算的一些特點(diǎn),相關(guān)的服務(wù)模型等內(nèi)容日漸趨于統(tǒng)一。在討論云計(jì)算應(yīng)用架構(gòu)特點(diǎn)之前,我們先從技術(shù)的角度來討論一下云計(jì)算本身的一些特點(diǎn)。
按需服務(wù)
云計(jì)算是一個(gè)把信息技術(shù)作為服務(wù)(IT as a Service)提供的一種方式。這種服務(wù)的概念都是從消費(fèi)方(用戶)角度出發(fā),而不是從服務(wù)提供方出發(fā)考慮問題,因此,云計(jì)算要求按需服務(wù),即用戶可以根據(jù)需求即時(shí)得到服務(wù)。從這個(gè)角度講,云計(jì)算就像我們公共服務(wù)中的自來水、電、煤氣一樣,集中供應(yīng)并按需服務(wù)和計(jì)費(fèi)。
資源池
云計(jì)算的一個(gè)好處是提高資源的利用率,而這一般需要通過共享的方式來達(dá)到這個(gè)目的。這里可以類比一下我們?nèi)粘3燥堉械淖灾秃妥啦偷牟顒e。如果需要共享就需要先把資源集中到一個(gè)公共的資源池中。根據(jù)這個(gè)資源池中資源的類別,我們把云計(jì)算的服務(wù)模型分為三種,即所謂的SPI模型,如表1所示。
表1 SPI模型
?
高可擴(kuò)展性
云計(jì)算平臺(tái)的資源池相對(duì)于單個(gè)用戶的需求而言是比較大的,因此考慮到會(huì)有大量不同用戶共用一個(gè)資源池,他們之間的資源使用模式一般存在一定的互補(bǔ)性,所以對(duì)于某個(gè)用戶的需求而言,云計(jì)算具有很高的擴(kuò)展性。另外,云計(jì)算平臺(tái)在做架構(gòu)設(shè)計(jì)的時(shí)候,都會(huì)考慮到如何讓用戶可以平滑擴(kuò)展他們的資源需求,比如計(jì)算資源、存儲(chǔ)資源等。
彈性服務(wù)
彈性服務(wù)指的是云計(jì)算的資源分配可以根據(jù)應(yīng)用訪問具體情況進(jìn)行動(dòng)態(tài)地調(diào)整。也正因如此,云計(jì)算對(duì)于非恒定需求的應(yīng)用,比如需求波動(dòng)很大、階段性需求等,具有非常好的應(yīng)用效果。在云計(jì)算的環(huán)境中,資源的擴(kuò)展方式可以分為兩大類:一類是事先可以預(yù)測(cè)的,比如一些季節(jié)性的需求;另一類是完全基于某種規(guī)則實(shí)時(shí)動(dòng)態(tài)調(diào)整的。無論是哪一種,都要求云計(jì)算平臺(tái)提供彈性的服務(wù)。
圖1 自服務(wù)、自動(dòng)化和虛擬化之間的關(guān)系
自服務(wù)、自動(dòng)化和虛擬化
與日常生活中的ATM等自服務(wù)類似,在云計(jì)算中自服務(wù)同樣是降低服務(wù)成本、提高服務(wù)便捷性的一種途徑。對(duì)于云計(jì)算服務(wù)提供方來說,自服務(wù)就要求提供盡量簡單的用戶操作界面,簡化用戶操作,降低用戶使用服務(wù)的難度,只有這樣自服務(wù)才能被用戶所接受。而且由于是人機(jī)交互,因此服務(wù)響應(yīng)速度的要求就會(huì)更高。所有這一切都需要通過后臺(tái)自動(dòng)化的方式才能實(shí)現(xiàn),也就是說后臺(tái)自動(dòng)化是前臺(tái)自服務(wù)的保障。因此從這個(gè)意義上來講,自服務(wù)是目的,而自動(dòng)化則是手段。虛擬化的本質(zhì)是解耦,是一種把資源從硬件束縛中解放出來的方式,從而使得資源的動(dòng)態(tài)分配成為可能。這幾個(gè)概念的關(guān)系可以用圖1表示。
云計(jì)算自服務(wù)一般是通過Web門戶來體現(xiàn),就像在亞馬遜的云計(jì)算服務(wù)中,用戶通過自服務(wù)門戶預(yù)定需要的計(jì)算資源就像在其電子商務(wù)網(wǎng)站上訂購一本書一樣方便。自動(dòng)化一般通過程序和大量自動(dòng)化腳本來實(shí)現(xiàn),使得前端自服務(wù)界面用戶觸發(fā)的操作后臺(tái)平臺(tái)能夠自動(dòng)化完成,并及時(shí)響應(yīng),從而保證良好的用戶
體驗(yàn)。
服務(wù)可度量
管理學(xué)之父德魯克曾經(jīng)說過一句名言:“如果你不能測(cè)量它,你就不能管理它”。云計(jì)算作為服務(wù)提供的方式,需要對(duì)服務(wù)進(jìn)行度量。一般服務(wù)提供方和用戶之間需要有一個(gè)服務(wù)水平協(xié)議(SLA)。這樣對(duì)于私有云來說,可以根據(jù)服務(wù)情況進(jìn)行內(nèi)部費(fèi)用核算。而對(duì)于公有云來說,服務(wù)可度量就是計(jì)費(fèi)的前提,然后根據(jù)實(shí)際使用量來進(jìn)行計(jì)費(fèi)。
云計(jì)算應(yīng)用的特點(diǎn)
從前面的描述我們可以看到云計(jì)算給應(yīng)用程序帶來的一些挑戰(zhàn),那就是應(yīng)用程序如何在云計(jì)算環(huán)境下充分利用云計(jì)算平臺(tái)的一些特點(diǎn)來更好地滿足用戶需求。云計(jì)算應(yīng)用要能夠利用云計(jì)算環(huán)境中可動(dòng)態(tài)擴(kuò)展的資源,構(gòu)建一個(gè)具有彈性的高可用的應(yīng)用程序。下面我們分別討論一下云計(jì)算環(huán)境下應(yīng)用程序的特點(diǎn)和要求。
自動(dòng)化要求
自動(dòng)化是人類的夢(mèng)想,而計(jì)算機(jī)對(duì)自動(dòng)化領(lǐng)域的發(fā)展有著巨大的影響,它極大地提高了工作和生產(chǎn)效率。在云計(jì)算環(huán)境下,自動(dòng)化要求實(shí)際上是對(duì)計(jì)算工作本身的一個(gè)自動(dòng)化改變。云計(jì)算的自動(dòng)化可以賦予用戶對(duì)平臺(tái)基礎(chǔ)架構(gòu)的資源配置任務(wù)進(jìn)行全面統(tǒng)籌的能力,并實(shí)現(xiàn)對(duì)資源的動(dòng)態(tài)分配以提高管理效率、減少人為錯(cuò)誤并加快用戶對(duì)資源請(qǐng)求的響應(yīng)速度。應(yīng)用程序在設(shè)計(jì)的時(shí)候要能充分利用云計(jì)算環(huán)境的自動(dòng)化特性,從而使得應(yīng)用程序可以在很少或沒有人工干預(yù)的情況下,自動(dòng)適應(yīng)需求的變化。
分布式計(jì)算
大部分云計(jì)算平臺(tái)都是用廉價(jià)和標(biāo)準(zhǔn)的計(jì)算機(jī)硬件構(gòu)成,然后通過云計(jì)算軟件的方式在計(jì)算能力、可靠性等方面來達(dá)到傳統(tǒng)的大型計(jì)算機(jī)的水準(zhǔn)。也就是說在云計(jì)算環(huán)境下,資源池通常是通過分布式軟硬件方式來實(shí)現(xiàn)。因此云計(jì)算應(yīng)用程序的運(yùn)行往往涉及到多個(gè)計(jì)算資源。無論是計(jì)算還是存儲(chǔ)需求,應(yīng)用程序一般都會(huì)涉及到多個(gè)節(jié)點(diǎn),這樣在設(shè)計(jì)的時(shí)候要考慮并行設(shè)計(jì)的思想或采用分布計(jì)算的方式。比如,有些云計(jì)算應(yīng)用可以根據(jù)計(jì)算的要求,采用類似MapReduce的編程模型。
松耦合
無論是功能上還是性能上云計(jì)算對(duì)應(yīng)用的靈活性提出了更高的要求。這就要求應(yīng)用程序在設(shè)計(jì)的時(shí)候要考慮松耦合的架構(gòu)。耦合度與靈活性一般是相反的,即耦合度越高靈活性越低,而耦合度越低靈活性越高。因此,在做云計(jì)算應(yīng)用架構(gòu)設(shè)計(jì)的時(shí)候,一般要追求松耦合的設(shè)計(jì)。比如,在做Web應(yīng)用設(shè)計(jì)的時(shí)候,對(duì)于用戶狀態(tài)的保持就需要盡量采用無狀態(tài)的方式來設(shè)計(jì),這樣應(yīng)用程序的水平擴(kuò)展能力比
較好。
數(shù)據(jù)存儲(chǔ)方式
在傳統(tǒng)的應(yīng)用設(shè)計(jì)中,我們一般采用關(guān)系型數(shù)據(jù)庫來存儲(chǔ)數(shù)據(jù)。但是在云計(jì)算環(huán)境下,尤其是對(duì)于互聯(lián)網(wǎng)應(yīng)用,存在兩個(gè)需要面對(duì)的問題:一個(gè)是云計(jì)算環(huán)境下的數(shù)據(jù)量都比較大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫面臨數(shù)據(jù)擴(kuò)展能力的挑戰(zhàn);另一個(gè)是許多應(yīng)用對(duì)于數(shù)據(jù)存儲(chǔ)的要求更多體現(xiàn)在非結(jié)構(gòu)化數(shù)據(jù)或者是半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)上面。因此,大多數(shù)云計(jì)算平臺(tái)都會(huì)提供針對(duì)非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)方式。這樣應(yīng)用程序的架構(gòu)需要針對(duì)新的數(shù)據(jù)存儲(chǔ)方式作出調(diào)整。
上面描述的一些應(yīng)用特點(diǎn)對(duì)我們開發(fā)和設(shè)計(jì)應(yīng)用程序會(huì)帶來許多影響。一個(gè)是應(yīng)用程序在設(shè)計(jì)的過程中不僅僅需要考慮操作系統(tǒng)平臺(tái)或中間件級(jí)別的編程接口,還要針對(duì)其運(yùn)行的云平臺(tái)的接口來對(duì)應(yīng)用程序進(jìn)行設(shè)計(jì)。另外一個(gè)比較大的影響是有一些工作量從平臺(tái)產(chǎn)品轉(zhuǎn)移到了應(yīng)用程序的開發(fā)設(shè)計(jì)人員。比如說,在采用半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的時(shí)候,開發(fā)設(shè)計(jì)人員需要處理數(shù)據(jù)的一致性問題。還有,在云計(jì)算平臺(tái)上如果想要得到比較好的性能,開發(fā)設(shè)計(jì)人員往往還需要對(duì)數(shù)據(jù)的分區(qū)進(jìn)行特別設(shè)計(jì),或需要采用一些并行設(shè)計(jì)的算法等。
具有自我感知能力的應(yīng)用
傳統(tǒng)的基礎(chǔ)架構(gòu)或系統(tǒng)平臺(tái)中的資源都不能動(dòng)態(tài)配置,因此應(yīng)用程序在設(shè)計(jì)的時(shí)候主要考慮自身的業(yè)務(wù)邏輯的實(shí)現(xiàn)。應(yīng)用程序本身的監(jiān)控和管理都是通過其他系統(tǒng)管理軟件如System Center、Tivoli等來實(shí)現(xiàn)。有一些管理得比較好的應(yīng)用程序,可以通過這些系統(tǒng)管理軟件實(shí)現(xiàn)部分資源的動(dòng)態(tài)調(diào)整。但是,這些傳統(tǒng)的應(yīng)用程序本身對(duì)底層平臺(tái)的運(yùn)行情況是沒有任何感知的。隨著云計(jì)算的出現(xiàn),應(yīng)用程序本身的自動(dòng)化逐漸成為可能。我把這些具有運(yùn)行環(huán)境感知功能的應(yīng)用程序稱之為“自我感知應(yīng)用”(Self-Sensing Application)。
自我感知應(yīng)用的出現(xiàn)是應(yīng)用程序發(fā)展的一種趨勢(shì),是自動(dòng)化在應(yīng)用程序運(yùn)行過程中的一種體現(xiàn)。在做傳統(tǒng)應(yīng)用程序設(shè)計(jì)的時(shí)候,我們把主要的精力都放在功能性的需求方面,但是對(duì)于一些非功能性的需求往往采用手工配置和采用第三方工具的方式來實(shí)現(xiàn)。云計(jì)算平臺(tái)的出現(xiàn)使得計(jì)算平臺(tái)的資源具有可編程的特性,因此我們?cè)趹?yīng)用程序的架構(gòu)設(shè)計(jì)中可以通過基礎(chǔ)架構(gòu)平臺(tái)的一些接口來感知應(yīng)用程序的實(shí)際運(yùn)行情況,并可以結(jié)合訪問情況對(duì)應(yīng)用程序的運(yùn)行資源進(jìn)行動(dòng)態(tài)調(diào)整,以實(shí)現(xiàn)完善的自動(dòng)化程序運(yùn)行。
云計(jì)算平臺(tái)具有可編程的資源分配,因此我們還可以設(shè)定自動(dòng)化的部署過程,也就是讓應(yīng)用程序的可以自動(dòng)化地完成應(yīng)用程序的部署、升級(jí)等工作。自動(dòng)化部署也是應(yīng)用程序動(dòng)態(tài)擴(kuò)展的一個(gè)前提。這樣當(dāng)需要更多計(jì)算實(shí)例來處理更多的用戶請(qǐng)求的時(shí)候,新的計(jì)算實(shí)例可以動(dòng)態(tài)生成出來并自動(dòng)啟用。
自我感知應(yīng)用是應(yīng)用程序朝著成為具有獨(dú)立、自治單元的方式發(fā)展的一種體現(xiàn)。應(yīng)用架構(gòu)師在做設(shè)計(jì)的時(shí)候,面對(duì)的是底層抽象的、幾乎無限的計(jì)算資源,而不是傳統(tǒng)意義上的物理資源。從另外一個(gè)角度看這種設(shè)計(jì)方式也是應(yīng)用程序與底層計(jì)算平臺(tái)松耦合的一種體現(xiàn),從而使得應(yīng)用程序不綁定具體物理硬件。云計(jì)算平臺(tái)從底層提供幾乎無限的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源,其上的應(yīng)用程序就像一個(gè)個(gè)具有人工智能的獨(dú)立單元,他們?cè)谕瓿勺陨順I(yè)務(wù)工作之外,還能夠具有自我管理和自我修復(fù)的功能。
Windows Azure應(yīng)用程序的自我感知實(shí)現(xiàn)
對(duì)于一個(gè)自我感知應(yīng)用而言,一方面它要能夠感知底層運(yùn)行平臺(tái)的一些環(huán)境信息,另一方面它還需要一種機(jī)制能夠把自身運(yùn)行要求轉(zhuǎn)遞給底層運(yùn)行環(huán)境。Windows Azure上應(yīng)用程序由代碼和基于XML的配置文件兩部分組成。應(yīng)用程序可以通過配置文件把自身運(yùn)行要求傳遞給Windows Azure,確切地講是提交給Fabric控制器。但是,應(yīng)用程序如何才能感知環(huán)境的一些變化呢?加入配置文件更新之后應(yīng)用程序如何才能得到通知并作出響應(yīng)呢?這里就要用到Windows Azure提供的服務(wù)運(yùn)行時(shí)編程接口(Service Runtime API)。
Windows Azure的服務(wù)運(yùn)行時(shí)編程接口最常用的使用方式就是幫助應(yīng)用程序了解應(yīng)用服務(wù)和應(yīng)用所在的Role實(shí)例的信息,包括:
- 它能夠讓應(yīng)用程序訪問在服務(wù)配置文件和服務(wù)定義文件中的最新服務(wù)配置信息。當(dāng)配置文件的信息被更新的時(shí)候,服務(wù)運(yùn)行時(shí)編程接口能夠保證返回最新的配置信息。
- 它能夠應(yīng)用得到最新的服務(wù)拓?fù)浣Y(jié)構(gòu),比如哪些Role實(shí)例在運(yùn)行,每種Role類型有多少實(shí)例等。
- 由于Worker Role中的代碼運(yùn)行周期有點(diǎn)類似于有限狀態(tài)自動(dòng)機(jī)的處理方式,服務(wù)運(yùn)行時(shí)編程接口能夠幫助應(yīng)用得到Worker Role實(shí)例的生命周期信息。
服務(wù)運(yùn)行時(shí)編程接口可以通過兩種方式使用。對(duì)于.NET托管代碼,Windows Azure的SDK中包含一個(gè)名為Microsoft.WindowsAzure.ServiceRuntime.dll,當(dāng)用Visual Studio新生成一個(gè)云服務(wù)項(xiàng)目時(shí)它會(huì)被自動(dòng)引用。而對(duì)于本地代碼,可以通過使用SDK中的頭文件和庫文件就可以用C來調(diào)用這個(gè)編程接口了。
服務(wù)運(yùn)行時(shí)編程接口是應(yīng)用程序本身用來得到自身及其運(yùn)行環(huán)境信息用的,但是如果應(yīng)用程序之外,比如說一個(gè)管理工具要得到指定應(yīng)用程序的信息,那么一般需要利用另外一個(gè)稱為服務(wù)管理的編程接口(Service Management API)。這兩個(gè)編程接口在功能有重合的地方,它們之間的最大區(qū)別在于服務(wù)運(yùn)行時(shí)編程接口在Windows Azure中運(yùn)行,而服務(wù)管理的編程接口一般在Windows Azure之外運(yùn)行,它更多的用在那些針對(duì)Windows Azure的管理工具開發(fā)
當(dāng)中。
結(jié)束語
云計(jì)算無疑已受到極大的關(guān)注,但是它還是一個(gè)相對(duì)較新的概念,相關(guān)的技術(shù)正處于快速發(fā)展的過程中。我們已經(jīng)可以看到云計(jì)算對(duì)IT行業(yè)的硬件模型、應(yīng)用模型和用戶體驗(yàn)等方面帶來了革命性的影響。從應(yīng)用模型的角度來看,云計(jì)算平臺(tái)的出現(xiàn)使得開發(fā)人員可以快速構(gòu)建高可用的、可以幾乎無限擴(kuò)展的應(yīng)用。隨著云計(jì)算相關(guān)技術(shù)的進(jìn)一步發(fā)展,它將使我們能夠進(jìn)一步簡化開發(fā)自我感知應(yīng)用的工作,另外非功能性的一些要求也將更多通過配置文件而不是代碼來實(shí)現(xiàn)。
人們對(duì)于信息技術(shù)需求的發(fā)展始終沒有改變,那就是追求可靠、便捷、易用的信息應(yīng)用。當(dāng)我們把一個(gè)冰箱連接到電源插座的時(shí)候,我們從來不會(huì)去考慮這個(gè)電力是從哪個(gè)發(fā)電站來的,我們也不需要成為一個(gè)電力專家來使用這個(gè)冰箱。云計(jì)算的出現(xiàn)讓信息技術(shù)往這個(gè)方向更進(jìn)了一步。我們認(rèn)為應(yīng)用程序?qū)⒅饾u演變成具有自我感知能力的應(yīng)用,成為一個(gè)能夠根據(jù)平臺(tái)環(huán)境和用戶請(qǐng)求進(jìn)行自我調(diào)整和自我修復(fù)的自治單元。也許不遠(yuǎn)的將來,整個(gè)互聯(lián)網(wǎng)就像一臺(tái)巨大的計(jì)算機(jī),其上提供無限的計(jì)算資源和服務(wù),人們使用其上的應(yīng)用程序就像我們現(xiàn)在使用自來水、電力那樣方便、
自然。
參考文獻(xiàn)
[1] David Chappell, Introducing Windows Azure, http://www.davidchappell.com/writing/white_papers/Introducing_Windows_Azure_v1.2–Chappell.pdf
[2] Peter Mell, Tim Grance, The NIST Definition of Cloud Computing, http://csrc.nist.gov/groups/SNS/cloud-computing/cloud-def-v15.doc
[3] Alexander Lenk, Markus Klems, Jens Nimis, Stefan Tai, Thomas Sandholm, What’s Inside the Cloud? An Architectural Map of the Cloud Landscape, CLOUD’09, May 23, 2009, Vancouver, Canada
作者方國偉,軟件架構(gòu)資深顧問,目前在微軟開發(fā)工具及平臺(tái)事業(yè)部負(fù)責(zé)微軟云計(jì)算解決方案的技術(shù)推廣工作。曾先后擔(dān)任IBM(中國)有限公司軟件部資深軟件工程師、微軟企業(yè)和合作伙伴部制造業(yè)客戶技術(shù)經(jīng)理。
本文選自《程序員》雜志2011年03期,更多精彩內(nèi)容敬請(qǐng)關(guān)注03期雜志
《程序員》雜志訂閱火熱進(jìn)行中
轉(zhuǎn)載于:https://www.cnblogs.com/wala-wo/archive/2012/01/17/5119501.html
總結(jié)
以上是生活随笔為你收集整理的云计算环境下的应用架构设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正浩 EcoFlow 推出首款可制冰的户
- 下一篇: 摘抄的好文章