Connect(); Special Issue 2018

第 33 卷 13

Azure SQL Database-Azure SQL Database 的超大規模的簡介

藉由Kevin Farlee;特殊問題 2018

Ignite 研討會中,我們宣布公開預覽的 Azure SQL Database 的超大規模、 提供以 SQL 為基礎的新儲存體架構和調整視您的工作負載需求的高度可調整的服務層的資料庫。透過超大規模 Azure SQL Database,資料庫可以快速地自動調整規模達 100 TB,不需要預先佈建儲存體資源,並大幅展開應用程式成長的可能性,而不受限於儲存體大小。

相較於目前的 Azure SQL Database 服務層,Azure SQL Database 的超大規模提供下列額外的功能:

  • 支援 100 TB + 資料庫大小
  • 快速相應增加/減少和還原時間點,而不用考慮資料庫大小
  • 較少的資料大小的作業
  • 高於目前的服務層記錄輸送量
  • 向外延展唯讀工作負載的讀取級別複本,而不需要複製資料

全新架構

Azure SQL Database 的超大規模是基本的重新架構,就不需要在查詢引擎,處理查詢,並判斷行為的變更已完成的 SQL database 中的儲存體引擎。因此,我們已新增重要的全新功能,且不會造成任何相容性挑戰。

Azure SQL Database 的超大規模架構分成數個微服務,專為雲端環境中,整合型的 SQL 引擎這些服務分離計算、 記錄和儲存體。

中所示**[圖 1**,Azure SQL Database 的超大規模的模型是由三個主要元件組成:

  • 計算是查詢引擎,從 SQL Server 資料庫引擎可執行的查詢邏輯,並評估查詢時,決定與其他 SQL 實作,以及行為的相容性的部分。
  • 網頁伺服器是新的向外延展架構,來儲存資料,會採用傳統的儲存引擎元件,並會分割成向外延展的一組服務,每個管理一組定義的資料頁 (表面上總計 1 TB 的資料頁)。
  • 記錄服務是一種新的記錄架構,管理資料流的記錄資料,確保資料的記錄的更新取得傳播到所有複本的已變更的頁面上,以及永久保存在未來的需求。

新的 Azure SQL Database 超大規模架構
圖 1] 新的 Azure SQL Database 超大規模架構

計算節點

計算節點看起來就像傳統的 SQL Server,但如果沒有本機資料檔案,或記錄檔。計算節點都是 「 伺服器 」 應用程式和使用者互動,來更新資料 (透過主要的計算節點),或是透過其中一種可讀取的次要複本的嚴格唯讀交易是否計算節點。

主要的計算節點將交易記錄檔記錄寫入至登陸區域的記錄服務,並從網頁伺服器擷取資料頁,如果它們找不到本機資料快取或復原緩衝集區延伸模組 (RBPEX)。這是所有查詢執行邏輯的所在位置,以及邏輯是從其他的 SQL 部署模式不變。藉由保留此最上層的圖層,大部分未變更的 SQL 引擎,您可以維護完整的相容性與其他的部署模式的 SQL,同時提供不同的儲存體元件提供的革命性新功能。我們已經有獨立的計算節點,其中包含從儲存體查詢引擎,因為它們實際上無狀態,這表示您可能會在計算節點遺失而不需要完全危害任何資料。這也表示您可以相應放大計算資源,或向下而不移動任何資料,其會在向上或向下調整資源時,提供無與倫比的靈活度會。

我稍後會討論更多的高可用性 (HA) 功能。

記錄服務

記錄服務顯現出超大規模資料庫的交易記錄檔。主要的計算執行個體的記錄服務所管理的 Azure 進階儲存體中直接寫入記錄檔記錄 (「 登陸區域 」 中**[圖 1**)。記錄服務會擷取從登陸區域的記錄檔記錄,並讓它可用到網頁伺服器和次要計算。記錄服務也會卸載至低成本的長期的儲存體,以支援時間點還原的記錄檔記錄。

由於登陸區域是 Azure 進階儲存體,其具有恢復功能和它內建 HA,記錄檔記錄會保存,而且安全只要正在寫入的登陸區域。比較 AlwaysOn 可用性群組 HA 架構的內部部署 SQL Server,交易認可必須傳送至 via 網路通訊協定,次要複本的仲裁,且確認收到從之前的複本的仲裁交易可以被視為完成,並成功傳回呼叫的應用程式。這可能需要比透過超大規模架構中的時間更長期間。您可以有完整的 HA,而不需等待認可接收的記錄檔記錄的次要節點。這表示即使有完整的 HA、 端對端記錄檔延遲中有 2 毫秒範圍。可以使用 Azure 的強力 SSD 儲存體技術時,此延遲會壓縮從遠端、 完全持久和可恢復的資料儲存體的 0.4ms年周圍以 2.5ms年。

最後,記錄檔記錄都保存於長期的儲存體的 Azure 標準儲存體,並回收其空間中的登陸區域。Azure 儲存體中的記錄檔記錄會保留,只要設定資料庫,因此不需要執行交易記錄備份的備份保留期限。您只是保留記錄資料連線,讓您有作用中的無限的交易記錄檔 (在使用者設定的備份保留期限的範圍)。

網頁伺服器

網頁伺服器主控和維護的資料檔案。在取用記錄資料流記錄服務中的,並套用資料修改記錄資料流的資料檔案中所述。計算的本機資料快取或 RBPEX 中找不到的資料頁的讀取要求都會轉送到擁有相關頁面的網頁伺服器。在 [網頁伺服器,資料檔案會保存在 Azure 儲存體,並會大量快取透過自己 RBPEX SSD 為基礎的快取。

每一部網頁伺服器管理頁面代表大約 1 TB 的資料,讓網頁伺服器將水平調整大約 1 TB 為單位。計算節點/查詢引擎模型的每一部網頁伺服器,為 1 TB 資料檔,請從頁面識別碼 (檔案識別碼:頁面檔案中),您知道哪些頁面伺服器完全裝載所要求的頁面。

每個網頁伺服器的資料最終會保存在 Azure 標準儲存體,提供完整的恢復力和可用性。  因此,您可以損壞的整個網頁伺服器而不致遺失任何資料的資料是完全可供使用,從 Azure 儲存體,以及您可以完全重建資料如有需要的網頁伺服器。

每個網頁伺服器的資料完全快取在它自己本機 SSD RBPEX 快取,以便在作業中,沒有資料的要求不斷轉送至 Azure 儲存體備份網頁伺服器上,因為永遠可以滿足本機的 RBPEX 快取之外。

多部網頁伺服器將會建立大型的資料庫。當資料庫成長,並在現有的網頁伺服器的可用空間低於臨界值時,則新的網頁伺服器會自動加入至資料庫中。因為網頁伺服器獨立工作,您可依沒有本機資源條件約束的資料庫。

高可用性和災害復原 (DR)

自動備份和還原時間點在超大規模資料庫中,資料檔案的拍攝快照時,從網頁伺服器,利用 Azure blob 儲存體功能,定期以取代傳統的資料流備份。這可讓您將備份非常大型的資料庫中只要幾秒鐘,而不會影響到執行中工作負載。儲存記錄檔服務的記錄檔記錄,以及您可以將資料庫還原到任何時間點的保留期間的時間 — 這七天處於公開預覽狀態,因此可達 35 天,在正式運作 (GA),在極短的時間而不用考慮資料庫的大小。每個網頁伺服器的資料,同步處理快照集,因此消除的潛在來源,也不需要,請以獨立地是延遲的快照。

高度可用的元件每一個 Azure SQL Database 的超大規模架構中元件的設計,因此會有任何中斷資料庫存取權才能提供高可用性:

  • 計算節點各有至少一個執行的複本,且熱隨時。發生計算節點失敗或容錯移轉時,立即會接管主要角色,讓資料庫保持上線而且可以使用的複本。替代複本可以非常快速地啟動,並可以準備其快取背景工作的形式而不影響生產環境的效能。讀取向外延展供可設定其他複本。此架構,計算節點都是有效的無狀態。
  • 網頁伺服器都有待命複本線上完全擴展,其 RBPEX 快取,使用它們來接管使用中的網頁伺服器發生失敗時,您可以使用。同樣地,因為它們是無狀態的快取的資料之外,替代項目可以是線上卻非常快速,而不需要任何資料遺失的風險。
  • 記錄服務並沒有熱待命中,但這是不必要的記錄服務沒有快取的資料,並可取代您無法容錯移轉至待命複本速度一樣快。管理記錄檔服務的資料位於第一次登陸區域,這是具有恢復功能的 Azure 進階儲存體 (推出強力的 SSD 儲存體),並最終會保存在 Azure 標準儲存體進行長期保留。

因此,如您所見,是代表單一失敗點沒有元件。所有的超大規模元件的作用中的待命,除了 「 記錄 」 服務,以及所有資料完全復原 Azure 儲存體為後盾。

建立您自己的超大規模資料庫

您可以建立任何其他 Azure SQL Database,使用 Microsoft Azure 入口網站、 PowerShell 或 Azure Resource Manager (ARM) 的相同方式來建立新的超大規模資料庫。

在這裡,我會說明要建立使用 PowerShell 的超大規模資料庫的方法。請注意,這是與標準的指令碼來建立任何 Azure SQL Database-RequestedServiceObjectiveName 參數除外。在範例中,如下所示,我將使用 HS_Gen5_8,也就是超大規模的 SQL 資料庫中,在產生 5 硬體上,具有八個核心。當然,如果您已經有資源群組和邏輯伺服器時,您可以略過這部分的指令碼。

您必須執行的第一件事是啟動 Azure Cloud Shell。Cloud Shell 是免費的互動式殼層,可供您執行本文中所述的步驟。它具有預先安裝和設定您的帳戶搭配使用的共用 Azure 工具。您可以按一下以複製程式碼,然後將程式碼貼到 Cloud Shell 中的 [複製] 按鈕,並按 enter 鍵加以執行。

有數種方法來啟動 Cloud Shell。在最簡單的是與在瀏覽器中移至其中一個開啟 Cloud Shell shell.azure.com/powershell並按一下 [啟動 Cloud Shell 按鈕,或按一下 [Cloud Shell 中按鈕的功能表中的 Azure 入口網站右上角。我建議您將第二個方法。登入 Azure 入口網站,網址portal.azure.com使用可存取您 Azure 訂用帳戶的帳戶。中所示,然後按一下連結**[圖 2**。

啟動 Cloud Shell 中的從 Azure 入口網站
啟動 Cloud Shell 中的從 Azure 入口網站的 [圖 2

然後,您可以將指令碼所示**[圖 3**到 Cloud Shell 視窗並執行它來建立資源群組、 SQL 邏輯伺服器和資料庫。請注意資源群組名稱設定為"myResourceGroup-",再加上隨機的數字,例如 「 MyResourceGroup-2088327474。 」 其他物件的命名類似。不過,您可以自訂這些名稱,如果是更方便。

[圖 3 建立的資源群組、 SQL 邏輯伺服器和資料庫

# Set the resource group name and location for your server
$resourcegroupname = "myResourceGroup-$(Get-Random)"
$location = "westus2"
# Set an admin login and password for your server
$adminlogin = "ServerAdmin"
$password = "ChangeYourAdminPassword1"
# Set server name - the logical server name has to be unique in the system
$servername = "server-$(Get-Random)"
# The sample database name
$databasename = "mySampleDatabase"
# The IP address range that you want to allow to access your server
$startip = "0.0.0.0"
$endip = "0.0.0.0"
# Create a resource group
$resourcegroup = New-AzureRmResourceGroup -Name $resourcegroupname -Location $location
# Create a server with a system-wide unique server name
$server = New-AzureRmSqlServer -ResourceGroupName $resourcegroupname `
  -ServerName $servername `
  -Location $location `
  -SqlAdministratorCredentials $(New-Object -TypeName
    System.Management.Automation.PSCredential -ArgumentList $adminlogin,
    $(ConvertTo-SecureString -String $password -AsPlainText -Force))
# Create a server firewall rule that allows access from the specified IP range
$serverfirewallrule = New-AzureRmSqlServerFirewallRule
  -ResourceGroupName $resourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowedIPs" -StartIpAddress $startip -EndIpAddress $endip
# Create a blank database with the Hyperscale, Gen5, two-core performance level
$database = New-AzureRmSqlDatabase  -ResourceGroupName $resourcegroupname `
  -ServerName $servername `
  -DatabaseName $databasename `
  -RequestedServiceObjectiveName "HS_Gen5_2" `
  -SampleName "AdventureWorksLT"
Echo $servername
# Clean up deployment
# Remove-AzureRmResourceGroup -ResourceGroupName $resourcegroupname

在指令碼中,伺服器會建立在 WestUS2 區域中。此時,超大規模不適用於所有 Azure 區域,因此您可以將它保存在 WestUS2,也就是使用中,或嘗試另一個區域。如果您收到錯誤指出 「 已指定版本無法使用。這表示,您所選擇的區域尚未已啟用超大規模請選擇不同的版本,"。您可以嘗試另一個區域,或使用 WestUS2。

會為您設定的另一個物件是授與存取您伺服器的防火牆規則。範例指令碼將 startip 和 endip 為 0.0.0.0,不允許任何存取權。您可以新增特定電腦的位址,藉由尋找新的伺服器中的入口網站中,然後再按一下 [顯示防火牆設定],然後按一下 [新增用戶端 IP,] 將會新增防火牆規則,允許您目前的電腦連線到資料庫。

一旦建立您的資料庫和伺服器,並調整防火牆規則,您可以連接到您的資料庫使用 SQL Server Management Studio (SSMS)。指令碼會列印出它指派給 SQL Server 的名稱。只需附加"。 database.windows.net 「 當您連接的伺服器名稱。此指令碼中包含的使用者名稱和密碼 (當然,您可以也應該將它們變更為只有您知道的東西)。此時,您連線至新的超大規模資料庫。

其他方法來建立 Azure 超大規模的 SQL Database,請參閱bit.ly/2QoTLbj

下一代資料庫架構

與這個簡短的教學課程,您已了解 Azure SQL Database 的超大規模的革命性新的架構,提供完整的相容性與舊版 SQL 引擎的獨特優點。Azure SQL Database 的超大規模真正雲端產生,且具有顯著的優勢規模、 效能和管理能力。藉由消除常見的資料大小的作業,就能夠提供極大型資料庫 (VLDB) 功能,而不需要傳統的 VLDB 挑戰。如需詳細資訊,請參閱 「 超大規模的服務層 (預覽) 的最多 100 TB 」 頁面bit.ly/2TTJkeK


Kevin Farlee中資料庫和儲存體管理軟體產業裡有 30 年以上。現今的職務為 Microsoft SQL Database 小組的主體的專案經理,他參與開發 Azure SQL DB 的超大規模 VLDB 功能。

感謝下列 Microsoft 技術專家來檢閱這篇文章:Alain Dormehl,Xiaochen Wu
Alain Dormehl 是在 Redmond 的 Microsoft Azure SQL Database 小組擔任資深專案經理。他已保留在 Microsoft 的各種角色,並且目前致力於 Azure SQL database 的功能和產品開發。他與 SQL Server 的經驗已經十年和早期採用者和適用於 Azure 的技術推廣人員。在 Twitter 上追蹤他@APSolutely

Xiaochen Wu 是 Microsoft SQL 小組的資深專案經理。他一直致力於數個功能和 SQL Server 和 Azure SQL Database 中的產品在過去 10 年。在 Twitter 上追蹤他@allenwux


MSDN Magazine 論壇中的這篇文章的討論