本文從云計(jì)算應(yīng)用的特點(diǎn)出發(fā),分析了在云計(jì)算環(huán)境下應(yīng)用程序開(kāi)發(fā)設(shè)計(jì)的一些變化。根據(jù)這些新的特點(diǎn),本文提出一個(gè)“自我感知應(yīng)用”(Self- Sensing Application)的新概念。接著文章從架構(gòu)設(shè)計(jì)的角度闡述了Windows Azure平臺(tái)的構(gòu)建方式和架構(gòu)特點(diǎn),然后結(jié)合Windows Azure平臺(tái)的一些功能特點(diǎn),講述幾個(gè)在云計(jì)算環(huán)境下典型的應(yīng)用架構(gòu)設(shè)計(jì)方式,期望拋磚引玉。最后,文章展望了應(yīng)用程序未來(lái)的發(fā)展趨勢(shì)。 相關(guān)廠商內(nèi)容Intel研發(fā)中心架構(gòu)師張銀奎:Design For Debug! Excel項(xiàng)目主管:產(chǎn)品規(guī)劃階段的項(xiàng)目管理 惠普研發(fā)實(shí)驗(yàn)室創(chuàng)始人:跨國(guó)公司產(chǎn)品創(chuàng)新之路 相關(guān)贊助商![]() 由InfoQ和MSUP戰(zhàn)略合作舉辦的亞太軟件研發(fā)團(tuán)隊(duì)管理年會(huì)珠海站(9.18-19),欲報(bào)從速! 云計(jì)算環(huán)境下的應(yīng)用特點(diǎn)多年來(lái)應(yīng)用程序開(kāi)發(fā)者和架構(gòu)師們都在努力設(shè)計(jì)一種既能夠在功能上滿(mǎn)足當(dāng)前業(yè)務(wù)需求,另外又能夠在用戶(hù)需求發(fā)生變化或者能夠在可預(yù)見(jiàn)的將來(lái)適應(yīng)環(huán)境變 化的應(yīng)用。尤其是在互聯(lián)網(wǎng)領(lǐng)域,架構(gòu)師都在努力讓自己設(shè)計(jì)的應(yīng)用具有比較強(qiáng)的擴(kuò)展能力,能夠跟得上用戶(hù)不斷增長(zhǎng)或者出現(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) 用部署的過(guò)程中事先把環(huán)境配置好,應(yīng)用程序在運(yùn)行過(guò)程配置都是不發(fā)生變化的。但是,隨著云計(jì)算時(shí)代的到來(lái),我們面對(duì)一些新的挑戰(zhàn),相應(yīng)的應(yīng)用程序設(shè)計(jì)方式 隨之發(fā)生了一些變化。我們首先從云計(jì)算的技術(shù)特點(diǎn)開(kāi)始討論應(yīng)用的變化。 從技術(shù)角度看云計(jì)算的特點(diǎn)毫無(wú)疑問(wèn),云計(jì)算是目前信息產(chǎn)業(yè)中討論得最多的話(huà)題。雖然大家對(duì)于云計(jì)算還沒(méi)有一致定義,但是對(duì)于云計(jì)算的一些特點(diǎn),相關(guān)的服務(wù)模型等內(nèi)容日漸趨于統(tǒng)一。在討論云計(jì)算應(yīng)用架構(gòu)特點(diǎn)之前,我們先從技術(shù)的角度來(lái)討論一下云計(jì)算本身的一些特點(diǎn)。
云計(jì)算是一個(gè)把信息技術(shù)作為服務(wù)(IT as a Service)提供的一種方式。這種服務(wù)的概念都是從消費(fèi)方(用戶(hù))角度出發(fā),而不是從服務(wù)提供方出發(fā)考慮問(wèn)題,因此,一個(gè)基本特點(diǎn)是云計(jì)算要求按需服 務(wù),即用戶(hù)可以根據(jù)需求即時(shí)得到服務(wù)。從這個(gè)角度講,云計(jì)算就像我們公共服務(wù)中的自來(lái)水、電和煤氣一樣,集中供應(yīng)并按需服務(wù)和計(jì)費(fèi)。 云計(jì)算的一個(gè)好處是提高資源的利用率,而這個(gè)一般需要通過(guò)共享的方式來(lái)達(dá)到這個(gè)目的。這里可以類(lèi)比一下我們?nèi)粘3燥堉械淖灾秃妥啦偷牟? 別。如果需要共享就需要先把資源集中到一個(gè)公共的資源池中。在云計(jì)算當(dāng)中,根據(jù)這個(gè)資源池中資源的類(lèi)別,我們把云計(jì)算的服務(wù)模型分為三種,即所謂的SPI 模型,如下表所示:
云計(jì)算平臺(tái)的資源池相對(duì)于單個(gè)用戶(hù)的需求而言是比較大的,因此考慮到會(huì)有大量不同用戶(hù)共用一個(gè)資源池,他們之間的資源使用模式一般存在一定 的互補(bǔ)性,所以對(duì)于某個(gè)用戶(hù)的需求而言,云計(jì)算具有很高的擴(kuò)展性。另外,云計(jì)算平臺(tái)在做架構(gòu)設(shè)計(jì)的時(shí)候,都會(huì)考慮到如何讓用戶(hù)可以平滑擴(kuò)展他們的資源需 求,比如計(jì)算資源,存儲(chǔ)資源等。 彈性服務(wù)指的是云計(jì)算的資源分配可以根據(jù)應(yīng)用訪(fǎng)問(wèn)具體情況進(jìn)行動(dòng)態(tài)地調(diào)整。也正是因?yàn)槿绱耍朴?jì)算對(duì)于非恒定需求的應(yīng)用,比如需求波動(dòng)很 大、階段性需求等,具有非常好的應(yīng)用效果。在云計(jì)算的環(huán)境中,資源的擴(kuò)展方式可以分為兩大類(lèi),一種是事先可以預(yù)測(cè)的,比如一些季節(jié)性的需求。另一種是完全 基于某種規(guī)則實(shí)時(shí)動(dòng)態(tài)調(diào)整的。無(wú)論是哪一種,都要求云計(jì)算平臺(tái)提供彈性的服務(wù)。 對(duì)于自服務(wù)和自動(dòng)化概念本身都比較好理解,但是我把這兩個(gè)放在一起是因?yàn)樗鼈冎g的內(nèi)在聯(lián)系。自服務(wù)是云計(jì)算中降低服務(wù)成本,提高服務(wù)便捷 性的一種途徑,因此它是一個(gè)服務(wù)的提供方式。但是,對(duì)于云計(jì)算服務(wù)提供方來(lái)說(shuō),自服務(wù)就要求盡量簡(jiǎn)化用戶(hù)操作,降低用戶(hù)使用服務(wù)的難度,提升服務(wù)響應(yīng)速 度,而這個(gè)只能通過(guò)后臺(tái)自動(dòng)化的方式才能實(shí)現(xiàn)。因此從這個(gè)意義上來(lái)講,自服務(wù)是目的,而自動(dòng)化則是手段。 管理學(xué)中有一句名言:沒(méi)有考核,就沒(méi)有管理。云計(jì)算作為服務(wù)提供的方式,需要對(duì)服務(wù)進(jìn)行度量。一般服務(wù)提供方和用戶(hù)之間需要有一個(gè)服務(wù)水平 協(xié)議(SLA)。這樣對(duì)于私有云來(lái)說(shuō),可以根據(jù)服務(wù)情況進(jìn)行內(nèi)部費(fèi)用核算。而對(duì)于公有云來(lái)說(shuō),服務(wù)可度量就是計(jì)費(fèi)的前提,然后根據(jù)實(shí)際使用量來(lái)進(jìn)行計(jì)費(fèi)。 云計(jì)算應(yīng)用的特點(diǎn)從前面的描述我們可以看到云計(jì)算給應(yīng)用程序帶來(lái)的一些挑戰(zhàn),那就是應(yīng)用程序如何在云計(jì)算環(huán)境下充分利用云計(jì)算平臺(tái)的一些特點(diǎn)來(lái)更好的滿(mǎn)足用戶(hù)需求。 云計(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)化是人類(lèi)的夢(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)化可以賦予用戶(hù)對(duì)平臺(tái)基礎(chǔ)架構(gòu)的資源配置任務(wù)進(jìn)行全面統(tǒng)籌的能力,并實(shí)現(xiàn)對(duì)資源的動(dòng)態(tài)分配以提高管理效率、減少 人為錯(cuò)誤并加快用戶(hù)對(duì)資源請(qǐng)求的響應(yīng)速度。應(yīng)用程序在設(shè)計(jì)的時(shí)候要能充分利用云計(jì)算環(huán)境的自動(dòng)化特性,從而使得應(yīng)用程序可以在很少或沒(méi)有人工干預(yù)的情況 下,自動(dòng)適應(yīng)需求的變化。 大部分云計(jì)算平臺(tái)都是用廉價(jià)和標(biāo)準(zhǔn)的計(jì)算機(jī)硬件構(gòu)成,然后通過(guò)云計(jì)算軟件的方式在計(jì)算能力、可靠性等方面來(lái)達(dá)到傳統(tǒng)的大型計(jì)算機(jī)的水準(zhǔn)。也 就是說(shuō)在云計(jì)算環(huán)境下,資源池通常是通過(guò)分布式軟硬件方式來(lái)實(shí)現(xiàn)。因此云計(jì)算應(yīng)用程序的運(yùn)行往往涉及到多個(gè)計(jì)算資源。無(wú)論是計(jì)算還是存儲(chǔ)需求,應(yīng)用程序一 般都會(huì)涉及到多個(gè)節(jié)點(diǎn),這樣在設(shè)計(jì)的時(shí)候要考慮并行設(shè)計(jì)的思想或采用分布計(jì)算的方式。比如,有些云計(jì)算應(yīng)用可以根據(jù)計(jì)算的要求,采用類(lèi)似 MapReduce的編程模型。 無(wú)論是功能上還是性能上云計(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ì)于用戶(hù)狀態(tài)的保持就需要盡量采用無(wú)狀態(tài)的方式來(lái)設(shè)計(jì),這樣應(yīng)用程序的水平擴(kuò)展能力比較好。 在傳統(tǒng)的應(yīng)用設(shè)計(jì)中,我們一般采用關(guān)系型數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)。但是在云計(jì)算環(huán)境下,尤其是對(duì)于互聯(lián)網(wǎng)應(yīng)用,存在兩個(gè)需要面對(duì)的問(wèn)題。一是云計(jì) 算環(huán)境下的數(shù)據(jù)量都比較大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)面臨數(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ì)我們開(kāi)發(fā)和設(shè)計(jì)應(yīng)用程序會(huì)帶來(lái)許多影響。一個(gè)是應(yīng)用程序在設(shè)計(jì)的過(guò)程中不僅僅需要考慮操作系統(tǒng)平臺(tái)或中間件級(jí)別的編程接 口,還要針對(duì)其運(yùn)行的云平臺(tái)的接口來(lái)對(duì)應(yīng)用程序進(jìn)行設(shè)計(jì)。另外一個(gè)比較大的影響是有一些工作量從平臺(tái)產(chǎn)品轉(zhuǎn)移到了應(yīng)用程序的開(kāi)發(fā)設(shè)計(jì)人員。比如說(shuō),在采用 半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的時(shí)候,開(kāi)發(fā)設(shè)計(jì)人員需要處理數(shù)據(jù)的一致性問(wèn)題。還有,在云計(jì)算平臺(tái)上如果想要得到比較好的性能,開(kā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)控和管理都是通過(guò)其他 系統(tǒng)管理軟件如System Center,Tivoli等來(lái)實(shí)現(xiàn)。有一些管理得比較好應(yīng)用程序,可以通過(guò)這些系統(tǒng)管理軟件實(shí)現(xiàn)部分資源動(dòng)態(tài)調(diào)整。但是,這些傳統(tǒng)的應(yīng)用程序本身對(duì)底層 平臺(tái)的運(yùn)行情況是沒(méi)有任何感知的。隨著云計(jì)算的出現(xiàn),應(yīng)用程序本身的自動(dòng)化逐漸成為可能。我把這些具有運(yùn)行環(huán)境感知功能的應(yīng)用程序稱(chēng)之為“自我感知應(yīng)用”(Self-Sensing Application)。 自我感知應(yīng)用的出現(xiàn)是應(yīng)用程序發(fā)展的一種趨勢(shì),是自動(dòng)化在應(yīng)用程序運(yùn)行過(guò)程中的一種體現(xiàn)。在做傳統(tǒng)應(yīng)用程序設(shè)計(jì)的時(shí)候,我們把主要的精力都放在功能 性的需求方面,但是對(duì)于一些非功能性的需求往往采用手工配置的方式來(lái)實(shí)現(xiàn)。云計(jì)算平臺(tái)的出現(xiàn)使得計(jì)算平臺(tái)的資源具有可編程的特性,因此我們?cè)趹?yīng)用程序的架 構(gòu)設(shè)計(jì)中可以通過(guò)基礎(chǔ)架構(gòu)平臺(tái)的一些接口來(lái)感知應(yīng)用程序的實(shí)際運(yùn)行情況,并可以結(jié)合訪(fǎng)問(wèn)情況對(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)化的部署過(guò)程,也就是讓?xiě)?yīng)用程序的可以自動(dòng)化的完成應(yīng)用程序的部署,升級(jí)等工作。自動(dòng)化部 署也是應(yīng)用程序動(dòng)態(tài)擴(kuò)展的一個(gè)前提。這樣當(dāng)需要更多計(jì)算實(shí)例來(lái)處理更多的用戶(hù)請(qǐng)求的時(shí)候,新的計(jì)算實(shí)例可以動(dòng)態(tài)的生成出來(lái)并自動(dòng)啟用。 自我感知應(yīng)用是應(yīng)用程序朝著成為具有獨(dú)立、自治單元的方式發(fā)展的一種體現(xiàn)。應(yīng)用架構(gòu)師在做設(shè)計(jì)的時(shí)候,面對(duì)的是底層抽象的、幾乎無(wú)限的計(jì)算資源,而 不是傳統(tǒng)意義上的物理資源。從另外一個(gè)角度看這種設(shè)計(jì)方式也是應(yīng)用程序與底層計(jì)算平臺(tái)松耦合的一種體現(xiàn),從而使得應(yīng)用程序不綁定具體物理硬件。云計(jì)算平臺(tái) 從底層提供幾乎無(wú)限的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源,其上的應(yīng)用程序就像一個(gè)個(gè)具有人工智能的獨(dú)立單元,他們?cè)谕瓿勺陨順I(yè)務(wù)工作之外,還能夠具有自我管理和自我修 復(fù)的功能。 Windows Azure的架構(gòu)設(shè)計(jì)Windows Azure的概況Windows Azure平臺(tái)目前包含Windows Azure,SQL Azure和Windows Azure Platform AppFabric三大部分,而其中Windows Azure是平臺(tái)最為核心的組成部分,它被稱(chēng)為云計(jì)算操作系統(tǒng),也是本文討論的重點(diǎn)。不過(guò)這個(gè)操作系統(tǒng)目前只運(yùn)行在微軟的數(shù)據(jù)中心當(dāng)中,微軟是通過(guò)銷(xiāo)售云 計(jì)算服務(wù)作為她的業(yè)務(wù)模式。 圖1:Windows Azure平臺(tái) 實(shí)際上為了便于理解,我們也可以把Windows Azure看成是數(shù)據(jù)中心的操作系統(tǒng)。當(dāng)然,這里我們稱(chēng)之為操作系統(tǒng)實(shí)際上是一種類(lèi)比,因?yàn)閃indows Azure不是傳統(tǒng)意義上的操作系統(tǒng)。但是它履行了資源管理的職責(zé),只不過(guò)它管理的資源更為宏觀,數(shù)據(jù)中心中的所有服務(wù)器、存儲(chǔ)、交換機(jī)和負(fù)載均衡器等都 接受它的管理。因?yàn)槲磥?lái)的數(shù)據(jù)中心會(huì)越來(lái)越像一臺(tái)超級(jí)計(jì)算機(jī),因此Windows Azure也會(huì)越來(lái)越像一個(gè)超級(jí)操作系統(tǒng)。Windows Azure的設(shè)計(jì)團(tuán)隊(duì)中就有許多微軟技術(shù)重量級(jí)人物,其中包括Dave Cutler,他被稱(chēng)為是Windows NT和VMS之父。 Windows Azure為開(kāi)發(fā)者提供了托管的、可擴(kuò)展的、按需應(yīng)用的計(jì)算和存儲(chǔ)資源,還為開(kāi)發(fā)者提供了云平臺(tái)管理和動(dòng)態(tài)分配資源的控制手段。Windows Azure是一個(gè)開(kāi)放的平臺(tái),支持微軟和非微軟的語(yǔ)言和環(huán)境。開(kāi)發(fā)人員在構(gòu)建Windows Azure應(yīng)用程序和服務(wù)時(shí),不僅可以使用熟悉的Microsoft Visual Studio,Eclipse等開(kāi)發(fā)工具,同時(shí)Windows Azure還支持各種流行的標(biāo)準(zhǔn)與協(xié)議,包括SOAP、REST、XML、和HTTPS等。 Windows Azure的組成和架構(gòu)從云計(jì)算SPI模型來(lái)看,Windows Azure主要處于平臺(tái)即服務(wù)的層次。按照微軟目前公開(kāi)的發(fā)展計(jì)劃,其將在年內(nèi)提供基礎(chǔ)設(shè)施即服務(wù)層次的一些服務(wù),比如VM Role。Windows Azure作為基礎(chǔ)平臺(tái)的調(diào)度和管理軟件,它是構(gòu)建高效、可靠、可動(dòng)態(tài)擴(kuò)展應(yīng)用的重要平臺(tái)。主要由四大部分組成:
圖2:Windows Azure的組成 上述四個(gè)組成部分中只有開(kāi)發(fā)環(huán)境是安裝在用戶(hù)的計(jì)算機(jī)上的,用于用戶(hù)開(kāi)發(fā)和測(cè)試Windows Azure的應(yīng)用程序,其余三部分都是Windows Azure服務(wù)平臺(tái)的一部分而安裝在微軟數(shù)據(jù)中心。 Windows Azure Fabric控制器被比作是Windows Azure的大腦,它負(fù)責(zé)平臺(tái)中各種資源的統(tǒng)一管理和調(diào)配。而Windows Azure Fabric則由其管理的大量IT設(shè)備組成。開(kāi)發(fā)人員通過(guò)Windows Azure開(kāi)發(fā)工具(比如Visual Studio 2010和相應(yīng)的SDK)開(kāi)發(fā)的應(yīng)用程序一般分為兩大部分。一部分是應(yīng)用程序代碼,也稱(chēng)服務(wù)代碼,另一部分是應(yīng)用的配置文件也稱(chēng)服務(wù)模型。每個(gè)應(yīng)用包括兩 個(gè)配置文件:服務(wù)定義文件和服務(wù)配置文件。這兩個(gè)配置文件中會(huì)包含應(yīng)用程序在Windows Azure上運(yùn)行和發(fā)布的一些信息,如認(rèn)證信息、服務(wù)端口、服務(wù)角色、需要的實(shí)例數(shù)和自定義變量等。當(dāng)用戶(hù)通過(guò)開(kāi)發(fā)者門(mén)戶(hù)把應(yīng)用程序上傳到Windows Azure平臺(tái)的時(shí)候,其中的配置文件則由Windows Azure Fabric控制器來(lái)讀取,然后由其根據(jù)配置文件中指定的方式進(jìn)行服務(wù)部署。 Windows Azure的計(jì)算資源目前是通過(guò)成為Web Role和Work Role的方式來(lái)分配的。為了便于理解,我們可以認(rèn)為Web Role和Worker Role是兩種不同的虛擬機(jī)模版。其中Web Role是為了方便運(yùn)行Web應(yīng)用程序而設(shè)計(jì)的,而Work Role是為了其他應(yīng)用類(lèi)型,比如批處理而設(shè)計(jì)的。一種比較常見(jiàn)的架構(gòu)設(shè)計(jì)方式是使用Web Role來(lái)處理展示邏輯,而通過(guò)Worker Role來(lái)進(jìn)行業(yè)務(wù)邏輯處理。Web Role負(fù)責(zé)客戶(hù)端的HTTP請(qǐng)求,為了支持應(yīng)用的擴(kuò)展,Web Role上的應(yīng)用一般會(huì)設(shè)計(jì)為無(wú)狀態(tài)的,從而使得系統(tǒng)可以方便的增加Web Role實(shí)例數(shù)量,提高應(yīng)用的并發(fā)處理能力。 圖3:Web Role與Work Role的分工 當(dāng)應(yīng)用程序部署完后,Windows Azure Fabric控制器便開(kāi)始監(jiān)控應(yīng)用的狀態(tài),以保證應(yīng)用程序的正常運(yùn)行。為了使控制器能夠?qū)崟r(shí)獲取應(yīng)用和運(yùn)行實(shí)例的狀態(tài),所有Role實(shí)例,也即虛擬機(jī)實(shí)例 中都預(yù)先安裝了代理程序,F(xiàn)abric控制器就是通過(guò)這些代理來(lái)實(shí)時(shí)獲取相應(yīng)的狀態(tài)信息。當(dāng)檢測(cè)到實(shí)例故障的時(shí)候,F(xiàn)abric控制器就會(huì)啟動(dòng)新的包含同 樣服務(wù)的實(shí)例并添加到服務(wù)組中去。按照微軟的計(jì)劃,Windows Azure將在今年晚些時(shí)候提供另外一種稱(chēng)為VM Role的計(jì)算服務(wù),它將讓用戶(hù)對(duì)底層計(jì)算平臺(tái)有更多的控制權(quán),可以通過(guò)遠(yuǎn)程桌面服務(wù)(RDS)方式連接過(guò)去。其主要目的是要已有的Windows應(yīng)用程 序可以相對(duì)平滑地遷移到Windows Azure上去。 Windows Azure 提供的存儲(chǔ)不是一個(gè)關(guān)系型數(shù)據(jù)系統(tǒng),并且它的查詢(xún)語(yǔ)言也不是SQL,它主要被設(shè)計(jì)用來(lái)支持建于Windows Azure上的應(yīng)用,它提供更簡(jiǎn)單容易擴(kuò)展的存儲(chǔ)。當(dāng)然,對(duì)于在Windows Azure之外的應(yīng)用程序也可以通過(guò)標(biāo)準(zhǔn)的REST API來(lái)訪(fǎng)問(wèn)和使用這個(gè)存儲(chǔ)服務(wù)。Windows Azure主要提供了三種數(shù)據(jù)存儲(chǔ)方式以滿(mǎn)足應(yīng)用程序的不同需求,這三種存儲(chǔ)方式分別為Blob、Table和Queue。Windows Azure為了提升兼容性而提供的Drive其底層實(shí)現(xiàn)實(shí)際上就是Blob的一種。所有這三種存儲(chǔ)服務(wù)都可以通過(guò)標(biāo)準(zhǔn)的REST API來(lái)訪(fǎng)問(wèn)。 圖4:使用REST API訪(fǎng)問(wèn)存儲(chǔ)服務(wù) Windows Azure提供的存儲(chǔ)服務(wù)具有以下特點(diǎn):
Blob非常便于存儲(chǔ)二進(jìn)制數(shù)據(jù),比如JPEG圖片或MP3文檔等多媒體數(shù)據(jù)。Blob適用于部分應(yīng)用,但它存儲(chǔ)的數(shù)據(jù)缺乏結(jié)構(gòu)化,為了讓?xiě)?yīng)用能夠 以更易獲取的方式來(lái)使用數(shù)據(jù),Windows Azure 存儲(chǔ)服務(wù)提供了Table。它最大的不同之處是提供半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ),并且是一種可擴(kuò)展存儲(chǔ),它通過(guò)多個(gè)節(jié)點(diǎn)對(duì)分布式數(shù)據(jù)進(jìn)行擴(kuò)展和收縮,這比使用一個(gè) 標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫(kù)更為有效。與Blob和Table都是用于長(zhǎng)期存儲(chǔ)數(shù)據(jù)不同,Queue的主要功能是提供一種Web Role實(shí)例和Worker Role 實(shí)例之間通信的方式。而Drive的主要作用是為Windows Azure應(yīng)用程序提供一個(gè)NTFS文件卷,這樣應(yīng)用程序可以通過(guò)NTFS API來(lái)訪(fǎng)問(wèn)存儲(chǔ)的數(shù)據(jù)。提供這種Drive存儲(chǔ)方式使得遷移已有應(yīng)用程序到Windows Azure的過(guò)程變得更為平滑。無(wú)論數(shù)據(jù)以Blob、Table、Queue或Drive任何方式存儲(chǔ),Windows Azure存儲(chǔ)服務(wù)都會(huì)將所有數(shù)據(jù)復(fù)制三次,如果有一份拷貝出現(xiàn)問(wèn)題,存儲(chǔ)服務(wù)能自動(dòng)恢復(fù)出一份新的拷貝,保證應(yīng)用能夠準(zhǔn)確及時(shí)讀取原始數(shù)據(jù)信息。 Windows Azure應(yīng)用程序的自我感知對(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)用程序可以通過(guò)配置文件把自身運(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í)例的信息,包括:
服務(wù)運(yùn)行時(shí)編程接口可以通過(guò)兩種方式使用。對(duì)于.NET托管代碼,Windows Azure的SDK中包含一個(gè)名為Microsoft.WindowsAzure.ServiceRuntime.dll,當(dāng)用Visual Studio新生成一個(gè)云服務(wù)項(xiàng)目時(shí)它會(huì)被自動(dòng)引用。而對(duì)于本地代碼,可以通過(guò)使用SDK中的頭文件和庫(kù)文件就可以用C來(lái)調(diào)用這個(gè)編程接口了。 服務(wù)運(yùn)行時(shí)編程接口是應(yīng)用程序本身用來(lái)得到自身及其運(yùn)行環(huán)境信息用的,但是如果應(yīng)用程序之外,比如說(shuō)一個(gè)管理工具要得到指定應(yīng)用程序的信息,那么一 般需要利用另外一個(gè)稱(chēng)為服務(wù)管理的編程接口(Service Management API)。這兩個(gè)編程接口在功能有重合的地方,它們之間的最大區(qū)別在于服務(wù)運(yùn)行時(shí)編程接口在Windows Azure中運(yùn)行,而服務(wù)管理的編程接口一般在Windows Azure之外運(yùn)行,它更多的用在那些針對(duì)Windows Azure的管理工具開(kāi)發(fā)當(dāng)中。 常見(jiàn)的云計(jì)算應(yīng)用設(shè)計(jì)方式軟件+服務(wù)的方式當(dāng)微軟在2005年底提出軟件+服務(wù)的概念的時(shí)候,許多人都認(rèn)為這只是一個(gè)市場(chǎng)宣傳口號(hào)。但是,在過(guò)去幾年我們發(fā)現(xiàn)有越來(lái)越多的應(yīng)用通過(guò)軟件+服務(wù) 的模式取得成功。從應(yīng)用架構(gòu)角度來(lái)看,軟件+服務(wù)的方式結(jié)合了云服務(wù)和設(shè)備端兩方面的優(yōu)勢(shì)。從傳統(tǒng)的應(yīng)用如殺毒軟件,Live Messenger/QQ到幫助蘋(píng)果取得成功的iTunes,應(yīng)用商店等,都是結(jié)合了終端軟件和云計(jì)算服務(wù)的各自特點(diǎn)。 圖5:軟件+服務(wù)的方式 軟件+服務(wù)對(duì)于架構(gòu)師的意義在于在設(shè)計(jì)應(yīng)用架構(gòu)的時(shí)候,可以打開(kāi)思路,充分利用云和端的各自?xún)?yōu)勢(shì)。由于Windows Azure提供的服務(wù)如計(jì)算、存儲(chǔ)都是可以獨(dú)立使用,所以對(duì)于像一個(gè)做在線(xiàn)遠(yuǎn)程教學(xué)的應(yīng)用,在設(shè)計(jì)的時(shí)候就可以考慮自己構(gòu)建運(yùn)行應(yīng)用程序的網(wǎng)站,但是把課 件視頻等大數(shù)據(jù)量存放到Windows Azure的存儲(chǔ)服務(wù)上,大大降低項(xiàng)目對(duì)存儲(chǔ)設(shè)備的投資,從而降低項(xiàng)目的進(jìn)入門(mén)檻。 運(yùn)行在各種端設(shè)備上的應(yīng)用程序可以直接與構(gòu)建在Windows Azure平臺(tái)上的服務(wù)進(jìn)行交互,但是對(duì)于一些需要透過(guò)防火墻才能與互聯(lián)網(wǎng)上的云計(jì)算服務(wù)進(jìn)行集成的企業(yè)應(yīng)用來(lái)說(shuō),需要一個(gè)Internet Service Bus(ISB)來(lái)進(jìn)行應(yīng)用集成。Windows Azure AppFabric就提供了ISB的功能,讓企業(yè)內(nèi)部應(yīng)用可以不受防火墻和NAT等限制進(jìn)行服務(wù)集成。 我們?cè)谕ㄟ^(guò)軟件+服務(wù)的方式進(jìn)行應(yīng)用架構(gòu)設(shè)計(jì)的時(shí)候,由于是基于互聯(lián)網(wǎng)的分布式計(jì)算,因此要特別考慮到網(wǎng)絡(luò)延時(shí)對(duì)應(yīng)用的設(shè)計(jì)和架構(gòu)的影響。我們可以 采用不同的方式來(lái)降低分布式方式帶來(lái)的影響。比如盡量采用粗粒度的調(diào)用方式,降低軟件與云服務(wù)的交互次數(shù)。另外,在架構(gòu)設(shè)計(jì)的時(shí)候,盡量讓動(dòng)態(tài)數(shù)據(jù)與計(jì)算 工作靠近,讓靜態(tài)數(shù)據(jù)與使用用戶(hù)距離更近。Windows Azure的存儲(chǔ)服務(wù)在創(chuàng)建賬號(hào)的時(shí)候,用戶(hù)可以選擇數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)中心位置。除此之外,Windows Azure還提供了CDN服務(wù),從而使得應(yīng)用數(shù)據(jù)可以盡可能靠近訪(fǎng)問(wèn)用戶(hù)。 采用SOA設(shè)計(jì)方式云計(jì)算平臺(tái)能夠從資源使用的角度保證應(yīng)用程序的靈活性。但是要讓?xiě)?yīng)用的構(gòu)建和功能上保持靈活性,我們需要采用面向服務(wù)的方式來(lái)構(gòu)建我們的應(yīng)用,也就 是說(shuō)在云計(jì)算的環(huán)境下我們同樣需要SOA的思想來(lái)設(shè)計(jì)我們的應(yīng)用。我們一般認(rèn)為服務(wù)就是通過(guò)某種標(biāo)準(zhǔn)的接口來(lái)訪(fǎng)問(wèn)應(yīng)用的功能和數(shù)據(jù)。如果我們事先構(gòu)建了一 個(gè)服務(wù)池,那么就可以通過(guò)某種服務(wù)編排的方式來(lái)創(chuàng)建一個(gè)新的服務(wù)或一個(gè)新的組合應(yīng)用。這種構(gòu)建方式可以給應(yīng)用的架構(gòu)帶來(lái)很大的靈活性。 在云計(jì)算的環(huán)境下,我們可以融合軟件+服務(wù)和SOA的設(shè)計(jì)思想,從問(wèn)題本身需求出發(fā)設(shè)計(jì)和組合應(yīng)用的服務(wù),可以利用不同平臺(tái)上的服務(wù)而不在局限于企 業(yè)內(nèi)部。在設(shè)計(jì)服務(wù)的時(shí)候,一個(gè)重要的設(shè)計(jì)目標(biāo)就是讓服務(wù)變成平臺(tái)或者位置無(wú)關(guān)。新的服務(wù)或應(yīng)用可以組合在企業(yè)內(nèi)部的應(yīng)用服務(wù)以及部署在像Windows Azure云平臺(tái)上的應(yīng)用服務(wù),如下圖所示: 圖6:SOA設(shè)計(jì)方式 松耦合的架構(gòu)設(shè)計(jì)在云計(jì)算環(huán)境下,應(yīng)用程序的運(yùn)行環(huán)境等變得不像傳統(tǒng)環(huán)境那樣可控。對(duì)于大規(guī)模分布的應(yīng)用而言,要充分考慮到底層環(huán)境的單個(gè)節(jié)點(diǎn)出問(wèn)題的可能性。為了 保證應(yīng)用程序的可靠運(yùn)行,一般會(huì)采用松耦合的架構(gòu)設(shè)計(jì),并在架構(gòu)設(shè)計(jì)的時(shí)候考慮系統(tǒng)如何快速?gòu)腻e(cuò)誤中恢復(fù)過(guò)來(lái),比如狀態(tài)的保持,自動(dòng)化數(shù)據(jù)備份和恢復(fù)等。 另外,松耦合架構(gòu)設(shè)計(jì)不但可以增強(qiáng)系統(tǒng)的整體健壯性,還能增加系統(tǒng)的可擴(kuò)展性。 一種的常見(jiàn)的設(shè)計(jì)方式就是采用異步消息機(jī)制來(lái)實(shí)現(xiàn)松耦合的架構(gòu)設(shè)計(jì)。通過(guò)異步消息機(jī)制可以使得應(yīng)用各個(gè)模塊之間通過(guò)事先定義好的接口進(jìn)行異步通信, 相互之間就像一個(gè)不透明的黑盒子。比如對(duì)于Web應(yīng)用程序,我們可以通過(guò)這種方式把Web服務(wù)器、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間進(jìn)行隔離。在云計(jì)算環(huán)境 中,這種異步機(jī)制對(duì)于應(yīng)用程序的水平擴(kuò)展顯得更為重要。這也就是為什么無(wú)論是亞馬遜的AWS還是微軟的Windows Azure都會(huì)提供基于消息隊(duì)列的通信機(jī)制。下面是一個(gè)典型的基于Windows Azure的應(yīng)用架構(gòu)。 圖7:典型的基于Windows Azure的應(yīng)用架構(gòu) 在上面的架構(gòu)中,我們可以看到Web Role實(shí)例與Worker Role實(shí)例不再一一綁定,而是通過(guò)Windows Azure的存儲(chǔ)隊(duì)列進(jìn)行通信。因此,Web Role的實(shí)例數(shù)和Worker Role的實(shí)例數(shù)可以根據(jù)業(yè)務(wù)具體情況進(jìn)行分配。這種通過(guò)消息隊(duì)列的方式同時(shí)也很好的解決了數(shù)據(jù)的并發(fā)處理,并使整個(gè)系統(tǒng)具有良好的擴(kuò)展性。而且,某個(gè)實(shí) 例暫時(shí)停止工作都不會(huì)對(duì)整個(gè)系統(tǒng)造成大的影響,從而增強(qiáng)了應(yīng)用程序的可用性。 總結(jié)云計(jì)算無(wú)疑已受到大家極大的關(guān)注,但是它還是一個(gè)相對(duì)較新的概念,相關(guān)的技術(shù)正處于快速發(fā)展的過(guò)程中。我們已經(jīng)可以看到云計(jì)算對(duì)IT行業(yè)的硬件模 型,應(yīng)用模型和用戶(hù)體驗(yàn)等方面帶來(lái)了革命性的影響。從應(yīng)用模型的角度來(lái)看,云計(jì)算平臺(tái)的出現(xiàn)使得開(kāi)發(fā)人員可以快速的構(gòu)建高可用的,可以幾乎無(wú)限擴(kuò)展的應(yīng) 用。Windows Azure平臺(tái)為廣大開(kāi)發(fā)人員提供了一個(gè)開(kāi)發(fā)、設(shè)計(jì)和運(yùn)行應(yīng)用的云計(jì)算環(huán)境。隨著云計(jì)算相關(guān)技術(shù)的進(jìn)一步發(fā)展,我們也將在Windows Azure上看到越來(lái)越多的新特性,從而使我們能夠進(jìn)一步簡(jiǎn)化在其上開(kāi)發(fā)自我感知應(yīng)用的工作,另外非功能性的一些要求也將更多通過(guò)配置文件而不是代碼來(lái)實(shí) 現(xiàn)。 人們對(duì)于信息技術(shù)需求的發(fā)展始終沒(méi)有改變,那就是追求可靠,便捷,易用的信息應(yīng)用。當(dāng)我們把一個(gè)冰箱連接到電源插座的時(shí)候,我們從來(lái)不會(huì)去考慮這個(gè)電力是從哪個(gè)發(fā)電站來(lái)的,我們也不需要成為一個(gè)電力專(zhuān)家來(lái)使用這個(gè)冰箱。云計(jì)算的出現(xiàn)讓信息技術(shù)往這個(gè)方向更進(jìn)了一步。我們 認(rèn)為應(yīng)用程序?qū)⒅饾u演變成具有自我感知能力的應(yīng)用,成為一個(gè)能夠根據(jù)平臺(tái)環(huán)境和用戶(hù)請(qǐng)求進(jìn)行自我調(diào)整和自我修復(fù)的自治單元。也許不遠(yuǎn)的將來(lái),整個(gè)互聯(lián)網(wǎng)就 像一臺(tái)巨大的計(jì)算機(jī),其上提供無(wú)限的計(jì)算資源和服務(wù),人們使用其上的應(yīng)用程序就像我們現(xiàn)在使用自來(lái)水,電力那樣方便,自然。 |
|
來(lái)自: ShangShujie > 《資料》