上節 Windows Azure雲端運算學習筆記1--Windows Azure簡介中是對Azure的一個總體概覽,這篇將第Windows Azure雲端運算做深入探討。
建立Windows Azure應用
-----------------------------------------------------------------------
對於開發人員來說,建立Windows Azure應用和開發一個傳統的windows應用很相似,而且Visual Studio提供了做雲應用程式開發的模版。為了能在開發機器上模型雲環境,微軟提供了development fabric,可以在本機電腦上類比包括web role, worker role,VM role和三種Azure雲端儲存方式等。開發人員可以在本地建立好Azure應用然後在運行在本地的development fabric上測試,就像在真實的雲環境中一樣。
在本地測試好了之後就發行就緒到windows Azure上去了。發布一般會有兩個過程,先是發布到綵排區(Staging Area),沒問題再發布到生產環境(production),如果發現問題,也可以從生產環境在切換到綵排環境上去。
綵排狀態的應用有類似<GUID>.cloudapp.net的網域名稱,使用者可以用來做自我裝載;發布到生產環境後就可以用自己的網域名稱yourapp.cloudapp.net,或者全部是自己的網域名稱比如 www.newmgdn.com
計算服務(Compute)
-----------------------------------------------------------------------
以前Web Role和Worker Role都只能運行在使用者模式下,有些功能就有限制,現在這兩個角色都可以運行在admin模式下,你可以幹你想乾的事,比如裝個COM組件啥的。
不過這些都是從一個乾淨的鏡像開始的,所以每次啟動一個執行個體你的COM組件啥的都得重裝一遍,少的話還好說,如果很多的話,效率就成問題了。對於這個問題的解決辦法就是VM role。你可以弄好一個虛擬機器鏡像VHD,以後新開執行個體直接從這個配置好的VHD開始就快多了。而且這種方式(VM Role)還支援在安裝過程中可以有使用者互動。
還有就是現在的Azure可以讓使用者指定他的資料放在哪個資料中心上,目前有美國、歐洲和亞洲三個資料中心。
儲存服務(Storage)
-----------------------------------------------------------------------
使用Azure 儲存服務,需要建立一個儲存帳號。
Blob--二進位大對象一般就能滿足大多數應用程式的需要,視頻啊、音頻,或者其他什麼資料。使用Blob,開發人員需要建立一個容器,每個容器可以保護一個或者多個blob。
要指定特定的blog可以用下面方式的URI:
http://<StorageAccount>.blob.core.windows.net/<Container>/<BlobName>
有兩種形式的blob:
塊Blob:每個最大200G。為提高傳輸效率,塊blob會分成塊,如果傳輸失敗只需再傳一遍失敗的塊就可以了,而不用重新傳輸整個blob
頁blob:最大到1T(1024G),整個頁blob被分成512位元組大小的頁,應用程式可以隨機的訪問blob中的任意頁。
blob相對好理解,表(Table)就複雜些。是Table的結構。
每個table包含一系列的entity,entity可以包含屬性(或者不包含),屬性由名字、類型和值組成。Azure支援的類型有二進位Binary,Bool,Datetime,Double,GUID,int,int64和string。根據值的情況,同一個屬性可以在不同時間具有不能的類型,一個實體entity裡也可以包含任意類型的entity。
不管包含什麼屬性,實體entity都作為一個讀寫單位,最大可以到1M。
可以看出,Azure儲存的Table和RDBMS的Table是不一樣的,這種結構比RDBMS有更大的延展性,且更簡單。
和Azure中的其他對象一樣,Table也可以以REST的方式來存取,.net應用可以用WCF Data Services來存取。其他類型的應用,包括.net也可以用REST的方式倆直接存取,比如用類似下面的URI:
http://<StorageAccount>.table.core.windows.net/<TableName>?$filter=<Query>
如果<query>返回結果多於一個,程式員可以得到一個後續的token用來繼續做重複查詢直到找到唯一的為止。遞迴的查就是了。
隊列(Queue)
隊列Queue主要是設計用來做資料交換用的。他也可以以REST的方式來存取,看下面形式的URI:
http://<StorageAccount>.queue.core.windows.net/<QueueName>
不過Azure中的隊列有點意思,和我們普通理解的先進先出隊列略有區別,看下面的工作流程:
一般來講,普通的隊列包含兩個操作就夠了,一個queue一個dequeue,一進一出。但Azure中的queue還有一個刪除訊息的操作,這是為啥呢?
上面的流程中,首先web role接到使用者的請求,然後把計算密集型的任務插入到隊列中讓worker role來處理。worker role先從隊列中取出一個來,並把這個訊息在一段時間內標記為hidden,然後就開始處理他。處理完成的話皆大歡喜,到隊列中把那個訊息刪除然後去下一個繼續處理。不過萬一要是worker role在處理過程中出錯了,失敗了,那咋辦?如果用普通的隊列,這個訊息估計就會被漏掉了。Azure 隊列中的機制是,worker role在Dequeue訊息時並不刪除訊息,只是在一定時間內(5分鐘)把他標記為hidden,然後去處理,如果處理失敗,5分鐘過去後,其他的worker role執行個體又可以看到這個訊息,從而使這個訊息能被別的worker role執行個體來處理。這樣的機制保證了每個訊息都能被正確的處理一次,從而保證系統的可靠性。
fabric controler
----------------------------------------------------------------------
對於雲應用來說,技術服務和儲存服務當然最重要,然而沒有fabric controler的統一調度管理,他們也幹不了啥活。fabric controler擁有資料中心的所有資源,也負責把使用者的應用程式指派到實體電腦上去執行。
比如一個使用者有5個web role執行個體和4個worker role執行個體,如果把任務指定到特定的執行個體上,當執行個體出錯時,你的應用也就掛了。 fabric controler把這些資源混搭一下組成容錯網域(fault domain),每個容錯網域裡有一下計算執行個體和儲存執行個體,並把雲應用分布到不同的容錯網域上。當某一個執行個體出問題時,並不會導致整個應用出錯。
此外還有更新網域(Update Domian)用來關閉系統進行更新操作,並把雲應用遷移到更新版本的系統上。
今天結束之前,有些連結:
-----------------------------------------------------------------------
Windows Azure Platform Home Page
http://www.microsoft.com/windowsazure
Introducing the Windows Azure Platform, David Chappell
http://go.microsoft.com/fwlink/?LinkId=158011
Windows Azure Blobs: Programming Blob Storage
http://go.microsoft.com/fwlink/?LinkId=153400
Windows Azure Tables: Programming Table Storage
http://go.microsoft.com/fwlink/?LinkId=153401
Windows Azure Queues: Programming Queue Storage
http://go.microsoft.com/fwlink/?LinkId=153402
今天到此為止,下節課繼續學習。