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