如果熟悉Windows Azure平臺的用戶不難發(fā)現,對于SQL Server數據庫來說,微軟提供了兩種服務,分別是:
-Windows Azure SQL Database(也就是以前的SQL Azure),提供PaaS的關系數據庫服務
-Windows Azure SQL Virtual Machine(SQL VM),提供了IaaS的關系型數據庫服務
有些讀者可能會疑惑,為什么微軟要提供以上2種的關系型數據庫服務?我們在實際使用過程中應該如何進行選擇呢?
本文將從以下幾個方面,來比較和說明SQL Azure和SQL VM的不同:
-SQL Server兼容性
-成本分析
-高可用性
-維護性
-橫向擴展性
總的來說,微軟設計SQL Azure和SQL VM這兩種不同的關系型數據庫服務,出發(fā)點在于:
-微軟對SQL Azure進行了優(yōu)化,以降低使用成本。SQL Azure提供了一個非??焖?、簡單的方式,讓用戶可以在云中構建可以橫向擴展(scale out)的數據庫。同時還降低了后續(xù)的管理成本。因為客戶不需要維護任何虛擬機或數據庫軟件。
-SQL VM是在Azure虛擬機中運行的,所以SQL VM的數據庫版本與傳統(tǒng)企業(yè)內部使用的SQL Server版本沒有任何區(qū)別,這樣就可以讓現有的數據庫應用直接遷移到Azure云上。SQL VM提供了完整的SQL Server產品功能,并給用戶提供云端的、已經裝好SQL Server實例的虛擬機。
1.SQL Server產品兼容性
1)SQL Server VM提供了傳統(tǒng)企業(yè)內部使用的SQL Server的完全相同的功能(包括Data Engine,SSAS,SSIS,SSRS)。SQL Server VM與傳統(tǒng)部署在企業(yè)內部的數據庫主機區(qū)別在于:SQL Server VM是部署在云端的,你不需要考慮底層的網絡、存儲、虛擬化等等問題,這些微軟的Windows Azure都幫你準備好了;如果你想將本地的數據庫遷移到云端,只要將本地備份的bak文件在SQL Server VM上restore就可以了。而且微軟提供了很多的虛擬機模板(image gallery),你只要在management porta里,選擇你需要的SQL Server版本(2008/2012,standard/enterprise)等等,你就可以非常簡單的創(chuàng)建云端的關系型數據庫了。
另外微軟提供了Windows Azure Virtual Network,這個功能可以將企業(yè)內部的網絡和云端的網絡打通,并且保證網絡的安全可靠,這樣我們就可以實現混和云。你可以想象一下,在混合云的情況下,當我們企業(yè)內部使用SQL 2012 Always-On,并且通過SQL Mirroring將數據保存至SQL Server VM,這樣的DR(災難恢復)模式可以保證我們的數據萬無一失。
2)SQL Azure并不支持傳統(tǒng)企業(yè)內使用的SQL Server的全部功能,但是它實現了其中相當大的一部分。它不同于SQL Server企業(yè)版,你可以認為它是SQL Server的特殊版本,面向PaaS。雖然SQL Azure很特殊,但是SQL Server Management Studio和SQL Server Data Tool還是可以用來管理SQL Azure。SQL Azure最大的特點是橫向擴展能力,這會在隨后的博文中做詳細介紹。
我個人建議,對于傳統(tǒng)企業(yè)級應用來說,使用SQ Server VM能保證最大的產品兼容性。但是對于新的基于云的應用來說,SQL Azure是更好的選擇。
2.成本分析
1)SQL Server VM的使用成本會比較高,因為用戶需要支付費用=OS+APP,比如Windows Server 2012+SQL Server 2012 Enterprise。具體的費用可以參考:http://www.windowsazure.com/en-us/pricing/details/virtual-machines/#service-sql-server
2)SQL Azure的使用成本比較便宜,用戶需要支付的費用=SQL Azure數據庫大小。具體的費用可以參考:http://www.windowsazure.com/en-us/pricing/details/sql-database/
3.高可用性
1)單個SQL Server VM是無法實現數據庫高可用性的。因為SQL Server VM的底層是虛擬化技術,在數據中心的服務器可能出現由于硬件問題導致的服務器故障。在故障發(fā)生的時候,Windows Azure后臺的Fabric Controller就會自動將服務器內部的SQL Server VM遷移到同一數據中心的正常的物理服務器上。在只有一臺SQL Azure VM的情況下,在發(fā)生故障導致的自動遷移的過程中,如果有客戶端發(fā)起向云端SQL Server VM的請求時,就會造成請求的失敗。不能提供高可用。
如果我們建立了多臺SQL Azure VM(SQL Server 2012版本),加入Virtual Network,并且設置了AlwaysOn Availability Group(這里不詳細介紹Always-On),這樣就可以實現SQL VM的高可用了。但是這需要我們的IT管理人員手動來配置(Virtual Network,alwayson availability group etc.)。并且由于增加了額外的備用SQL VM節(jié)點,用戶需要支付的云服務費用會增加。
2)SQL Azure在設計之初就考慮了高可用性,每次我們在SQL Azure創(chuàng)建數據庫的時候,在后臺會創(chuàng)建一個主數據庫備份和2個備用的數據庫(三重備份)。當主備份發(fā)生異常的時候,SQL Azure會將備份節(jié)點替代主備份,不會出現宕機時間。所以SQL Azure會提供99.9%的高可用性,并且使用該高可用性是無需支付額外費用的。
4.維護性
1)SQL Server VM是IaaS。也就是說,用戶需要自己維護操作系統(tǒng)和數據庫軟件,包括升級補丁、安裝備份工具等。這會給IT人員增加額外的工作。
2)SQL Azure是PaaS的。Windows Azure平臺會自動進行配置,微軟的數據中心會自動幫你打補丁和升級軟件。所以會減輕IT人員的工作。
5.可擴展性
可擴展性分為縱向(scale up)和橫向(scale out):
scale up一般指提升單個節(jié)點的能力,scale out一般指從單節(jié)點擴展到多節(jié)點,并行計算
scale up
1)目前Windows Azure VM的最強計算能力是8 Core+14GB(extra large)or 8Core+56GB(A8),16TB的存儲和800MB的網絡帶寬。我們如果要縱向擴展的話,會受到目前Azure VM的大小限制。
2)SQL Azure不能配置硬件設備。
scale out
1)Azure VM的scale out需要手動配置,比如Always On只讀副本,數據庫分區(qū)等等。
2)SQL Azure包含SQL Federation功能(我會在后續(xù)的文章中進行介紹)。有了SQL Azure Federation,我們可以將1個數據庫分割在幾個甚至上百個節(jié)點上,SQL Azure是天然支持橫向擴展的。
其他SQL Azure Database的技術限制,請參考MSDN文章
https://msdn.microsoft.com/zh-cn/library/azure/ee336245.aspx