2008 年,微軟發布了自己的全新云計算產品Windows Azure Platform。歷經數年的技術沉淀,Windows Azure Platform 已經成為一個技術領先、開放的平臺,基于不同語言開發的應用程序都可以運行在這個平臺上面,并通過標準協議相互通信和協作。此平臺包括Windows Azure、SQL Azure、Windows Azure platform AppFabric 和Windows Azure Marketplace四部分內容。簡單來說,Windows Azure 平臺就是一個集云計算操作系統、云關系型數據庫為開發者提供的服務集合或云中間件,以及其他一些輔助服務的互聯網環境。
SQL Azure概述
Windows Azure云操作系統提供有存儲服務,但并不是一個關系型數據庫系統,并且它的查詢語言也不是SQL,它只能實現較為簡單的存儲服務,主要被設計用來支持構建于Windows Azure 上的應用。
但關系型數據庫的思維習慣影響著一大批數據庫開發人員以及數據庫管理員,再加上其對事務等強大功能的支持,基于云的關系型數據庫還是很吸引人,尤其是對于那些自己沒有能力管理數據庫的組織。使用云數據庫一方面可以把確保可靠性和管理數據的工作交給一個專門的云服務提供商去做;另一方面可以隨時隨地,甚至從移動設備上訪問云里的數據。服務提供商可以非常容易地伸縮服務,所以使用基于云的數據庫可能要比使用自己的數據庫便宜很多。
說白了SQL Azure就是一個部署在云端的關系型數據庫管理系統。由于SQL Azure 支持SQL Server 的絕大多數功能,因此它具有良好的應用兼容性。SQL Azure 的設計遵循了主要的三條特性:可擴展性、可管理性和開發的靈活性。作為一個部署在云上的數據庫引擎,絕大多數的管理工作都由微軟完成,因此用戶不用擔心任何諸如備份、集群等管理方面的問題。另外,微軟的服務許可協議(Service Level Agreement,SLA)確保了用戶的數據庫平均每個月將有99.9%以上的時間在線。從以上描述中可以看出SQL Azure提供了企業級數據中心的規模和能力,并且省去了管理本地SQL Server服務的成本。使得企業既不用增加本地IT部門的支持負荷,也不用消耗IT人員的精力去維護部門的數據庫應用,還能夠在整個企業內為應用程序提供數據服務。企業通過使用SQL Azure,可以在極短的時間內進行數據庫存儲,可以訂閱所需要的存儲服務,從而減少部署和運維數據庫的初始投資。當需求變化時,還可以快速地減小或者增加數據庫服務來滿足需求。
SQL Azure 對于開發者和管理員來說應該很容易上手,因為SQL Azure 使用關系型數據模型,數據存儲于SQL Azure 上就和存儲于SQL Server 上一樣。使用SQL Azure 數據庫的應用程序可以運行在Windows Azure、企業數據中心、移動設備或其他任何地方。不管運行在哪里,應用程序都使用一種叫做Tabular Data Stream(TDS)的協議來訪問SQL Azure 數據。這個協議與應用程序連接本地SQL Server 是同一個協議。所以,已有的SQL Server 客戶端軟件可以直接連接到SQL Azure 上。這些客戶端軟件可以是Entity Framework、ADO.NET、ODBC 等。因為SQL Azure 數據庫看起來就像普通的SQL Server 數據庫,所以標準工具仍然可以使用,比如SQL Server Management Studio、SQL Server Integration Service 和用來批量拷貝的BCP 等。一個 SQL Azure 服務器就是一組數據庫的邏輯組合,是一個獨立的授權單位,這在概念上類似于一個本地SQL Server 實例。在每個SQL Azure 服務器內,用戶可以創建多個數據庫,每個數據庫可以擁有多個表、視圖、存儲過程、索引和其他熟悉的數據庫對象。該數據模型可以很好地重用用戶現有的關系型數據庫設計、T-SQL 編程技能和經驗,從而簡化了將現有的本地數據庫應用程序遷移至SQL Azure 的過程。開發人員可以使用現有的知識,例如ADO.NET Entity Framework (EDM)、LINQ to SQL,甚至傳統的DataSet 和ODBC 等技術,來訪問位于SQL Azure 上的數據庫。大多數現有的數據訪問程序只需要修改一個連接字符串,便能順利訪問SQL Azure。從SQL Server 2008 Management Studio R2 開始就對SQL Azure提供支持。SQL Server2012在備份到 Windows Azure 、Azure 數據庫容量上做了一些關鍵性的改進。
在SQL Azure 中服務器和數據庫都是邏輯對象,這不同于物理服務器和數據庫。通過用戶與物理實現的隔離,SQL Azure 使得用戶可以將時間專用于數據庫設計和業務邏輯上。每個SQL Azure 賬號可以有多個邏輯服務器。注意:這不是真正的SQL Server 實例,而是用來組織收費數據用的。每個Azure 數據庫的上限提高到了150G。如果需要,用戶可以使用多個數據庫從而把數據分散以提高性能。雖然運行環境看起來都一樣,但是SQL Azure 比起單一實例的SQL Server 要穩定得多。和Windows Azure 存儲系統一樣,所有數據都保存三次以實現高可用性和一致性,其目的是保證即使在系統和網絡出錯時也可以提供可靠的數據存儲。
SQL Azure 架構
SQL Azure擁有和SQL Server一樣的TDS接口,為客戶端應用程序提供了和SQL Server一樣的訪問方式。 SQL Azure是一個四層架構:基礎設施層、平臺層、服務層和客戶端層。簡單來說,客戶端層的作用就是負責應用程序與SQL Azure間的通信。服務層則運行通道服務,實現連接路由、供給以及計費等。平臺層則是托管在實際SQL Server數據庫中的結點。基礎架構層的作用是負責對硬件、網絡和操作系統的管理。下面我們來詳細看一下:
其中基礎設施層提供了對硬件的支持以及對服務層所運行的服務管理。同時也是核心數據層,可以為一個數據中心提供多個共享服務。平臺層由三部分組成:SQL Server實例、SQL Server Fabric、管理服務。SQL Server實例就是一個SQL Server數據庫引擎。每個SQL Server數據庫引擎實例都有各自的系統數據庫及用戶數據庫。一個實例的運行不會受其他實例運行的影響,也不會影響其他實例的運行。在一臺計算機上安裝多個SQL Server實例,就相當于把這臺計算機模擬成多個數據庫服務器,而且這些模擬的數據庫服務器是獨立且同時運行的。SQL Server Fabric是一個底層框架,是一個分布式的框架,集成了網絡、服務器和存儲,因此這個框架能夠使得SQL Azure自動進行負載均衡、數據容災、備份恢復。管理服務能夠對運行在其上的服務進行健康檢查、升級或者打補丁。并為SQL Server Fabric提供軟硬件支持。服務層連接了客戶端層和平臺層,包含三大功能:數據提供(Provisioning)、賬單和計量(Billing and 、Metering)、連接路由(Connection Routing),期中Provisioning 列舉了微軟云計算平臺賬戶。服務層同時暴露了帶有SSL的列表數據流(Tabular Data Stream ,TDS)給客戶端層。客戶端層是唯一運行在微軟數據中心之外的一層,不是使用SQL Azure任何特殊的組件,而是使用了當前客戶端上安裝的SQL Server的功能,如ADO.Net、WCF服務、ODBC、SQL Server管理工具。客戶端層使用API初始化一個TDS連接,通過1433端口連接到SQL Azure上。
具體的管理操作非常簡單,畢竟和SQL Server是同胞兄弟。用戶購買了SQL Azure服務后,登錄http://www.windowsAzure.com/zh-cn/,即可,當然如果只是想體驗一把,也可以選擇90天的免費試用。需要獲得Azure Services項目組的邀請。如下圖所示:
注冊成功后,我們來嘗試創建一個數據庫,填寫數據庫的創建參數。數據庫名稱是“TEST”,數據庫類型是Web,大小是30GB。在SQL Server 2012中,企業用數據庫最大可達到150G。
在創建數據庫的同時,會自動彈出數據庫服務器的設置界面,設置完成后,SQL Azure服務提供層自動提供SQL Azure對外服務接口。訪問SQL Azure中的數據,我們可以通過APIs訪問,如ADO.Net、ODBC或者PHP中的數據庫訪問,他們使用TDS+SSL的方式來訪問。也可以通過基于Web的客戶端,如瀏覽器、WCF數據服務客戶端、SilverLight等方式,使用HTTP或HTTPS來訪問云中的數據。
SQL Azure Sync
企業如何實現本地SQL Server與遠端SQL Azure之間的數據同步。很多企業為了提高數據的讀寫性能或者是為了保證即使在斷網情況下也可以有數據可用,就會在本地進行數據存儲,在這種情況下,就需要同步SQL Azure 中的數據。在這里微軟提供了SQL Azure Sync 工具來簡化數據同步過程。SQL Azure Sync 是完全基于配置的,而不需要用戶進行編程來實現數據同步。SQL Azure Sync 主要支持兩種同步方式:同步 SQL Azure 數據庫和本地的SQL Server 數據庫和同步在不同微軟數據中心的SQL Azure 數據庫。
所謂同步 SQL Azure 數據庫和本地的SQL Server 數據庫就是上面所說的有很多種原因需要用戶在本地保存一份SQL Azure 的數據。比如,為了提高性能或者是因為法律要求在國內必須有一份數據備份。即使SQL Azure 有內置的容錯機制,有些用戶也仍然想保存一份數據備份以防止像表格被誤刪那樣的系統管理操作錯誤。
另外一種就是在在不同微軟數據中心的SQL Azure 數據庫之間進行數據同步,很多大的跨國公司會有類似的需求,例如應用程序被世界各地的用戶所使用。為了提高性能,公司決定把該應用程序運行在微軟的三個數據中心里:北美、亞洲和歐洲。如果該應用程序使用SQL Azure 數據庫,它可以使用SQL Azure Sync 來同步在三個數據中心里的數據。
SQL Azure Data Sync數據同步工具為用戶提供了配置向導,以幫助用戶在SQL Sever數據庫和SQL Azure數據庫之間同步數據并定義同步規則。有了此工具,管理員只需輕點鼠標便可以將企業數據庫方便同步到云當中。運行SQL Azure Data Sync Tool for SQL Server。此時啟動的向導會對本地SQL Server實例進行配置并自動提供一個用于同步的Azure數據庫。確保服務器名稱、數據庫名稱及與sql.Azure.com所關聯的Live ID賬戶和密碼都輸入正確,除此之外,還需要設置與SQL Azure同步的本地SQL Server的服務器名和數據庫名稱。
SQL Azure Data Sync Tool工具靈活的帶領用戶完成 SQL Azure 數據同步工作,使得 SQL Server 與 SQL Azure 之間的數據布建和同步處理作業可以自動化。確保同步作業既有效率又可靠,而且不需要人工編寫任何程序代碼。