雲端運算的概念
如果您是 IT 人、開發人員或是有志進入這個產業領域的學生或社會人士,若您沒聽過雲端運算(Cloud Computing)這個名詞的話,那也許您很快就要落伍了,因為雲端運算不但已經是未來政府的主要發展方向之一,根據 IDC 組織的預測,2010 年將會是台灣的「雲端運算元年」,並且台灣的主流硬體廠商紛紛宣布加入發展雲端運算核心服務的行列,可見身為台灣資訊產業界的一份子,雲端運算已經悄然的成為了必須要了解、學習與充份應用的一種新概念與技術。雲端運算其實已經不是非常新的技術,它植基於發展數十年的分散式運算(Distributed Computing)、備援(Failover)、負載平衡(Load Balancing)以及網路儲存等技術,以往這些技術多半是在中大型企業才能做的到,其原因不外乎規模與預算,要發展具有備援以及高運算能力的基礎建設(Infrastructure)通常至少要三台以上的伺服器、高速核心網路、作業系統的支援以及軟體支援才有能力做的到,預算最起碼也要數百萬之譜,對於一般的中小企業而言根本是不可能的任務,更何況是散落在各地的獨立軟體開發人員(Independent Software Developers)?
NOTE
也許您會認為筆者打錯字,把 ISV(Independent Software Vendor)打成 ISD,但筆者並沒有打錯字,台灣確實有不少靠著軟體開發專案在生活的 SOHO 族或是獨立的軟體研究者,這些人大都是有自己的主機和工作環境,但沒有像軟體公司那樣的大型環境可以研究或發想創意。但雲端運算對這些人來說是很好的機會,就像蘋果 iPhone 的 App Store 一樣,只要發揮自己的創意,運算資源由大廠來提供保證,只需支付少許的費用,就能享有和大廠和大型軟體公司相同的運算能力、容錯、備援與網路穩定性等權利。
雲端運算早在 1990 年代就已經發跡,就如前面所說的,雲端運算是一堆技術的集合,1990 年代是網路剛興起的年代,當時在企業間除了 Internet 公開網路以外,還有 VPN(虛擬私人網路)可以保障在企業間機密性資料的交換安全,而網路頻寬也是發展重點。只是當時產業界大多都還是自己做自己的,沒有資源分享的觀念。第一家以雲端運算概念提供產品與服務的公司 Loudcloud 在 1999 年成立,其產品與服務概念就像現在的雲端運算,不過當時套上的名詞是 ASP(應用程式服務提供者),軟體即服務(Software as a Service)概念大約也是在此時開始萌芽,微軟在 Microsoft .NET 平台中提供的 Web Service 架構,就是一種軟體即服務的具體展現,然而要做到雲端運算真正的理想,不能光只靠軟體而已,因為軟體還是需要高效率硬體運算以及高速的網路才能夠做到。而在發展這些概念的期間,有許多的名詞也提了出來,其中對廠商描述最貼切的就是效用運算(Utility Computing),由廠商提供充分的資源,由軟體廠商或開發人員租用,並運用這些資源來發展創新的應用或服務,進而在這些創新應用中找到利基。
最早將軟體服務(Software Service)概念落實到實務的,首推 Amazon 以及 Google 兩間公司了,Amazon 透過它所提供的 Web Service 將服務開放給開發人員們,而 Google 更透過了多樣的網路服務(像是 Google Doc、Google App Engine、Google Map 以及其他的應用)將軟體推向全球的使用者以及開發人員。2007 年 Google 與 IBM 聯手,和美國數個知名大學(像史丹佛大學、麻省理工學院等)合作發展雲端運算計畫,2008 年 HP、Intel 以及 Yahoo 也加入了戰局,當時所力推的雲端運算概念是軟體加服務(Software plus Service),微軟則是在 2008 年下旬開始投入資源發展雲端運算,由當時微軟的首席軟體架構師 Ray Ozzie 主導策劃,將軟體加服務的概念加以強化,成為軟體即服務(Software as a Service, SaaS),並納入微軟未來數年內的主要發展方針。
雲端運算的軟體在各大廠的加入與全力發展下已日漸成熟,而硬體部份,各大廠也投入了巨額資金,在全球各地的網路骨幹核心區,佈建了許多資料中心(Datacenter),這些資料中心都是即將投入雲端運算的資源,當然,各大硬體廠商為滿足這些資料中心的佈建,也發展出很多的小型、容易抽換以及省電的硬體模組,這些硬體模組構成了貨櫃資料中心(Container-based Datacenter)-將數十台伺服器、網路裝置以及其他必要的組件等安裝到貨櫃中,這些資料中心不但可以隨時抽換,同時也可以並聯運行,讓運算資源得有更有效率的運用。
NOTE
各大廠的貨櫃資料中心,可以參考這個網址,有很多的照片:
http://www.datacentermap.com/blog/datacenter-container-55.html
微軟在芝加哥的資料中心也有影片的展示:
https://www.microsoft.com/showcase/en/us/details/bafe5c0f-8651-4609-8c71-24c733ce628b
雲端運算最大的特色,就是大量的共用運算、儲存與網路頻寬資源,並且由廠商來提供服務水準協定(Service-Level Agreement),保證系統的可用程度可以在 99% 以上,這點廠商可以很容易的運用貨櫃資料中心來做大型的叢集運算(Cluster Computing)以支援備援的能力,同時利用數條不同 ISP 的高速網路來實施即時的網路備援,因此廠商可以保證 SLA 所訂定的基本服務水準。而一般雲端運算資源都是按使用情況來收費,費用也沒有特別高,非常適合 ISV、ISD 以及軟體團隊來開發應用,只要有網路連線,這些團隊就不必還要特別在近端環境布建自己的軟硬體架構,就可以得到具相同甚至更高水準的運算平台。
Windows Azure 概觀
前面文中提到,微軟是在 2008 年下半年才開始投入雲端運算的領域,雖然相較於 Google 以及 Amazon 等廠商較晚了一些,不過微軟長年以及針對分散式環境以及軟體組件開發的技術非常成熟,並且微軟通常會把複雜的技術架構以簡單並相容於現有應用框架的方式來推廣主流技術,在雲端運算領域當然也不例外。微軟在雲端運算的實作,就是 Windows Azure。在 CTP 階段稱為 Azure Service Platform,到 2010 年商轉階段時,更名為 Windows Azure,挾帶了各種不同的基礎平台以及服務正式與大家見面,包含 SQL Server 的雲端版本 SQL Azure、WF 的雲端版本 Windows Azure 以及企業生產力軟體的雲端版本(Business Productivity Online)等系統。
.png)
圖:Windows Azure 平台架構
Windows Azure 本身是一個特殊版本的 Windows Server 作業系統,它安裝在資料中心中的每一台伺服器中,作為核心功能的基礎服務。虛擬化技術(Virtualization)是雲端運算的核心技術之一,每一台伺服器機架(rack)中安裝了數台實體伺服器機器,每一台伺服器中執行著一個主要的作業系統,並啟用 Hyper-V 的特殊版本(Hypervisor),以及掛載了多個客座作業系統(Guest OS),實際提供服務以及容錯的作業系統就是這些客座作業系統,因此每一個貨櫃資料中心可以執行數百個至數千個虛擬機器,一個資料中心可以執行數萬至數十萬個虛擬機器,足以供應雲端運算所需要的伺服器資源。
.png)
圖:虛擬機器與客座作業系統部署
NOTE
根據微軟的資料,每一個客座作業系統都執行了 Windows Server 2008 的 x64 版本作業系統;每個作業系統使用了 1.5-1.7GHz 的運算資源;1.7GB 的記憶體;100Mbps 的網路速度;250GB 硬碟資源;以及 50GB 的 Windows Azure Storage 資源等。
除了虛擬化的能力以外,資料中心有這麼多的伺服器在執行,誰要保證在這麼多的伺服器運行中,發生了問題的緊急應變,以及作業系統更新時的自動化部署?畢竟若要人來做的話可能會花可觀的人力成本以及停機時間(down-time),因此微軟勢必要在這個部份想辦法解決,Windows Azure 的解決方案是 Fabric Controller(FC),每一台伺服器都有安裝 FC,FC 負責管理數以千計的伺服器的執行狀況、動態切換以及修補程式更新等日常且繁雜的工作,部署虛擬機器的任務也是由 FC 來處理,FC 內部包含了檔案複製與排程等核心模組,自動化的處理很多系統管理的工作。
.png)
圖:Fabric Controller 高可用性架構
Windows Azure 有了這些基礎核心的功能,當然也不能忘了要在上面開發應用的開發人員們,Windows Azure 開放了 BLOB、Queue 以及 Table 三種基本的資料儲存功能,稱為儲存服務(Storage Service),開發人員能利用 HTTP 通訊協定以及 REST API 來存取這些服務,對於 Silverlight 開發人員來說,.NET Client Library 也有適當的支援,這些功能都封裝在 Windows Azure SDK 以及 Visual Studio Tools for Windows Azure 中,讓使用 Visual Studio 的開發人員能很輕易的就開發 Windows Azure 應用程式。同時為了要減輕開發人員發布與測試的負擔,Windows Azure SDK 也提供了 Development Fabric 以及 Development Storage Services 兩個功能,讓開發人員得以在本機上重現 Windows Azure 服務平台,用以測試 Azure 應用程式。
.png)
圖:Windows Azure Development Fabric
由於 Windows Azure 上運行的應用程式都是掛載於 IIS 7.x 網頁伺服器上,只要是 IIS 7.x 可以支援的應用程式類型,在 Windows Azure 上都可以運行,舉凡 ASP.NET、WCF HTTP Services、Web Services 或是利用 FastCGI 模組執行的 PHP、Perl 等指令碼引擎應用程式,都可以在 Windows Azure 平台上執行。以微軟平台開發人員來說,Visual Studio 是最棒的應用程式開發工具,Visual Studio Tools for Windows Azure 1.1 可以在 Visual Studio 2008 以及 Visual Studio 2010 RC(Release Candidate)版執行,它擁有 Cloud Application Development 的開發範本,因此開發人員可以省下很多在生成組態檔的工作,由 Visual Studio 幫您代勞即可。
Windows Azure 開發環境需求
若想要開發 Windows Azure 應用程式,必須要先滿足幾個條件:
- 帳戶需求:在微軟網站上申請 Microsoft Online Customer 帳戶(此帳戶需要 Windows Live ID),以及申請使用 Windows Azure。
- 作業系統:Windows Vista、Windows Server 2008 或 Windows 7,因為這些作業系統上執行的都是 IIS 7.x 作業系統,和 Windows Azure 較貼近。建議使用 Windows 7 或 Windows Server 2008 R2。
- 開發工具:Visual Studio 2008 或 Visual Studio 2010 RC 或更新的版本。並安裝 Visual Studio Tools for Windows Azure 以及 Windows Azure SDK(SDK 中內含了 Development Fabric 以及 Development Storage Services)。建議使用 Visual Studio 2010。
- 資料庫:SQL Server 2005 或更新版本,可以是 SQL Server Express,建議使用 SQL Server 2008。
申請 Windows Azure 帳戶
若要申請 Windows Azure 帳戶,您必須要先有 Windows Live ID,日後管理 Windows Azure 帳戶的工作都會需要這組 Live ID,因此若沒有 Live ID 的話,需要先到 http://account.live.com 申請。然後到 Windows Azure 的服務網站 https://www.microsoft.com/windowsazure,點選右上方的 Account 連結開始申請。
.png)
在商轉的初期階段,微軟為了讓對 Windows Azure 有興趣的軟體開發商或個人有機會使用 Windows Azure 平台,推出了一個 Introductory Special 的專案,這個專案可以讓試用者可以在下列限定範圍內試用至 7 月 31 日止免收費,若超過限定範圍則提供優惠價格。
‧Windows Azure:
- 小型運算資源核心使用25小時。
- 500MB Storage Service 儲存空間。
- 10,000 次的儲存交易(storage transactions)。
- CDN 功能在 CTP 階段免費。
‧SQL Azure:
- 三個月免費使用 Web 版本的 SQL Azure Database(最大容量為 1GB)。
‧Windows Azure:
- 100,000 次的存取控制交易(access control transactions)。
- 2 個服務匯流排。
‧資料傳輸:
- 每個區域的流入與流出各 500MB。
NOTE
Windows Azure 在 2010 年的 2 月 1 日正式開始對外商業運轉服務(General Availability),初期的服務國家有美國、英國、加拿大、新加坡、日本等 21 個國家,預計在七月份會在擴張到 40 個國家,屆時台灣、香港以及中國大陸才會納入 Windows Azure 的服務範圍內。現階段的過渡期中,台灣地區的使用者是沒有辦法申請的,如果想知道目前有哪些替代方案,建議可以到 MSDN 的 Windows Azure 論壇討論。
安裝開發環境
Windows Azure 開發環境需要 Windows Azure SDK,若是 Visual Studio 2008 或 Visual Studio 2010 RC 的開發人員,可以直接下載 Visual Studio Tools for Windows Azure 1.1 來安裝,這個套件本身就已經包含了 Windows Azure SDK 使用。同時,為了要讓 Windows Azure SDK 中的 Development Fabric 以及 Development Storage 可以順利運作,開發電腦必須要檢查並執行下列工作:
- 安裝 Visual Studio 2010 RC 或是 Visual Studio 2008。若是 Visual Studio 2008,請先升級到 Visual Studio 2008 SP1。
- 安裝 SQL Server Express 2008(若沒有 SQL Server 的話)。
- 將 WCF HTTP 啟動功能開啟(WCF HTTP Activition)。
若是使用 Windows Vista 或 Windows 7,請開啟控制台的程式與功能,再按開啟或關閉 Windows 功能,勾選下列以紅圈標示的項目。
.png)
若是使用 Windows Server 2008,請使用伺服器管理員(Server Manager),並用伺服器功能勾選 WCF 啟動,並接受預設提示的相依功能安裝(例如 IIS 與 ASP.NET 等)。
.png)
- 安裝 Visual Studio Tools for Windows Azure 1.1。
- 若不是執行 Windows 7 或 Windows Server 2008 R2,請安裝 Hotfix: Native Debugger Improvements。
- 若不是執行 Windows 7 或是 Windows Server 2008 SP2,請安裝 Hotfix: Support for FastCGI on Development Fabric。
- 若不是執行 Windows 7 或 Windows Server 2008 R2,請安裝 Hotfix: Visual Studio Stability。
- 安裝 Hotfix: Correct WCF metadata when hosting behind a load balancer 修補檔(Windows 7 或 Windows Server 2008 R2 也要),並在服務組態檔中加入 useRequestHeaderForMetadataAddress 以啟用此修補。
筆者建議直接使用 Windows 7 或 Windows Server 2008 R2 作為開發環境,可以減少很多檢查的工作。
若安裝完成上述的套件後,請啟動 Visual Studio 2010(或 Visual Studio 2008,但筆者日後都將以 Visual Studio 2010 示範),並新增一個 Windows Azure Cloud Service 專案(直接接受預設值即可):
.png)
NOTE
如果讀者看到的是這個畫面:
.png)
表示讀者尚未安裝 Visual Studio Tools for Windows Azure,請依上列的程序安裝即可。
在下列對話盒顯示時,選擇 Web Role:
.png)
當應用程式新增完成後,請用設計模式(Designer Mode)開啟 Default.aspx,並輸入 Hello Windows Azure:
.png)
然後按 F5 啟動它,您可以在工作列看到 Windows Azure Development Fabric 啟動的訊息:
.png)
並且在新開的瀏覽器視窗中,看到 Hello Windows Azure 的訊息:
.png)
接著,在 Windows Azure 的圖示按右鍵,選擇 Show Development Fabric UI,會看到 Development Fabric 的視窗,以及已掛載在 Development Fabric 中的應用程式資訊:
.png)
.png)
若成功看到這些畫面,表示您的 Windows Azure 開發環境已經準備就緒,隨時可以開始發展 Windows Azure 的應用程式。
NOTE
如果讀者是第一次執行 Development Fabric,那麼有可能會看到類似下列的訊息:
.png)
表示讀者的電腦中沒有安裝 SQL Server Express,因此 Development Storage 無法正確安裝資料庫,請安裝 SQL Server Express 後再次執行即可,但若本機上有安裝 SQL Server,則可以利用 Windows Azure SDK 所提供的 DSInit.exe 來設定,可參考:
http://www.dotblogs.com.tw/regionbbs/archive/2010/02/25/vs2010.and.azure.platform.understanding.dev.fabric.and.storage.aspx
結語
本文大略的介紹了雲端運算、Windows Azure 平台以及如何設定 Windows Azure 的開發環境,接下來筆者將會分別介紹 Windows Azure 中的應用程式開發方法,讓您可以有效且盡情的運用 Windows Azure 發揮您的創意,並從中得到利潤。