淺談Windos Azure架構與存儲
轉載請注明出處:https://blog.csdn.net/zbf8441372
寫在前麵:
Windows Azure是微軟發展出來的一套雲操作係統,用來提供雲聯機服務所需要的操作係統與基礎存儲與管理的平台。我關注Azure這個平台,主要是想了解他的架構,以及他的雲計算存儲技術。我覺得一個好的操作係統,就是一個好的架構。Windows Azure Platform現階段提供的是PaaS(平台即服務),但未來可能會開放基礎設施即服務(IaaS)的服務項目。
接下來,我主要分析他的架構以及存儲。
雲計算與Azure:
給個我認為概括地比較好的雲計算的定義:雲計算是一種標準化的IT能力,將軟件、應用平台、基礎設施整合建立起一個係統,通過Internet技術以按需和自助的方式提供服務。下麵我們會看到,Azure的框架中也整合了軟件、應用平台、基礎設施三塊內容。而這三塊內容正好對應SaaS, PaaS, IaaS。Azure雲操作係統看似的確涵蓋了雲計算的理念。
雲計算是網格計算( Grid Computing)、分布式計算(Distributed Computing)、並行計算(Parallel Computing)、效用計算( Utility Computing)、網絡存儲(Network Storage Technologies)、虛擬化(Virtualization)、負載均衡(Load Balance)等計算機技術和網絡技術相融合的產物。它將所有的計算資源集中起來,並由軟件實現自動管理,無需人為參與。顯然,因為分布式的關係,集群的管理需要負載均衡,海量的數據處理也將用到MapReduce這樣的編程模式。
微軟的張亞勤曾經給出過一個雲計算公式:雲計算=(數據軟件+平台+基礎設施)×服務。此公式表明了雲最重要的是服務,基於雲計算服務的三種模式,微軟雲計算采用了“軟件+服務”、“雲+端”的策略。Windows Azure Platform正是這一策略的具體實現:一方麵提供了可靠的軟件平台;另一方麵通過提供服務或者開放的係統運營企業服務。
接下來,我們就來看看Windows Azure是個怎樣的雲操作係統。
概觀:
Windows Azure(以及Azure服務平台)由微軟首席軟件架構師雷·奧茲在2008年10月27日於2008年在微軟年度的專業開發人員大會中發表,並於在2010年2月正式開始商業運轉(General Availability)。微軟為因應Windows Azure的營運需求,開始在全球主要地點建設數據中心,目前已正式營運的七個數據中心分別在:美國的芝加哥、聖安東尼奧及得克薩斯、愛爾蘭的都柏林、荷蘭阿姆斯特丹;新加坡及中國的香港。目前已有41個國家可以使用Windows Azure Platform服務。
Windows Azure是一個開放的平台,支持微軟和非微軟的語言和環境。開發人員在構建Windows Azure應用程序和服務時,不僅可以使用熟悉的Microsoft Visual Studio、Eclipse等開發工具,同時Windows Azure還支持各種流行的標準與協議,包括SOAP、REST、XML和HTTPS等。
下圖是微軟雲計算的構畫:
從圖中可以看到,可以玩的概念貌似都玩上了,從SaaS, PaaS到IaaS。Azure作為一個雲計算操作係統,提供Azure Platform,實現的是平台即服務。左側,看到最終的一個大目標叫IT as a Service微軟其實通過Azure這個平台,也在不斷整合自己的力量。平台既可以作為SaaS等雲服務的應用模式的基礎,也可以與微軟線下的係列軟件產品相互整合和支撐。比如Visual Studio 2010為Windows Azure提供了專門的項目模型。,哈哈。
微軟雲計算的“三駕馬車”
我們說Google公司有“三駕馬車”:BigData, GFS以及MapReduce。Windows Azure Platform同樣有“三駕馬車”:Windows Azure、SQL Azure、Windows Azure AppFabric。Windows Azure可看成是雲計算服務的操作係統;SQL Azure可看成雲端的關係型數據庫,接下去我們會在各種架構圖中看到SQL Azure並對他做簡單的介紹;AppFabric則是一個基於Web的開放服務,可以把現有應用和服務與雲平台的連接和互操作變得更為簡單。
Windows Azure Platform的組成
Windows Azure是一個雲服務的操作係統,它提供了一個可擴展的開發、托管服務和服務管理環境。SQL Azure是以SQL Server 2008為主,構建在Windows Azure之上,運行雲計算的關係數據庫服務,是一種雲存儲的實現,並提供網絡型的應用程序數據存儲服務,簡單地說就是SQL Server的雲端版本。AppFabric作為中間件層,起到連接非雲端程序與雲端程序的橋梁功能。我覺得一個好的中間件就是要讓開發人員可以把精力放在他們的應用邏輯上而不是在部署和管理雲服務的基礎架構上,不用去擔心服務的部署和管理問題,你隻要把你的東西丟給我,我中間件就給你動態部署,你需要了解的就是我給的接口信息。
架構:
說到雲操作,一定離不開分布式的平台管理和運行機製。
service 流程簡圖
我們用戶在彼端,我們要使用的app在雲端。Azure platform接受我們的請求,包括傳統的SOAP,現代一些的REST接口等等,然後在雲端平台上接受並處理,用戶隻管租用這個平台來使用雲端的服務,不需在本地下載這些services或者應用軟件。
Azure內的監控師
“監控師”這個名字是我在看了Azure大大小小的框架結構後起的,這位監控師就是Fabric Controller。
Windows Azure被安裝在數據中心的所有服務器中,並且通過定時和中控軟件:Windows Azure Fabric Controller進行溝 通,接收指令以及回傳運行狀態數據等等,係統管理人員隻要通過Windows Azure Fabric Controller就能夠掌握所有服務器的運行狀態。從這裏看Fabric Controller這個係統在Azure的架構中起到了實時監控的作用。
Windows Azure環境除了各式不同的虛擬機外,它也為應用程序打造了分散式的巨量存儲環境(Distributed Mass Storage),也就是Windows Azure Storage Services,應用程序可以根據不同的存儲需求來選擇要使用哪一種或哪幾種存儲的方式,以保存應用程序的數據,而微軟也盡可能的提供應用程序的兼容性 工具或接口,以降低應用程序移轉到Windows Azure上的負擔。存儲的部分也是一塊很重要的內容,在這裏不細說了,在後麵我會給出一點引子,提供一些資料供大家自己學習。
Windows Azure不但是開發給外部的雲應用程序使用的,它也作為微軟許多雲服務的基礎平台,像SQL Azure或是Dynamic CRM Online這類的聯機服務。
Fabric Controller
Fabric Controller是管理微軟數據中心的Windows Azure計算資源的中控管理係統,它負責自動化的管理數據中心內所有的實體服務器,包含由用戶要求的Windows Azure Guest OS的部署工作,定時的Hotfix修補,機器狀態回報,以及管理不同版本的VM部署圖像的複製等重要核心工作。我理解,Guest OS應該是用來接受和響應用戶請求的Managers,Host是他們的Master。Windows Azure Host OS,它是一個特製版本的Hyper-V Server,負責實體服務器內的Hypervisor虛擬平台層,總管其上的Windows Azure Guest OS群,同時它內含一個Fabric Agent中控軟件,以回報目前虛擬機的各項信息給Fabric Controller。
Fabric Controller本身也具有高可用性,並且有一個管理Fabric Controller的子係統(稱為"Utility" Fabric Controller)來管理與監控Fabric Controller的運作。
Fabric Controller也處理虛擬機的Health Management工作,當Windows Azure Guest OS發生當機時,會由Fabric Controller自動選擇不同的實體機器重新部署與啟動。當應用程序提交即地更新(In-place upgrade)時,Fabric Controller也負責即地更新的協調工作,以保持應用程序在更新時仍可保持SLA(服務等級協議)所承諾的服務水平。
Windows Azure計算資源與管理框架
總的來說,Fabric Controller是管理存儲數據的服務器的中控管理係統,其內部也有一個"Utility" Fabric Controller的子係統監控他自己,他自己也相當於是一個集群,有Master,有Manager,應該還有分布式協調器之類的東西來實現集群中的負載均衡等問題。
網絡基礎架構與應用程序部署模型
Windows Azure本身的設計是負責處理大量分散式計算的工作,並且符合雲計算的特性,因此應用程序在Windows Azure上可以自由設置一個或多個運行個體(Computes Instances),並且利用Windows Azure平台的特性,應用程序可切割為處理用戶界麵服務的Web應用程序,以及專門處理背景計算或數據處理工作的服務應用程序(Service Application),後端則可以用Windows Azure Storages或是SQL Azure數據庫來存儲數據。這就相當於前台和後台的關係。
SQL Azure是Azure Services Platform這個平台之上的微軟自己的東西。在Azure這個平台之上,微軟也推出了新的Live或者Online的雲端客戶端,本地是不需要安裝的。隻要你付錢租用Azure這個雲操作係統,你就可以用這些服務。這也符合PaaS的思想。
簡單介紹一下SQL Azure。
SQL Azure是一個雲的關係型數據庫,它可以在任何時間提供客戶數據應用。它基於SQL Server技術構建,但並非簡單地將SQL Server安裝在微軟的數據中心,而是采用了更先進的架構設計,由微軟基於雲進行托管,提供的是可擴展、多租戶、高可用的數據庫服務。這裏又談到了一個新的概念,多租戶。其實在談及分布式框架的時候,如果設計到了雲計算,那麼SaaS,多租戶這樣的概念往往是和雲計算捆綁出現的。
他其實在平台層實例了多個SQL Server數據庫引擎,他們各有一套不被其他實例共享的係統和用戶數據庫,可以獨立同時運行。他的底層框架是SQL Server Fabric,也是一個分布式框架,能實現負載均衡,備份恢複,數據容災等功能。如下分別是客戶端層,服務層,平台層,基礎設施層。
再回到網絡架構。為了處理單一應用程序多份運行個體的平衡負載,Windows Azure的Hypervisor層都有自帶Windows Azure Load Balancer(LB),它會將連入應用程序的連接進行負載分配,以維持每個運行個體都有足夠且合理的負載量。他相當於是一個分布式協調器,同樣做這樣的事的還是hadoop的zookeeper。
Windows Azure網絡與計算資源部署架構
Windows Azure提供了一個叫做“Role”的概念,每個Role可以被認為是一段程序,與普通的應用程序不同的是這段程序可以同時在一台或者多台機器上運行。 每個Role可以有多個實例(Instance),每個實例就對應一台虛擬機。對同一個Role而言,它所有的實例執行的程序都是相同的。現在有兩種類型 的Role:Worker Role(工作者角色)和Web Role(Web角色)。Web Role:是一個Web應用程序,它可以通過HTTP或HTTPS與外界通信,一般來說,Web角色響應請求,執行一個動作,然後等待下一個請求的到來。 Worker Role:是一種後台執行(Running On Background)的應用程序,運行.Net框架代碼的後台進程應用程序。
前台發來的請求,經過LB處理,然後分送給後台,後台Web Role和Worker Role是兩套不同的處理環境。Web Role相當於是個Web應用程序的用戶服務端,接受並處理ASP.NET,PHP,JSP之類的請求。Worker Role是不帶用戶界麵的處理大量計算工作的應用程序。它可以進行MapReduce型的分布式計算,也可作為處理高負載數據訪問或運行商業邏輯的應用程序。MapReduce是一個編程模型,也可以說是個分布式數據處理模型和執行環境。它的計算密集型的數據分析能力很強,本身分為Map和Reduce兩部分,他會盡量在計算節點上存儲數據,以實現數據的本地快速訪問,而這種data locality是他的核心特征。此外,MapReduce自己采用的是shared-nothing框架,所以他能實現失敗檢測,這意味著各個任務之間彼此獨立,所以程序是並行的(這裏可能講的簡單了一些)。
以上主要分析了Azure平台的兩桃框架,以及簡單介紹了下SQL Azure的框架,以及兩種分布式協調器,Fabric controller和zookeeper,也談到了MapReduce的計算模型。接下來談一下他的存儲。
存儲服務(Storage Services)
這是最近的一篇SOSP上的關於Azure的paper,標題是Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency,講的是它雲存儲的數據一致性。
WAS(Windows Azure Storage)目前用的是三種存儲形式:Blob(files),Table(structured storage)以及Queue(message delivery)。就簡單說一下這三種存儲形式的實現情況。
BLOB:用來存儲像是文件,圖片,視頻檔,可執行文件,壓縮檔等二進製格式的文件,基本上它的存儲單位就是文件,為了要讓BLOB的功能應用更寬廣,微軟也在BLOB服務上開發了內容傳遞網絡(Content Delivery Network)的服務,讓BLOB可以作為大容量的文件或數據存儲與供應的地方,以支持類似YouTube這樣的大型Web應用程序的服務。
Table:是給具結構化數據的應用程序存儲與管理的一種存儲服務,它在Windows Azure存儲區中會以Key-Value鍵值對方式存儲,並且由Partition來切割在Windows Azure存儲區的存儲位置,它實際的數據是XML,通過REST API調用時,會需要依據SDK上的說明,自行建置XML的要求與解析回應的數據。
Queue:是一種FIFO(先入先出)的存儲服務,它可以允許應用程序將消息存儲到隊列中排隊,然後由負責處理的應用程序(通常是 Worker)由隊列提取消息並處理以後,將消息由隊列中移除。
存儲具體可以見SOSP上Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency這篇paper。等我讀懂了paper裏內容的時候可能再編輯上來。
最後更新:2017-04-02 06:52:11