2011年6月28日 星期二

邊做邊學 雲端運算 (Windows Azure Platform) - SQL Azure:資料庫的雲端世代


雲端世代的來臨

微軟全力發展的雲端運算平台『Azure』終於在微軟年度開發人員大會(Professional Developer Conference 2009)中發表最新的版本,並公布了收費的細目以及開始收費的時間點,代表微軟雲端運算的『雲端』級平台(Windows Azure Service Platform)已經大致就緒,等待全球的企業以及開發人員體驗並感受它的威力與效率。
Azure Service Platform 分為數種雲端服務:
  • Windows Azure 作業系統,提供作業系統即服務(Operating System as a Service)以及基礎架構即服務(Infrastructure as a Service, IaaS)的基底平台,包含對各式雲端服務、雲端應用程式以及其必要的核心支援。
  • SQL Azure 資料庫服務,提供雲端上的資料庫與 DBMS 管理能力,支援多數的 SQL Server 能力,此為本文的重點。
  • .NET Services,在雲端上支援企業級應用程式開發的可程式化平台,現已更名為 Windows Server AppFabric,作為 Windows Server 上的應用程式伺服器,它支援存取控制(Access Control)以及服務匯流排(Service Bus)的功能,可以供給企業發展具有 SaaS(軟體即服務)的應用系統。
  • Live Services,可將它視為 Windows Live 平台的雲端化版本,目前支援 Messenger、Contact 以及 Live Framework 等等。
  • 其他還有部份開發中的服務,像是 Exchange Online、SharePoint Online 等等服務,都會架構在『雲端』平台之上。

圖:微軟 Azure 服務平台架構
其中,最受開發人員關注的,非 .NET Services 以及 SQL Service(即 SQL 雲端)莫屬了,本文將以 SQL Service 為主,.NET Service 留待日後再以專文介紹。

SQL Server 的雲端級服務

SQL Azure Server,原本的名稱是 SQL Services,是 SQL Server 基於 Windows Azure 上的一個特殊資料庫伺服器版本,它分散安裝在許多不同的資料庫伺服器中,其真正的資料檔案是放在集中管理的磁碟陣列中,透過 Windows Azure Fabric 的架構,讓 SQL Azure Server 可以正確的將來自前端的查詢與控制要求設定到正確的資料庫中,而且資料庫也是分散且重覆的儲存,如此才可以確保在不同的流量之下分流給不同的伺服器以及磁碟陣列,以提供高速、高效能且不中斷的資料庫服務。
在 Windows Azure 的 IaaS 能力支援下,SQL Azure 可以獲得許多雲端特性的支援,外部應用程式或服務可以不用在乎資料庫實際儲存在哪裡,就可以利用 SQL Azure 顯露的 SQL Server Fabric 殼層服務以接受外部連接,並且在內部使用連線繞送(connection routing)的方式,讓連線可以對應到正確的伺服器,而且資料庫是在雲端中由多個伺服器來提供服務,每一次連線所提供服務的伺服器可能會不同,因此也可以保證雲端儲存的高度可用性(High availability)。

圖:SQL Azure 內部架構

SQL Azure 的版本及顯露服務的方式

SQL Azure 目前提供兩個版本:
  • Web Edition,供小型網站或應用程式儲存資料使用,其資料庫最大可到 1GB。
  • Business Edition,供 ISV(獨立軟體開發商)、企業應用程式、LOB(Line-of-Business)應用程式或服務使用,資料庫最大可到 10GB。
SQL Azure 基於其特性的因素,其伺服器本身並不會由開發人員或管理人員直接管理,而是使用 SQL Azure Server(虛擬伺服器)的方式來開放管理介面給註冊的使用者,SQL Azure Server 是一個邏輯管理單元,它基於服務帳戶為主(service account-based)來供應必要的管理以及連接服務,並且以 Web-Based 的管理介面來開放資料庫的管理功能,一個 Azure 服務帳戶只有一個 SQL Azure Server。對於外部應用程式或工具而言,SQL Azure Server 會以servername.database.windows.net 的方式對外顯露服務的位址,外部工具若要連線到 SQL Azure,可以利用 data source=servername.database.windows.net 以及 server=servername.database.windows.net 來設定。

圖:SQL Azure 管理介面(若有 Azure 帳戶時,由 https://sql.azure.com 進入)
每個 SQL Azure Server 均可提供資料庫(Database)、登入(Logins)以及針對 SQL Azure Server 本身的防火牆(Firewall)的設定,以及資料的連線與存取能力等等。但目前 SQL Azure 並沒有提供 GUI 的介面,因此若想要管理 SQL Azure,目前只有利用 sqlcmd.exe 命令列工具,或使用 SQL Server Management Studio 連接,然後用 T-SQL 下指令來管理。

連線至 SQL Azure Server

在使用 SQL Azure Server 前,必須要有 Azure Service Platform 的服務帳戶,因此可先行到 http://www.microsoft.com/taiwan/azure/signin.htm 註冊一個帳戶後,再申請使用 SQL Azure,目前 Windows Azure 仍然是 CTP 以及試用的狀態,因此註冊以及使用是免費的(預計是 2010 年 2 月起要收費)。接著,使用 Windows Azure 進入 https://sql.azure.com,可以看到類似下面的畫面:
點按列表中的項目後,會先要求你接受服務條款:
按 I Accept 接受後,SQL Azure 會要求你提供遠端登入的管理員權限帳戶(若是由 Azure 的網站管理,會使用 Azure 服務帳戶來授權),並且指定 Server 所在的位置(目前只有 South Central US):
SQL Azure 會建立一個新的 SQL Azure Server 給你的 Azure 帳戶,並進入 SQL Azure Server 的管理畫面。你可以在這個畫面中建立新資料庫、設定防火牆、取得連線字串資訊或刪除資料庫等等。
請選取 master 資料庫,然後按下方的 Connection Strings 按鈕,可以得到連接 master 資料庫的連線字串,可按 Copy to clipboard 將它複製出來:
接著,請點按 Firewall Settings,可以看到目前是不允許任何遠端機器連入 SQL Azure Server 的(空白):
請按「Allow Microsoft Services access to this server」,此時會加入一個新的規則:
請選取該規則,然後按『Edit Rule』,並將 To 欄位中的 0.0.0.0,改為 255.255.255.255 並按『Submit』儲存,表示遠端的任何一台電腦都可以連線,若沒有做這個動作,SQL Azure 會檢查連入的用戶端有沒有在符合的網段中,沒有的話會拒絕連線:
再來,請打開 SQL Server Management Studio,並且先不要連到本機的 SQL Server,請在工具列中按「新增查詢」,此時會出現登入的畫面,請按右下角的『選項』按鈕將其他選項顯示出來,再點按頁籤中的「其他連接參數」,將在 SQL Azure 上得到的連線字串(ADO.NET 的連線字串)貼上去,請記得要修改 ”myPassword” 為你的密碼。
按『連接』,即可連到 SQL Azure Server 上的 master 資料庫了。

NOTE
不可使用物件總管(Object Explorer)來連接 SQL Azure Server,因為 SQL Azure Server 中的資料庫不會儲存物件的各式設定(由 sys.configuations 提供),因此若使用物件總管連接的話,會得到下面的錯誤訊息:

Transact-SQL 與 SQL Server 功能的支援

SQL Azure Server 雖然也是發展自 SQL Server,但基於雲端運算的特性,有部份 SQL Server 現有的功能在 SQL Azure Server 上並不被支援,但大多數都是與伺服器具高度相關性的功能,例如分散式查詢、SQL CLR、分散式交易、檔案配置以及 SQL Server 2008 的稀疏資料與索引等能力都不被支援。其他基本的 Transact-SQL 等資料庫能力在 SQL Azure Server 上都是具備的。

NOTE
SQL Azure Server 與 SQL Server 間功能的差異,可以參考 SQL Azure vs. SQL Server - Similarities and Differences一文(http://go.microsoft.com/?linkid=9692818)。


沒有留言:

張貼留言