ODCA最佳實踐翻譯:Architecting Cloud-Aware Applications (一)

Architecting Cloud-Aware Applications

** ODCA(Open Data Center Alliance)最佳實踐 **
MagicBowen(e.bowen.wang@icloud.com) 翻譯前端

簡介

爲了更有效的利用雲計算的潛力,企業必須從根本上改變開發和運維的方式。在這種新的計算模式上採用新的開發方式才能更好地得到雲計算全方位的好處。在雲計算下,應用程序的構建、運行和消費方式都和以往大大不一樣,這些不一樣致使須要新的思考模式以及掌握新的設計模式才能取得最好的結果,這些技術和傳統解決問題時的權衡方式有所不一樣。web

本文檔爲專一於應用架構和開發實踐的開發人員提供了一個視角:從多個層面構建能夠充分發揮雲計算的獨特能力的應用程序體系架構。數據庫

爲了更有效的過渡到雲計算,開發者須要:後端

  • 瞭解基於雲計算的新的設計範式,區別雲和傳統的計算平臺在軟硬件上存在的基本差別。
  • 熟悉和使用可以構建更好的雲應用的軟件設計模式。
  • 發展和完善技能,針對雲計算的範式進行轉型。

摘要

爲了跟上日益普及的雲計算,開發人員必須在開發基於雲計算的應用架構時考慮雲的基本特徵。雖然開發人員很容易地將原來的分佈式軟件遷移到雲上,可是這種從物理到虛擬化(physical-to-virtual,P2V)的簡單移植並不能發揮出雲計算的獨特能力。使用明確爲雲環境所設計的設計模式,可讓軟件保持高水平的可靠性、安全性和彈性。設計模式

本文爲開發人員所寫:瀏覽器

  • 總結了雲計算應用程序體系架構的基本原理;
  • 介紹了雲計算應用程序的結構原則;
  • 提出了一些已經被證實有效的雲計算架構的設計模式;
  • 提出了雲計算應用程序的關鍵運維原則,經過雲應用成熟度模型幫助企業進行雲應用的演進。

開發人員、架構師、CTO、CIO等均可以從本文介紹的雲應用開發技術中受益!緩存

目標讀者

本文主要貢獻給軟件開發社區,同時爲任何在雲上構架、設計、實施、部署和運維服務的人員提供有價值的信息。安全

目標受衆有:服務器

  • 參與設計、開發和部署雲應用程序的軟件開發者;
  • 爲企業進行雲應用設計和部署的企業決策者;
  • 負責規劃、運營和採購的企業IT組織;
  • 致力於提升雲平臺互操做API和雲計算相關的標準和指南的標準組織;

術語

在本文檔中,「雲應用程序(cloud application)」這個詞指的是一組在雲中託管的組件(components)的集合,這些組件連通着一些在設備或者瀏覽器中運行的客戶端應用(client app)。例如,一個用戶可能使用iPad中的視頻播放器觀看電影,這依賴於在雲中運行的身份驗證、受權、媒體流、媒體存儲、緩存和其它服務組件,總的來講這些構成了一個完整的「雲應用程序」。可是本文只關注於託管在雲端的組件部分。網絡

應用程序架構的演進

隨着計算機硬件、網絡以及設備從我的電腦到智能手機的變化,應用程序架構也隨之演進。雲計算是最近的改變應用程序架構演進的力量。要了解雲計算如何改變軟件架構,須要看看在傳統的非雲環境中軟件架構是什麼樣子的。

分層體系架構

分層體系架構(見下圖)將應用程序的功能分佈在不一樣的層中。例如,在三層架構中:

  • 表示層提供用戶接口;
  • 中間層處理從客戶端過來的用戶請求,完成應用的商業邏輯;
  • 數據層提供應用的數據存儲;

電子郵件就是典型的三層架構。這種類型的應用包含一個表示層客戶端,例如運行在PC上的Outlook,一箇中間層的消息服務器(Exchange Server),以及一個後端信息存儲。中間層以API的形式對外提供服務。客戶端使用這些API和中間層通信,基於一個應用協議,如互聯網信息訪問協議(IMAP)。中間層每每與多個後端服務進行交互。在電子郵件系統中,中間層可能與後端的目錄服務、消息存儲、消息轉發代理等等進行集成。

分層體系架構中的每個組件一般都運行在各自獨立的服務器上,層之間經過靜態配置其依賴的服務器主機名來進行互通。這種分層架構每每比單體架構(monolithic architecture:即不作分層,把整個應用構建在一塊兒)有更多的優點。分層架構中每個組件均可以獨立運行而且層之間能夠提供負載均衡以便得到更好的性能和可靠性。由於中間層經過網絡API的方式進行訪問,因此多個客戶端能夠共享一箇中間層服務器。每一個層均可以獨立開發,只要接口和數據保持兼容。

在多層架構中,服務的部署是靜態的。層之間的依賴經過上電時的配置文件進行描述。例如:一個郵件客戶端經過配置文件知道郵件服務器的主機名和IP,客戶端沒法動態發現離本身最近的郵件服務器,它必須經過已知的主機名直接鏈接到服務器。

多數的web應用都是分層體系架構的例子。一個網絡服務器向用戶的網頁瀏覽器分發應用代碼和內容,用戶側使用JavaScript代碼爲用戶提供交互式體驗。中間層的服務器上每每運行Java、Ruby on Rails或者PHP等代碼爲前端用戶交付動態內容,反過來中間層須要與後端的數據庫服務進行通訊。

基於虛擬化環境的分層體系架構

許多企業已經將他們的應用遷移到本身的數據中心的虛擬化基礎設施上。在虛擬化環境中,應用組件是部署在虛擬機上而非傳統的物理硬件上。虛擬化可讓計算資源更有效的被利用,經過自動化手段減小資源供應時間和成本,從而提升效率。

在虛擬化環境中,應用的部署和配置和其在物理數據中心是相同的,例如都是經過靜態配置來構建的。然而,虛擬化可讓應用程序更高效的擴展,由於新的應用組件實例能夠按需建立和配置。這種動態性能夠經過基於虛擬化的負載均衡和虛擬IP(VIPs)來實現。分層架構中的每一層均可以獨立的進行擴展,而對其它層是透明的。

雲應用架構

爲雲建立應用程序時,開發人員能夠不改變他們原來架構應用程序的方式。例如:一個開發人員能夠簡單地把一個分層架構的應用部署到雲基礎設施上,特別是使用基礎設施即服務(IaaS),能夠方便地把原來基於獨立服務器的應用組件直接移植到對應的虛機(VM)上。然而,這種P2V的方式,並不能很好的讓應用程序發揮雲的獨特功能。傳統分層架構,一般和特定的基礎設施位置,例如服務器名稱、IP地址、以及網絡服務配置等強耦合。這種方式使得它基本難以在雲上進行快速的多虛機或多實例自動擴展。爲了更有效的發揮雲的全方位能力,開發人員必須在架構設計的時候全面考慮雲環境特色,包括彈性、自服務、和多租戶等。下圖對別了傳統的分層架構和基於雲架構應用的差別。

通常狀況下,使用雲平臺的應用程序須要知足分佈式系統的約束要求。Peter Deutsch在1994年描述了開發人員在開發分佈式系統時常常犯的8大謬誤。這些謬誤適用於跨網絡的分佈式服務系統,包括今天的雲架構應用。針對這些謬誤,Peter Deutsch提出了一些構建分佈式系統的原則和最佳實踐,這些最佳實踐能夠有效指導如何進行基於雲架構特色的應用架構設計。

相關文章
相關標籤/搜索