毫無疑問,雲計算是目前信息產業中討論得最多的話題。雖然大家對於雲計算還沒有一致定義,但是對於雲計算的一些特點,相關的服務模型等內容日漸趨於統一。在討論雲計算應用架構特點之前,我們先從技術的角度來討論一下雲計算本身的一些特點。
- 按需服務
雲計算是一個把信息技術作為服務(IT as a Service)提供的一種方式。這種服務的概念都是從消費方(用戶)角度出發,而不是從服務提供方出發考慮問題,因此,一個基本特點是雲計算要求按需服務,即用戶可以根據需求即時得到服務。從這個角度講,雲計算就像我們公共服務中的自來水、電和煤氣一樣,集中供應並按需服務和計費。
- 資源池
雲計算的一個好處是提高資源的利用率,而這個一般需要通過共享的方式來達到這個目的。這里可以類比一下我們日常吃飯中的自助餐和桌餐的差別。如果需要共享就需要先把資源集中到一個公共的資源池中。在雲計算當中,根據這個資源池中資源的類別,我們把雲計算的服務模型分為三種,即所謂的SPI模型,如下表所示:
資源類別 |
雲計算服務模型(SPI) |
應用程序 |
Software as a Service (SaaS) |
系統平台 |
Platform as a Service (PaaS) |
基礎設施 |
Infrastructure as a Service (IaaS) |
- 高可擴展性
雲計算平台的資源池相對於單個用戶的需求而言是比較大的,因此考慮到會有大量不同用戶共用一個資源池,他們之間的資源使用模式一般存在一定的互補性,所以對於某個用戶的需求而言,雲計算具有很高的擴展性。另外,雲計算平台在做架構設計的時候,都會考慮到如何讓用戶可以平滑擴展他們的資源需求,比如計算資源,存儲資源等。
- 彈性服務
彈性服務指的是雲計算的資源分配可以根據應用訪問具體情況進行動態地調整。也正是因為如此,雲計算對於非恆定需求的應用,比如需求波動很大、階段性需求等,具有非常好的應用效果。在雲計算的環境中,資源的擴展方式可以分為兩大類,一種是事先可以預測的,比如一些季節性的需求。另一種是完全基於某種規則實時動態調整的。無論是哪一種,都要求雲計算平台提供彈性的服務。
- 自服務和自動化
對於自服務和自動化概念本身都比較好理解,但是我把這兩個放在一起是因為它們之間的內在聯系。自服務是雲計算中降低服務成本,提高服務便捷性的一種途徑,因此它是一個服務的提供方式。但是,對於雲計算服務提供方來說,自服務就要求盡量簡化用戶操作,降低用戶使用服務的難度,提升服務響應速度,而這個只能通過后台自動化的方式才能實現。因此從這個意義上來講,自服務是目的,而自動化則是手段。
- 服務可度量
管理學中有一句名言:沒有考核,就沒有管理。雲計算作為服務提供的方式,需要對服務進行度量。一般服務提供方和用戶之間需要有一個服務水平協議(SLA)。這樣對於私有雲來說,可以根據服務情況進行內部費用核算。而對於公有雲來說,服務可度量就是計費的前提,然后根據實際使用量來進行計費。
雲計算應用的特點
從前面的描述我們可以看到雲計算給應用程序帶來的一些挑戰,那就是應用程序如何在雲計算環境下充分利用雲計算平台的一些特點來更好的滿足用戶需求。雲計算應用要能夠利用雲計算環境中可動態擴展的資源,構建一個具有彈性的高可用應用程序。下面我們分別討論一下雲計算環境下的應用特點和要求。
- 自動化要求
自動化是人類的夢想,而計算機對自動化領域的發展有着巨大的影響,它極大的提高了工作和生產效率。在雲計算環境下,自動化要求實際上是對計算工作本身的一個自動化改變。雲計算的自動化可以賦予用戶對平台基礎架構的資源配置任務進行全面統籌的能力,並實現對資源的動態分配以提高管理效率、減少人為錯誤並加快用戶對資源請求的響應速度。應用程序在設計的時候要能充分利用雲計算環境的自動化特性,從而使得應用程序可以在很少或沒有人工干預的情況下,自動適應需求的變化。
- 分布式計算
大部分雲計算平台都是用廉價和標准的計算機硬件構成,然后通過雲計算軟件的方式在計算能力、可靠性等方面來達到傳統的大型計算機的水准。也就是說在雲計算環境下,資源池通常是通過分布式軟硬件方式來實現。因此雲計算應用程序的運行往往涉及到多個計算資源。無論是計算還是存儲需求,應用程序一般都會涉及到多個節點,這樣在設計的時候要考慮並行設計的思想或采用分布計算的方式。比如,有些雲計算應用可以根據計算的要求,采用類似MapReduce的編程模型。
- 松耦合
無論是功能上還是性能上雲計算對應用的靈活性提出了更高的要求。這就要求應用程序在設計的時候要考慮松耦合的架構。耦合度與靈活性一般是相反的,也即耦合度越高靈活性越低,而耦合度越低靈活性越高。因此,在做雲計算應用架構設計的時候,一般要追求松耦合的設計。比如,在做Web應用設計的時候,對於用戶狀態的保持就需要盡量采用無狀態的方式來設計,這樣應用程序的水平擴展能力比較好。
- 數據存儲方式
在傳統的應用設計中,我們一般采用關系型數據庫來存儲數據。但是在雲計算環境下,尤其是對於互聯網應用,存在兩個需要面對的問題。一是雲計算環境下的數據量都比較大,傳統的關系型數據庫面臨數據擴展能力的挑戰。另一個是許多應用對於數據存儲的要求更多體現在非結構化數據或者是半結構化數據的存儲上面。因此,大多數雲計算平台都會提供針對非結構化和半結構化的數據存儲方式。這樣應用程序的架構需要針對新的數據存儲方式作出調整。
上面描述的一些應用特點對我們開發和設計應用程序會帶來許多影響。一個是應用程序在設計的過程中不僅僅需要考慮操作系統平台或中間件級別的編程接口,還要針對其運行的雲平台的接口來對應用程序進行設計。另外一個比較大的影響是有一些工作量從平台產品轉移到了應用程序的開發設計人員。比如說,在采用半結構化數據存儲的時候,開發設計人員需要處理數據的一致性問題。還有,在雲計算平台上如果想要得到比較好的性能,開發設計人員往往還需要對數據的分區進行特別設計,或需要采用一些並行設計的算法等。