Azure開發那點事
譯文微軟Azure開發簡介
Azure服務平臺(簡稱Azure)是微軟涉足云服務平臺領域的首次嘗試,希望借此實施平臺即服務(PaaS)類似的功能。Azure包括一款操作系統(Windows Azure)以及由開發者服務、通信服務和數據服務組成的幾個集合,這些服務旨在簡化基于云的Windows應用程序,并在云端托管運行的任務。
微軟早在2009年7月舉行的全球合作伙伴大會(Worldwide Partner Conference)上披露了Azure服務平臺的價格及其他詳細信息,包括該平臺幾個主要組件的服務級別協議和初定發布日期(當年11月)。
力求實現在互聯網上托管運行應用程序和服務這個愿景的絕非微軟這一家提供商;要是談論微軟在Azure方面的愿景,不同時提到其主要競爭對手們的舉措是不可能的。比如說,谷歌就一直在開發谷歌應用引擎(GAE),亞馬遜也早就有了亞馬遜彈性計算(EC2)平臺。不過,Azure與GAE的相似處比它與EC2的相似處更多;EC2的特點主要是租用基于硬件的資源,而不是可在上面編程的一種平臺。
本文將介紹為Azure平臺開發應用程序需要具備什么條件,尤其是關注Visual Studio開發者的要求。弄清楚可以使用哪些替代語言來開發基于Azure的應用程序,另外了解Azure可能很適合的幾種場合以及Azure的價格結構。
Azure如何建立在Windows之上?
基于Azure的應用程序其最大的承諾就是它們能夠根據需要來實時擴展。因而,客戶只要使用實際需要的那部分資源,而不是針對給現有環境帶來重大壓力或未充分利用現有環境的一定數量的資源編制預算。Azure提供了這種功能:使用Azure這個平臺,將任何系統(從用戶基礎架構的某些部分直至整個基礎架構)遷移到云端。這類似使用如今不同版本的Windows;實際上,微軟聲稱Azure是一款新的Windows平臺。
科羅拉多CustomWare公司的軟件架構師Jeff Certain說:“微軟Azure大有潛力可為,讓我們可以卸載計算密集型任務,從而讓我們可以靈活擴展,而成本只需要傳統解決方案的一小部分。”
向上擴展的這種功能仍需要用戶進行一番手動調整和決策,不過這個過程的一些方面可以實現自動化。Certain補充說:“Azure存在的缺點之一是,它仍需要手動干預來進行擴展。引入了允許以編程方式來啟動新節點的應用編程接口(API)后,將為多種令人關注的應用場合創造條件。”
微軟的Azure瞄準了好幾個不同的群體:Web開發者、企業開發者、獨立軟件開發商(ISV)以及公司企業。針對每個群體的措辭略有不同,但是微軟一向做出的基本承諾卻一樣:微軟Windows開發者或者使用或經銷基于微軟的開發產品的公司企業,可以充分利用現有的知識及/或基礎架構,充分享受基于云的計算所帶來的好處。
#p#
面向云端開發的Azure工具
Azure的幾個主要組件
微軟的Windows Azure服務平臺分為幾個主要的組件,其中一大組件就是Windows Azure的各種開發工具。這類工具包括:.NET Services,這套微軟托管的服務旨在幫助用戶致力于開發應用程序;微軟SQL Azure,這是一套基于SQL Server的數據服務;以及Live Services,讓用戶可以充分利用Live框架,從而利用現有的Live服務,比如Live ID和Live Messenger。
其中兩項服務應該會尤其吸引現有的.NET開發者。首先,.NET Services有助于方便部署基于云的應用程序,處理原本由用戶來處理的棘手任務。它又包括兩項服務:一個是訪問控制(Access Control),該服務突破了許多公司的組織結構,簡化了為應用程序確保安全的任務。另一個是.NET服務總線,用微軟的話來說,“它提供了一種安全的、基于標準的消息傳送基礎架構,大大降低了開發組合式應用程序的門檻,哪怕這些應用程序的組件必須在不同的企業之間進行傳送。”
要注意:之前版本的.NET Services包括Workflow Service,該服務擴展了Workflow Foundation,以便管理某個應用程序各部分之間的相互聯系,但是該服務最近被擯棄了。微軟承諾將來會推出更多的.NET服務。
第二項服務是微軟SQL Azure,它簡化了將SQL Server擴展到云端,作為基于Web的服務這一任務。主要目標同樣是消除部分復雜性。微軟承諾,“SQL Azure將提供一套豐富的集成服務,讓移動用戶、遠程辦公室或業務合作伙伴能夠對數據進行關系查詢、搜索、報告、分析、集成和同步等處理。目前,微軟提供一項關系數據庫服務——最近更名為微軟SQL Azure數據庫(SAD)。與.NET Services方面一樣,微軟也承諾將來會推出更多與數據庫相關的服務。
想了解這些服務的更多信息,請訪問Azure的主頁:http://www.microsoft.com/azure/default.mspx。
從Azure入手
微軟的Azure網站上面包含幾個主要的軟件開發工具包(SDK),幫助用戶入手,其中包括Windows Azure SDK(http://www.microsoft.com/download/en/default.aspx)和微軟.NET Services SDK(http://www.microsoft.com/download/en/default.aspx)。Visual Studio開發者對面向微軟Visual Studio的Windows Azure工具(http://www.microsoft.com/download/en/default.aspx)可能也會有興趣。提供的工具包括:用于構建云服務的C#和Project Templates,更改服務角色配置的工具,調試在開發結構(Development fabric)中運行的云服務角色的功能,以及開發和包裝云服務包的功能。
使用Azure的Visual Studio SDK的系統要求是:Windows 7、Windows Server 2008或至少安裝SP1的Windows Vista;SQL Server 2005簡易版(或更高版本);以及安裝SP1的VS 2008、Visual Studio 2010測試版1,或者安裝SP1的微軟Visual Web Developer 2008簡易版。
Java SDK或Ruby SDK與Azure結合使用
微軟支持Visual Studio開發者,這并不讓人意外;但是也許讓人意外的是,微軟的Azure網站上面還有鏈接指向了基于Java的SDK和基于Ruby的SDK。開發Java SDK和Ruby SDK的并不是微軟的合作伙伴公司,而是微軟自己。微軟在其Azure FAQ(http://www.windowsazure.com/zh-cn/)上表示,用戶們在將來有望看到更多與Azure兼容的語言。
眼下,用戶可以使用面向微軟.NET Services的Java SDK(由Schakra公司開發),更多的信息請訪問http://www.schakra.com/stuff-we-do/jdotnetservices.html和http://www.jdotnetservices.com/index.html。另外,還可以使用最新版本的面向.NET Services的Ruby SDK(由ThoughtWorks開發)。
與Azure相比,谷歌應用引擎支持使用Java和Python來編寫應用程序。亞馬遜EC2支持一系列廣泛的操作系統,包括Windows 2003、紅帽企業版Linux、Open Solaris和甲骨文企業版Linux;支持一小批應用開發環境,比如IBM sMash、JBoss企業應用平臺和Ruby on Rails;還支持數款應用服務器,包括IBM WebSphere應用服務器、Java應用服務器和甲骨文WebLogic服務器。
#p#
比較微軟Azure的價格策略
Azure的一個重要方面是其服務的價格和條款。微軟之前在這方面諱莫如深,這讓許多企業無法更積極大膽地使用Azure,但是該公司最近披露了相關信息。價格方面的因素包括:計算時間,以機器小時來衡量;帶寬需求(與Azure數據中心之間來回傳輸的字節),以GB來衡量;存儲容量,以GB來衡量;以及以Gets和Puts等應用請求來衡量的事務。
定價模式的出現對于消除許多人的擔憂應該大有幫助,即使微軟一直聲稱其價格與競爭對手的價格相比頗具競爭力。雖然最終的價位“具有競爭力”,但是微軟為Azure宣布的價格在幾個方面卻不如谷歌應用引擎(GAE)來得誘人。
首先,宣布的預覽版(post-beta)價格表明Azure的價格有點貴。想詳細了解頗有競爭力的價格結構,請參閱Roger Jennings的博文《比較Azure和谷歌應用引擎的價格》(http://oakleafblog.blogspot.com/2009/07/comparison-of-azure-and-google-app.html)。
其次,可能也是最重要的是,GAE提供了一定數量的免費事務。據谷歌聲稱,這個數量足以“滿足相當高效的應用程序,可支持每個月500萬左右的頁面瀏覽量。”這方面差異的重要性完全壓倒了可以免費使用谷歌來運行一定規模的網站這個功能。
Roger Jennings說:“如果微軟不改變其策略,可能會證明這將是客戶采用Azure平臺面臨的一大障礙。以往,微軟讓用戶可以免費,或者至少以比競爭對手更低的成本,試用其新的技術或重要技術。能夠免費試用GAE平臺是GAE較之Azure的一個很有吸引力的優勢。”
現在可以獲得關于GAE的價格策略的信息(http://code.google.com/appengine/docs/billing.html)和亞馬遜EC2的價格策略(http://aws.amazon.com/ec2/#pricing)。請注意:亞馬遜針對使用Windows而不是使用Linux/UNIX的亞馬遜EC2用戶收取高價。就依賴Windows的服務而言,微軟的方案比EC2來得便宜;但是EC2基于非Window的平臺要比微軟的Azure服務來得便宜。價格也不一樣,這取決于用戶在美國還是在歐洲。
請注意:任何一家PaaS或IaaS云計算提供商的條款在一段時間后可能有所變動,任何軟件即服務(SaaS)云計算也是如此。比如說,GAE的價格FAQ(http://code.google.com/appengine/kb/)上面就注明,谷歌可能會提前60天改變其服務的價格條款;任何云服務提供商極有可能會有類似的條款。
使用云計算方案方面可能不同的是客戶忠于某一家云服務提供商的程度:給予某一家提供商的信任很可能會在決定部署云計算應用程序方面起到影響。至于將任何基于PaaS或IaaS的應用程序移植到競爭對手的服務平臺上有多容易,這仍需拭目以待,但是用戶甭指望這個遷移過程會很容易。
#p#
用Azure來開發的風險和好處
采用Azure的典型場景
使用Azure時有兩種基本的場景經常被提及。在第一個例子中,用戶將Azure用作整個應用程序的云計算平臺。在第二個例子中,用戶在Azure上編程,將現有的應用程序擴展到云端,或者使用Azure作為補充,以此增強比較像傳統應用程序的應用程序。
不妨看一下第一種情況。假設一家公司有著龐大但呈現出季節性的負載,開發人員在開發時必須兼顧這個特點。由于這種負載的波動性很大,如果像Azure這樣的方案讓開發人員只要為實際所需的資源付費,那么他們購買高峰期間所必需的軟硬件就可能不大明智。
類似的是,互聯網新興公司可能事先無法知道其基礎架構方面的需要。要是低估了需求,可能導致生意流失,公司的產品給人留下很不好的第一印象;要是高估了需求,又有可能將過高的成本花費在未充分利用起來或根本就沒有用到的基礎架構上。
這后一個例子可能還是將應用程序擴展到云端的一種使用場合。比如說,在某些季度生意大好需要基礎架構的某些部分能夠相應地上下擴展。而基礎架構的大部分可以保持原狀,但是負載比較大的那部分可以重新設計,以便在云端環境下順利運行。
試一試Azure
Azure模式與開發基于傳統桌面的應用程序、甚至基于Web的應用程序的模式明顯背道而馳。在別人的平臺上托管運行應用程序在組織管理基礎架構和擴展應用程序底層的硬件方面具有一些重大的潛在好處。
如果公司的根本要求高度變化或無從知曉,好處來得尤為明顯。Azure模式還讓用戶可以針對所需資源來支付月租費,而不是事先為全部所需的資源付費。如果在設計服務時不清楚需要什么樣的資源,這種模式尤其大有幫助。不過,這種模式也存在一些重大風險。
首先,要預測成本可能更困難了。要是一家公司不清楚自己將來要使用多少資源,就很難估計需要花費多少錢。要注意:如果客戶保證使用一定數量的資源,包括Azure在內的所有主要云服務允許客戶以優惠的費率購買更多數量的服務。
其次,應用程序有多好完全取決于PaaS或IaaS提供商提供的底層服務。自Web服務面市以來,這個注意事項就屢試不爽,但是隨著用戶們更全身心地投入到云計算開發,這個注意事項越來越重要。比如說,谷歌的mail最近數次遇到了停運。雖然它以往的正常運行時間很長,但是可以說任何服務都有可能遇到某種程度的停運。這時候,服務級別協議(SLA)就能起到作用,它針對正常運行時間及其他服務保障給出了具體的承諾。要確保認真審閱了這些SLA。
第三,要考慮某一家提供商在提供承諾服務方面的決心和能力。另一換一家提供商的成本相當高;微軟、谷歌和亞馬遜在架構方面不是完全彼此兼容;如果面向某一家提供商的應用程序想在另外兩家提供商的云計算平臺上運行,用戶就得重新為其設計架構。
Azure模式仍處于新興的發展階段——謹記:Azure仍處于測試版階段。但是過不了多久,用戶們就會開始考慮Azure有多適合,而定價模式的出現和SLA對于用戶們合理評估成本和潛在的好處大有幫助。在幾種場景下,Azure式的應用程序可能很合理;但是開發者應該謹慎行事。認真關注一下微軟的SLA、成本以及現有和將來可能會有的服務。最后,還要事先弄清楚萬一某家云服務提供商沒有履行約定的承諾,該如何全身而退。