Azure,全程Azure Services Platform。主頁是Http://www.azure.com 。這是很新很新的玩意兒,目前不管是在國內(nèi)還是國外,都很少有人研究它。
對于我們這些早已習(xí)慣和熟悉Visual Studio各種開發(fā)的dev來說,我們很容易就會愛上Azure.官方也說了:Get Started Quickly Using Your Existing Skills. 也就是說,你根本不需要學(xué)習(xí)更多的知識,就可以通過Azure開發(fā)各種云端應(yīng)用,體驗(yàn)“云計(jì)算”。
也許幾句話根本介紹不完。確實(shí),我也是看了好幾天Whitepaper,SDK和Forum才完全了解了Azure的結(jié)構(gòu)和技術(shù)。先允許我用幾句“小農(nóng)意識”的話來概括Azure的好處吧:使用Azure,你再也不用到處去找支持ASP.NET的虛擬主機(jī)來放置Web Application和Web Services了,因?yàn)閃indows Azure提供“云里霧里”的HOSTING,比普通的虛擬主機(jī)更強(qiáng)大;你再也不用去尋找盜版SQL Server 200X和數(shù)據(jù)庫服務(wù)器了,因?yàn)樵赟QL Services里提供了RESTful的數(shù)據(jù)存儲,方便到家;你再也不用為你服務(wù)器的穩(wěn)定性煩惱,因?yàn)槟愕脑贫藨?yīng)用都部署在Azure上,使用微軟的infrastructure,穩(wěn)定性與安全性由微軟帝國來保證……
怎么樣?很不錯(cuò)吧?哈哈,其實(shí)這才是Azure的皮毛,我只提到了Azure最基本最容易理解的幾個(gè)服務(wù)而已。想要深入了解?繼續(xù)關(guān)注我Blog吧,我會在接下來的幾個(gè)月對Azure進(jìn)行全面研究和解析,并且制作一些完整的應(yīng)用程序。
好,現(xiàn)在你對Azure有一點(diǎn)基本的認(rèn)識了,讓我們繼續(xù)。
1.Azure platform包括4個(gè)部分:Windows Azure,.NET Services,SQL Services,以及微軟早就提供出來的Live Services.很顯然,另大多數(shù)人激動的只有前3個(gè)。4個(gè)部分都包括很多具體的服務(wù),我們在以后會一一介紹。
2.你所開發(fā)的應(yīng)用程序,可以被多種客戶端使用。
3.你所開發(fā)的應(yīng)用程序,可以放在你自己的服務(wù)器,也可以通過Windows Azure提供的服務(wù),部署在云端。不管你的程序在“平地”還是在“云端”,它們都可以調(diào)用Azure Platform提供的其他各種服務(wù)。
了解Azure的基本結(jié)構(gòu)后,如何進(jìn)行學(xué)習(xí)?
首先,你需要到官方網(wǎng)站http://azure.com去申請內(nèi)測資格。地址http://www.microsoft.com/azure/register.mspx
說明一下,不然很多人可能會confused.如上文說的,Azure包括Windows Azure,.NET Services,SQL Services,Live Services4塊。不知道微軟怎么想的,它把Windows Azure和Live Services的dev portal放在了一起,地址是http://lx.azure.microsoft.com/ 。而.NET Services和SQL Services的dev portal放在了另一個(gè)地方:http://portal.ex.azure.microsoft.com/ .在申請內(nèi)測資格(invitation code或token)的時(shí)候不用區(qū)別,只需要申請一次就可以了。但是微軟在發(fā)放invitation code的時(shí)候,會對于以上兩個(gè)不同的portal分別發(fā)放。
可以參考一下國外的一篇博客Setting Up the Windows Azure Services Platform。不過作者只收到了SQL Services+.NET Services的invitation code.
一定要強(qiáng)調(diào)的是,等邀請碼是很需要耐心的??纯蠢贤鈱懙倪@篇文章:Waiting for Windows Azure Tokens? seems many are in the same boat ..
所以,填寫資料的時(shí)候一定要認(rèn)真……如果有不明白直接給Sriram Krishnan 發(fā)郵件,他自稱"I work for the Windows Azure team and I'm the token/invitation master in sorts”,我拿到token之前就騷擾過他……(sriramk@microsoft.com)
然后,你需要下載以下官方學(xué)習(xí)資源:
官方的資料比較多,以下兩個(gè)最重要。
Introducing the Azure™ Services Platform:這是一個(gè)30多頁的pdf文件,對Azure進(jìn)行了全面的介紹(不涉及技術(shù))。
Azure Services Training Kit - PDC Preview:這是官方的教程,色香味俱全。也是目前能夠找到的唯一教程。(我google幾天了,目前真的沒有其他第3方教程了。)
接下來,當(dāng)然是SDK:
Windows Azure Tools for Microsoft Visual Studio
Microsoft SQL Data Services SDK
Live Framework Documentation and Resources
這里需要再次說明一下:對于Azure platform的4個(gè)部分,都有不同的SDK和工具。其中只有Windows Azure稍微特殊一點(diǎn),需要Vista或windows2008操作系統(tǒng)。
Then,開發(fā):
Azure的開發(fā)過程與普通.NET的開發(fā)過程沒啥區(qū)別:
使用Visual Studio開發(fā) - 開發(fā)中使用Azure的各種服務(wù) - 發(fā)布- 登陸dev portal部署到“云”里
什么是SDS?
為什么要使用SDS?
Flexibility and scale,Business-ready reliability and security,Developer agility
SDS在Azure Services Platform中的地位:
SDS是Azure四大模塊之一,在云端為天上地下的應(yīng)用程序提供數(shù)據(jù)服務(wù),也為其他的Azure Services模塊提供數(shù)據(jù)服務(wù)。
SDS支持的數(shù)據(jù)類型
SDS支持 String(字符串), Decimal(十進(jìn)制數(shù)), Boolean, DateTime, and Binary 幾種基本的數(shù)據(jù)類型,還支持一種叫BLOB(binary large object )數(shù)據(jù)類型,允許你存儲任何格式的內(nèi)容。
申請地址:
http://go.microsoft.com/?linkid=9373222
Dev Portal
http://portal.ex.azure.microsoft.com
ACE模型
終于進(jìn)入重點(diǎn)了。在使用SDS之前,你必須了解SDS的ACE(Authority,Container,Entity)模型。Authority是最高level的對象。一個(gè)Authority包含了多個(gè)Container,一個(gè)Container包含多個(gè)Entity.如下圖
我們可以把Authoriy想象成SQL Server中一個(gè)數(shù)據(jù)庫實(shí)例(SQL Server instance)。那么,Container就好比實(shí)例中的多個(gè)相互獨(dú)立的數(shù)據(jù)庫了。而Entity就相當(dāng)于一條記錄。這樣類比只是一個(gè)直觀的概念,其實(shí)ACE模型和關(guān)系數(shù)據(jù)庫是有區(qū)別的。
如果要準(zhǔn)確類比的話,Container可以等同于關(guān)系數(shù)據(jù)庫中的一個(gè)獨(dú)立database,也可以等同于一個(gè)table。Entity是一條數(shù)據(jù)記錄沒錯(cuò),但是Entity的是任意的,不需要像關(guān)系數(shù)據(jù)庫里那樣,在一個(gè)table里有一個(gè)特定的結(jié)構(gòu)定義。大家看上圖可以注意到,一個(gè)Container可以包含多種結(jié)構(gòu)不同的Entity。
舉個(gè)實(shí)際例子,如上圖所示,我們可以創(chuàng)建一個(gè)叫做"food"的Authority,其下包括名為"fruit"和"vegetable"兩個(gè)Container. Container["fruit"]中包括3個(gè)實(shí)體,分別是"apple1","apple2","pear1".注意,這里我們假設(shè)五角星代表pear,三角形代表apple。這樣,在這個(gè) Container["fruit"]就包括了兩種類型的三個(gè)Entity。同樣,在Container["vegetable"]中,我們假設(shè)圓形是白菜cabbage,方形是西紅柿tomato,我們又有了"tomato1","tomato2" ,"cabbage1"三個(gè)entity,它們也屬于兩種不同類型。。
呵呵,根傳統(tǒng)的instance-database-tabale-row的模型很不一樣吧?不要緊,現(xiàn)在先記住基本的結(jié)構(gòu)就好了,在下一節(jié),你會有機(jī)會動手把玩一下它們。
編程模型
每個(gè)Authority都對應(yīng)特定的URI。比如一個(gè)叫做food的Authority,它的HTTP地址就是https://food.data.database.windows.net/v1 ,可以直接在瀏覽器中打開(在瀏覽器zhogn1直接打開,等同于執(zhí)行HTTP的GET方法)
有了Authority的URI,你會發(fā)現(xiàn),Container和Entity的URI也很容易找到了。格式如下:
https://food.data.database.windows.net/v1/<container-id>
如https://food.data.database.windows.net/v1/fruit/
https://food.data.database.windows.net/v1/<container-id>/<entity-id>
如https://food.data.database.windows.net/v1/fruit/apple1
HTTP Verb | SDS Operation |
GET | Fetch,Query,(即Select) |
POST | Create,(即Insert) |
PUT | Update |
DELETE | Delete |
這一篇,我們會詳細(xì)講解如何使用程序員的方法來操作SDS。
SDS提供SOAP和REST兩種接口,這里我們是用REST+C#的方法來講解。SOAP與之殊途同歸,請有興趣的同學(xué)自己查閱MSDN。
閑話少說,下面我們以創(chuàng)建Authority為例,給出REST操作SDS的“萬能框架”:
public string CreateAuthority()
{
const string AuthorityTemplate =
@"<s:Authority xmlns:s='http://schemas.microsoft.com/sitka/2008/03/'>
<s:Id>{0}</s:Id>
</s:Authority>";
if (String.IsNullOrEmpty(ServiceUri))
{
throw new ArgumentOutOfRangeException("ServiceUri");
}
string authorityUri = null;
try
{
string requestPayload = string.Format(AuthorityTemplate, authorityId);
//步驟二:建立用以傳送數(shù)據(jù)的HttpWebRequest對象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ServiceUri);
//步驟三:將用戶名和密碼放置在HttpWebRequest對象的Credentials中
request.Credentials = new NetworkCredential(userName, password);
//步驟四(:設(shè)置Http方法。HTTP方法與數(shù)據(jù)操作方法的對照: POST=create; PUT=update; DELETE=delete; GET=retrieve 。在這個(gè)例子中,我們需要create,所以選擇POST方法。
request.Method = "POST";
//步驟五(藍(lán)色部分):傳送數(shù)據(jù)到服務(wù)器。顯然,這一部分只有在POST方法和PUT方法時(shí)才會有,對于GET方法和DELETE方法則不需要。
UTF8Encoding encoding = new UTF8Encoding();
request.ContentLength = encoding.GetByteCount(requestPayload);
request.ContentType = XmlContentType;
// 傳送數(shù)據(jù)
using (Stream reqStm = request.GetRequestStream())
{
reqStm.Write(encoding.GetBytes(requestPayload), 0, encoding.GetByteCount(requestPayload));
}
//步驟六 :獲取服務(wù)器響應(yīng),根據(jù)服務(wù)器的相應(yīng)獲取操作結(jié)果
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode != HttpStatusCode.Created)
{
Console.WriteLine("Failed to create authority");
}
authorityUri = "https://" + authorityId + ".data.database.windows.net/v1/";
}
catch (WebException ex)
{
Console.Error.WriteLine(ex);
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
{
string errorMsg = ReadResponse(response);
Console.WriteLine(string.Format("Error: {0}", errorMsg));
Console.WriteLine("Unexpected status code returned: {0} ", response.StatusCode);
}
}
return authorityUri;
}
至此,數(shù)據(jù)庫的四種操作(CRUD,Create,Read,Update,Delete)我們都已經(jīng)講過了。對,就是這么容易。 由于時(shí)間關(guān)系,我只在附件內(nèi)寫出了Authority,Container,Entity三種結(jié)構(gòu)的Create操作。相信讀者看完這篇文章后,自己改寫成其他操作并非難事。 .NET Services在Azure Services Platform中的位置如下圖所示。 .NET Services首先是Services,我們可以在portal里對它們進(jìn)行配置和管理,同時(shí)在程序里使用他。另外,和SQL Services一樣,.NET Services不僅可以被云端程序使用,普通的應(yīng)用程序也可以使用它。 .NET Services包括三個(gè)部分:Access Control,Service Bus,Workflow。在接下來的幾節(jié)中我們會介紹。本節(jié)只做概要介紹。 Access Control :隨著應(yīng)用程序越來越復(fù)雜,角色越來越多,控制用戶的access權(quán)限變得很重要。不僅單純是網(wǎng)站頁面的瀏覽權(quán)限問題,在各種服務(wù)中也需要,比如WCF服務(wù)。主流的解決反感是讓用戶提供token,應(yīng)用程序根據(jù)token去判斷權(quán)限。Access Control就是提供這樣一種服務(wù)。她規(guī)定了自己的一種基于token規(guī)則。配置用戶權(quán)限、識別token判斷用戶權(quán)限這些事再也不需要程序員自己來做了!Access Control會幫你完成得很好! Service Bus: 這個(gè)功能太好解釋了。"Service Bus",顧名思義,就是把"Service"放在"Bus"里。事實(shí)也是這樣,Service Bus就是把Web Service的EndPoint封裝在一起,方便客戶段使用者發(fā)現(xiàn)可以使用的Web Service,這就是Service Bus的主要功能。此外,Service Bus還有一牛x功能:網(wǎng)絡(luò)地址轉(zhuǎn)換和穿防火墻——以后有機(jī)會再慢慢說。 Workflow :Workflow相信很多做.net開發(fā)的朋友已經(jīng)再熟悉不過了。.NET Services提供的Workflow服務(wù)很容易理解:就是把平時(shí)大家用的本地WF邏輯運(yùn)行在云端。這倒是一個(gè)非常實(shí)用的服務(wù)。 清楚了吧?呵呵,其實(shí)Azure這一整套平臺提供的都是"思想大于技術(shù)"的東西,不增加程序的負(fù)擔(dān),讓開發(fā)者使用已有的技術(shù)體驗(yàn)到云計(jì)算帶來的好處。 沒有安裝Microsoft .NET Services (Dec 2008 CTP) SDK的朋友直接直接下載本文附件使用。 使用實(shí)例: 首先,打開Microsoft .NET Services (Dec 2008 CTP) SDKSamplesServiceBusGettingStartedEchoCS35 目錄下的Visual Studio解決方案EchoSample.sln很簡單吧? 所有的
public string DeleteEntity(string entityId)
{
//由于刪除是HTTP中的Delete操作,所以無步驟一和步驟五
string EntityUri = string.Format("https://{0}.data.database.windows.net/v1/{1}/{2}",
authorityId, containerId, entityId);
try
{
//步驟二: WebRequest request = HttpWebRequest.Create(EntityUri);
//步驟三: request.Credentials = new NetworkCredential(userName, password);
//步驟四: request.Method = "DELETE";
//步驟六:using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
{
Console.WriteLine("Failed to delete the entity resource.");
}
}
}
catch (WebException ex)
{
string errorMsg = ex.Message;
Console.WriteLine("Deletion failed: {0}", errorMsg);
if (ex.Response != null)
{
using (HttpWebResponse response = ex.Response as HttpWebResponse)
{
Console.WriteLine("Unexpected status code returned: {0}", response.StatusCode);
}
}
}
} UPDATE的
輸入方案的用戶名和密碼。(在http://portal.ex.azure.microsoft.com中設(shè)置的)驗(yàn)證成功后控制臺會給出一個(gè)類似"sb://servicebus.windows.net/services/sixsix/EchoService”的URI。
然后再啟用一個(gè)客戶端(Client)的調(diào)試實(shí)例。同樣要求輸入Solution名和密碼。
此時(shí)客戶端已經(jīng)已經(jīng)連上服務(wù)端的服務(wù)了。
相信大家通過解決方案名都已經(jīng)知道這個(gè)服務(wù)的作用了,很簡單,就是客戶段輸入字符串到服務(wù)端,服務(wù)端向客戶端傳回同樣的字符串。
通過實(shí)例看Service Bus有啥用:
顯然,這個(gè)實(shí)例中使用的服務(wù)是網(wǎng)絡(luò)編程中最基礎(chǔ)的Echo服務(wù)。我們使用了Username/Password的驗(yàn)證方式。
讀者可以嘗試關(guān)掉服務(wù)端。你會發(fā)現(xiàn),客戶端沒有任何變化,只是不能再調(diào)用服務(wù),不能得到echo而已。這說明Service Bus其實(shí)起了一個(gè)橋接作用。服務(wù)端程序無論運(yùn)行在怎樣的網(wǎng)絡(luò)環(huán)境下,無論是在NAT之內(nèi)還是公共環(huán)境,也不在乎這個(gè)服務(wù)的IP如何更改,甚至服務(wù)處于防火墻后面,客戶端對其的定位依賴于Service Bus提供的統(tǒng)一URI,Service Bus為服務(wù)提供了注冊與地址解析。在本例中,Echo服務(wù)的地址始終是"sb://servicebus.windows.net/services/sixsix/EchoService/”,該服務(wù)的實(shí)際網(wǎng)絡(luò)環(huán)境和地理位置,對客戶機(jī)是完全透明的。這是上一節(jié)提到的,Service Bus的一個(gè)實(shí)用的牛X功能。
他的具體理解是這樣的:Windows Azure提供了對ASP.NET應(yīng)用程序的托管,并且,“云計(jì)算”離我們那么近,只要把ASP.NET應(yīng)用程序部署到Window Azure 上,以前的ASP.NET應(yīng)用程序就變成“云應(yīng)用”了!
那么,Windows Azure應(yīng)該怎么用?它到底比一般的虛擬主機(jī)牛在哪兒?那還的從Windows Azure的服務(wù)架構(gòu)說起。
Roles(角色):
先說說角色問題吧,非常重要。不理解Windows Azure關(guān)于Role的概念,是沒辦法懂得微軟煞費(fèi)苦心的”云”的。
部署到Windows Azure上的程序扮演著以下兩種角色:Web Role和Worker Role。
Web Role:顧名思義,就是提供Web服務(wù)的角色。簡單地說,Web Role就是ASP.NET Applicantion,是你本地ASP.NET Application的云端版本!支持HTTP/HTTPS協(xié)議,還能提供WCF服務(wù)。
這個(gè)Workder Role頗具有“云”的概念:一直在云端悄悄運(yùn)行,地面上的人看不到它,但卻不能沒有它。 Role的附件 Web Role和Worker Role這兩個(gè)小朋友也是帶了家屬一起加入到Windows Azure這個(gè)大家庭的,它們暫時(shí)包括: 把Local Storage作為緩存使用 健康報(bào)告 呵呵,這些也是普通的虛擬主機(jī)無法有的吧? “云主機(jī)”的功能是非常強(qiáng)大的,配套是非常完善的! 服務(wù)定義(Service Definition) 程序生活在Windows Azure這個(gè)新環(huán)境里往往會感到納悶,會懷疑人生:我到底是Web Role還是Worker Role呢? 這就需要我們來幫助它們了。 Windows Azure使用了一類后綴.csdef的文件來定義服務(wù)。包括:這個(gè)服務(wù)到底似乎Web Role還是Worker Role?使用HTTp還是HTTPS ? 哪里去找Local Storage這個(gè)親家來幫忙?諸如此類的信息。
Web Role和Worder Role這兩個(gè)小朋友在得到關(guān)于職業(yè)規(guī)劃的答復(fù)后,又產(chǎn)生了對職業(yè)生涯方面的疑問:具體應(yīng)該怎么做呢?
這就需要用到服務(wù)配置了。顧名思義,就是對具體服務(wù)的具體配置了。我們采用.cscfg為后綴的文件來保存它們。它擔(dān)當(dāng)著與ASP.NET中的Web.Config文件類似的任務(wù),且任務(wù)更重?! ?/p>
【準(zhǔn)備知識0】INTRODUCING THE AZURE SERVICES PLATFORM
【準(zhǔn)備知識1】忘掉SQL Server 200X——Introducing SQL Data Services(SDS)
【準(zhǔn)備知識2】別把Windows Azure當(dāng)虛擬主機(jī)使—理解Windows Azure服務(wù)架構(gòu)
【準(zhǔn)備知識3】赤手空拳玩轉(zhuǎn) SQL Data Services(SDS)
【準(zhǔn)備知識4】SQL Data Services 編程基礎(chǔ)
最終效果圖如下:(也可通過http://ibm.cloudapp.net查看網(wǎng)絡(luò)版本)
開發(fā)過程:
1.啟動本機(jī)Windows Azure SDK里的Development Fabric,打開本機(jī)的調(diào)試運(yùn)行環(huán)境。
關(guān)于Web Role和Worker Role的區(qū)別于聯(lián)系,請參考【準(zhǔn)備知識2】。
3.打開SQL Data Services SDK里的SDS Explorer。配置好用戶名、密碼;新建Authority和Container。 具體操作過程請參考【準(zhǔn)備知識3】。
4.在這里,我們新建了名叫“guestbook”的Authority和一個(gè)叫做“1st”的Container?,F(xiàn)在我們將它們配置到GuestBook_WebRole項(xiàng)目的web.config文件里面,以便程序讀取。
5.在GuestBook_WebRole中新建CloudDataHelper類。里面寫入對SQL Data Service的一些基本操作。詳細(xì)代碼見附件。
以下是讀取配置文件和存儲數(shù)據(jù)的函數(shù)示例。
6.在Default.aspx頁中拖入幾個(gè)控件和簡單的邏輯代碼。呵呵,這就不用我教了吧?詳細(xì)內(nèi)容同樣包含在附件里。
7.F5進(jìn)行Debug運(yùn)行。如果運(yùn)行成功的話,首頁會出現(xiàn)在你的面前——就像調(diào)試傳統(tǒng)的ASP.NET Web Application一樣。同時(shí),在Development Fabric里會出現(xiàn)一些相關(guān)的信息。
如果發(fā)布成功,此時(shí)VS會彈出兩個(gè)框在你面前:
包含發(fā)布文件的文件夾和Azure Services Developer Portal(需用LiveID登錄)
如果你有關(guān)于Azure Services Developer Portal的疑問,請參考【準(zhǔn)備知識0】.
10.介紹一下Hosted Service的主界面吧:如下圖。每個(gè)Host在Windows Azure上的應(yīng)用程序包括兩種狀態(tài)(或者理解為兩個(gè)不同的部署平臺):Production和Staging. 簡單地說,Production是正式部署的地方,Staging是放內(nèi)部測試部署的備份服務(wù)器。
11.我們先把我們的應(yīng)用程序部署到Staging服務(wù)器上。點(diǎn)擊上圖中的Deploy按鈕,進(jìn)入以下界面。根據(jù)提示上傳剛才Publish時(shí)生成的兩個(gè)文件。
12.在Staging服務(wù)器上Deploy成功后,點(diǎn)擊下圖中間的圓圈,將Staging服務(wù)器上的內(nèi)容交換到Production服務(wù)器上,并點(diǎn)擊”Run”按鈕。注意:這兩個(gè)過程都需要較長的等待。
Windows Azure由兩個(gè)重要部分構(gòu)成:
虛擬化計(jì)算服務(wù)(提供基于VM主機(jī)。在上一篇里已經(jīng)示范過它。)
各種數(shù)據(jù)存儲服務(wù)。即本文要介紹的Windows Azure Storage。
Windows Azure Storage可以讓程序員存儲他們想存儲的任何數(shù)據(jù)。按照“云計(jì)算”的概念,數(shù)據(jù)一旦存儲到“云”中,就永遠(yuǎn)不會丟失,程序員可以在任何時(shí)候、從任何終端和任何地方獲取任意大小的數(shù)據(jù)。Windows Azure Storage正是繼續(xù)遵循這一思想。
Windows Azure Storage由三個(gè)重要部分構(gòu)成:
Windows Azure Blob:存儲大型數(shù)據(jù)
Windows Azure Table:存儲表數(shù)據(jù)。類似關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)表,但不同。
Windows Azure Queue:為異步工作提供分派消息服務(wù)。有點(diǎn)類似Windows系統(tǒng)自身的消息隊(duì)列。
接下來我們來以此介紹這3個(gè)數(shù)據(jù)服務(wù)。
Windows Azure Blob
Windows Azure Blob的數(shù)據(jù)模型非常簡單,看一眼就不會忘記。我們真的大可以把它想象成云端的一個(gè)無限大的硬盤。它的結(jié)構(gòu)如下圖:
大家先別看“Block”部分。很一目了然吧? 一起繼續(xù)YY: 如果Account是那塊硬盤,Container就代表不同分區(qū)(可惜分區(qū)里沒有文件夾概念),Blob就是分區(qū)根目錄里不同的文件。那么上圖的意思是:在我的那塊叫做"sally”的硬盤里,有"pictures”和"movies”兩個(gè)分區(qū),"pictures”分區(qū)根目錄里有"IMG001.JPG “”IMG002.JPG”這兩個(gè)文件。
http://<account>.blob.core.windows.net/<container>/<blobname>
例如:http://maheshwar.blob.core.windows.net/livesearchimages/AcacusDesert_EN-US1025081982.jpg (這是一張圖片,點(diǎn)擊鏈接可直接訪問)
現(xiàn)在可以繼續(xù)解釋上圖中的“Block”了。既然是采用REST的方式,就是通過HTTP的方式,那么真正很大很大的文件,比如1G的電影,要直接傳上去顯然是一件非常困難的事。Block就是為解決這個(gè)問題而存在的。只要你心情好,你大可以把這個(gè)電影分割成1000個(gè)1M的Block來上傳。Block對下載流程是透明的,下載者根本不知道也不用去知道它正在下載的文件被分成了多少個(gè)block。
(事實(shí)上筆者真的用它做自用的網(wǎng)絡(luò)硬盤,從開發(fā)和使用角度來說都非常方便,以后有機(jī)會我整理一下代碼與大家分享一下)。
Windows Azure Table
正在使用VS200X來開發(fā)簡單ASP.NET應(yīng)用程序的時(shí)候,你會許和很多人一樣有以下兩個(gè)重要習(xí)慣:使用關(guān)系數(shù)據(jù)庫(如SQL Server);數(shù)據(jù)庫中的某些表直接對應(yīng)程序里的實(shí)體類。你或許會使用代碼生成工具,ORM工具,或者自己寫三層架構(gòu)來完成關(guān)系數(shù)據(jù)庫to對象的映射。發(fā)現(xiàn)沒,此時(shí)的你是多么希望能夠直接將實(shí)體存入數(shù)據(jù)庫當(dāng)中啊!
Windows Azure Table服務(wù)就是用來解決這個(gè)問題的。它可以直接將實(shí)體類、實(shí)體對象存入表格結(jié)構(gòu)當(dāng)中。它讓太多的人感到欣喜。
它比較類似傳統(tǒng)關(guān)系數(shù)據(jù)庫當(dāng)中的表格,但是又有很大不同。先看下圖的結(jié)構(gòu):
與你想的一樣,它支持LINQ, REST。HTTP地址是 http://<account>.table.core.windows.net
這部分內(nèi)容比較多,過幾天我會單獨(dú)使用一節(jié)的內(nèi)容來做一個(gè)簡單Demo講解它的使用。
Windows Azure Queue
Windows Azure Queue因?yàn)閃indows Azure的服務(wù)架構(gòu)而存在——這個(gè)一個(gè)需要消息隊(duì)列的架構(gòu)。
我們在《【Azure Services Platform Step by Step-第7篇】別把Windows Azure當(dāng)虛擬主機(jī)使——理解Windows Azure服務(wù)架構(gòu)》里了解過,Windows Azure VM中是如何引入了Web Role和Worker Role這一非常創(chuàng)新的概念,從而脫離了普通虛擬主機(jī),晉升為“云主機(jī)” : )
Windows Azure Queue最常見的一個(gè)應(yīng)用就是作為Worker Role和Web Role之間通訊的消息隊(duì)列。
再舉個(gè)例子。Web Role是前臺賣牛肉面的,Worker Role是后臺煮牛肉面的。顧客只能接觸到Web Role這個(gè)店員,它收集不同顧客的需求,保持先來后到的順序記錄這些需求到一疊紙條上遞給大廚Worker Roler。大廚Worker Role帶著口罩,什么話也說不出來,他的工作就是按順序完成紙條記錄的任務(wù)。Windows Azure Queue就充當(dāng)了這個(gè)“任務(wù)紙條”的作用。
理解完了“牛肉面”的例子,再看看下圖結(jié)合一下“云計(jì)算”的實(shí)際吧。是不是很容易理解呢?
Windows Azure Table 與SQL Data Services 的重要不同之處:
博客園網(wǎng)友 montaque和老趙同志在《【Azure Services Platform Step by Step-第8篇】開發(fā)部署Azure留言板》一文的評論中一起討論了Windows Azure Table和SQL Data Services的不同。
Windows Azure Table 旨在提供輕便快捷低成本的大規(guī)模存儲數(shù)據(jù),包含實(shí)體和屬性。它不是關(guān)系數(shù)據(jù)庫,所以不能提供類似SQL中joins的方法,也不能管理 foreign keys。
SQL Data Services旨在提供嚴(yán)謹(jǐn)?shù)年P(guān)系數(shù)據(jù)方法。
在當(dāng)前的Azure版本中(Azure平臺第一個(gè)版本,feasure還很不完善),如果開發(fā)者對joins或foreign keys等關(guān)系數(shù)據(jù)庫的功能需求較大,你可以選擇SQL Data Services,反之建議使用開發(fā)更為快捷的Windows Azure Table。
聯(lián)系客服