Connect(); Special Issue 2018

33 卷,第 13

Azure SQL 数据库-引入 Azure SQL 数据库的超大规模

通过Kevin Farlee;特殊问题 2018

在 Ignite 大会上,我们宣布推出公共预览版的 Azure SQL 数据库超大规模、 新的存储体系结构提供的基于 SQL 的和进行适应性调整按需为工作负荷的需求的高度可缩放的服务层的数据库。使用 Azure SQL 数据库超大规模,数据库可以快速自动缩放最多 100 TB,无需预先设置的存储资源,并显著扩展应用程序增长的可能性,无需受到限制,则受存储大小。

与当前的 Azure SQL 数据库服务层相比,Azure SQL 数据库超大规模提供了以下附加功能:

  • 支持 100 TB + 数据库大小
  • 快速扩展/缩减和时间点还原,而不考虑数据库大小
  • 减少数据大小的操作
  • 日志吞吐量高于当前服务层
  • 向外缩放只读工作负荷的读取缩放副本,而无需数据复制

新体系结构

Azure SQL 数据库的超大规模是内完成而不需要在查询引擎,处理查询,并确定行为中进行更改的 SQL 数据库的存储引擎基础重新架构。因此,我们添加了重要的新功能而不会引入任何兼容性挑战。

Azure SQL 数据库超大规模体系结构分解成多个微服务专为云环境中; 设计整体化 SQL 引擎计算、 日志和存储中分离出来这些服务。

如中所示图 1,Azure SQL 数据库超大规模模型包含三个主要组件:

  • 计算是从 SQL Server,数据库引擎执行的查询逻辑,并确定与其他 SQL 实现以及行为的兼容性评估查询时的一部分的查询引擎。
  • 页服务器是用于存储的数据的使用传统的存储引擎组件,并将它拆分为横向扩展组服务,管理一组定义 (名义上合计为 1 TB 的数据页) 的数据页的每个新的横向扩展体系结构。
  • 日志服务是新的日志记录体系结构,用于管理日志数据,以确保对数据的记录的更新获取传播到所有副本的更改的页面,并为未来的需要持久保持的数据流。

新的 Azure SQL 数据库超大规模体系结构
图 1: 新的 Azure SQL 数据库超大规模体系结构

计算节点

计算节点看起来像传统的 SQL Server,但如果没有本地数据文件或日志文件。计算节点是应用程序和用户进行交互,更新 (通过主计算节点) 的数据或执行操作通过一个可读辅助副本的严格只读事务是否计算节点的"服务器"。

主要的计算节点将事务日志记录写入到日志服务的放置区域,并从页面的服务器提取数据页,如果它们不本地数据缓存或弹性缓冲池扩展 (RBPEX) 中找到。这是所有查询执行逻辑的驻留位置和逻辑是其他 SQL 部署模式相比并无变化。保留此顶层 SQL 引擎很大程度上保持不变,您就可以保持与 SQL 其他部署模式完全兼容,同时提供单独的存储部分提供了革新性的新功能。由于我们已分开的计算节点包含从存储查询引擎,它们有效地无状态,这意味着可以而无需在所有危害的任何数据丢失的计算节点。这还意味着,可以纵向扩展计算资源或向下而无需移动任何数据,提供无与伦比的灵活性在向上或向下缩放资源将。

我将稍后讨论更多的高可用性 (HA) 功能。

日志服务

日志服务本次超大规模数据库的事务日志。主要的计算实例的日志记录将直接写入到日志服务所管理的 Azure 高级存储 ("放置区域"中图 1)。日志服务的登录区域从检索日志记录,并使其可供页服务器和辅助计算。日志服务还将卸载到更经济长期存储,以支持时间点还原的日志记录。

放置区域是 Azure 高级存储,具有复原功能,内置的高可用性,因为日志记录是持续保存且安全只要他们正在写入到的登录区域。与可比较 AlwaysOn 可用性组 HA 体系结构适用于在本地 SQL Server,事务提交需将其发送到通过网络协议的辅助副本的仲裁和确认接收来自前副本的仲裁可以认为事务完成,并成功返回到调用应用程序。这可能需要相当长的时间长的时间比使用超大规模体系结构。您可以完全高可用性而无需等待辅助节点确认收到的日志记录。这意味着,甚至使用完整的高可用性,可以端到端日志的延迟在 2ms 范围。Azure 超高 SSD 存储技术可用时,这种延迟将从围绕 0.4ms 远程、 完全持久、 弹性数据存储到 2.5ms年收缩。

最后,进行长期存储的 Azure 标准存储中保存的日志记录并回收中的登录区域的空间。在 Azure 存储中的日志记录保留长达配置为在数据库中,因此无需执行事务日志备份的备份保留期。您只需保留的日志数据联机,这将使您有效 (在用户配置备份保留期的边界) 的无限的事务日志。

页的服务器

页服务器托管和维护的数据文件。它们使用日志服务的日志流和应用数据修改日志流式传输到数据文件中所述。在计算的本地数据缓存或 RBPEX 中找不到的数据页的读取请求将转发到页服务器拥有相关页。在服务器页中,数据文件保存在 Azure 存储中,并且很大程度缓存通过其自己的基于 RBPEX SSD 缓存。

每个页服务器管理页表示约为 1 TB 的数据,因此约为 1 TB 为单位的页面服务器横向扩展。计算节点/查询引擎模型页中的每个服务器,如 1 TB 数据文件中,从的页 ID (文件 ID:页文件中),您知道哪些页面服务器完全托管所请求的页面。

每个页服务器的数据最终保存在 Azure 标准存储,从而提供完整的恢复能力和可用性。  因此,您可以在丢失整个页面服务器继续存在而且不会丢失任何数据,因为数据是完全可从 Azure 存储,并可以完全重新生成基于该数据,如果所需的页服务器。

以便在操作中,没有数据请求曾经转发到 Azure 存储支持页服务器,因为始终可以从本地 RBPEX 缓存满足在其自己本地 SSD RBPEX 缓存中,每个页服务器的数据完全缓存。

对于大型数据库,将创建多个页服务器。当数据库的增长和页上的现有服务器中的可用空间低于阈值时,新的页服务器是自动添加到数据库。页服务器在独立工作,因为可以增长的数据库没有任何本地资源限制。

高可用性和灾难恢复 (DR)

自动备份和时间点还原在超大规模数据库中,数据文件的状态从页服务器,从而利用 Azure blob 存储功能,定期来替换传统的流式处理备份。这允许您备份非常大的数据库只需几秒钟,而不会影响到正在运行的工作负荷。日志服务中存储的日志记录,以及您可以将数据库还原到任何点的保留期期间的时间 — 这七天处于公共预览状态,并且将进行配置,最到 35 天公开上市 (GA)) 时,在很短的时间而不考虑数据库大小。每个页服务器的数据是拍摄独立,与同步快照,以便消除延迟该潜在源,也不要求。

高度可用的组件每种 Azure SQL 数据库超大规模体系结构中的组件被设计为高度可用,以便不将数据库访问中的任何中断:

  • 计算节点热在所有时间和每个具有至少一个运行的副本。在计算节点发生故障或故障转移时,副本将立即接管主角色,从而保持该数据库联机和可用。替换副本可以非常快速地启动数据库且可以预热其缓存作为后台任务而不会影响生产环境性能。其他副本可能配置为读取横向扩展目的。这种体系结构,是有效地无状态计算节点。
  • 页服务器使用完全填充,其 RBPEX 缓存具有备用副本联机,以便它们可接管活动页面服务器发生故障时。同样,因为它们是无状态缓存的数据之外,替代可以处于联机状态非常快,而无需任何数据丢失的风险。
  • 日志服务没有热备用服务器,但这是不必要的因为日志服务具有任何缓存的数据,并且可以作为快速无法故障转移到备用副本替换。由日志服务管理的数据首先驻留在放置区域,这是可复原的 Azure 高级存储 (很快超高的 SSD 存储),最终的长期保留的 Azure 标准存储中保持不变。

因此,正如您所看到的是表示单一故障点没有组件。所有超大规模组件的活动备用设备,除了日志服务,且完全复原能力的 Azure 存储受支持的所有数据。

创建您自己的超大规模数据库

可以创建其他任何 Azure SQL 数据库,使用 Microsoft Azure 门户、 PowerShell 或 Azure 资源管理器 (ARM) 的相同方法来创建新的超大规模数据库。

在这里,我将介绍创建使用 PowerShell 的超大规模数据库的方法。请注意,这与用于创建任何 Azure SQL 数据库,除了-RequestedServiceObjectiveName 参数的标准脚本没有什么不同。在示例中,如下所示,我将使用 HS_Gen5_8,这是一个超大规模 SQL 数据库,在第 5 代硬件上,有 8 个内核。当然,如果已有资源组和逻辑服务器,则可以跳过部分的脚本。

将需要执行的第一个操作是启动 Azure Cloud Shell。Cloud Shell 是免费的交互式 shell,可用于运行本文中所述的步骤。它有常用 Azure 工具预安装并配置为使用与你的帐户。您可以只需单击复制按钮以复制代码,然后将代码粘贴到 Cloud Shell,并按 enter 来运行它。

有多种方法来启动 Cloud Shell。在最简单到任一打开 Cloud Shell 在浏览器中通过转到它们的之间shell.azure.com/powershell和单击启动 Cloud Shell 按钮,或通过单击 Cloud Shell 按钮在 Azure 门户的右上方的菜单上。我建议使用第二种方法。登录到 Azure 门户portal.azure.com使用有权访问你的 Azure 订阅的帐户。然后单击上的链接,如中所示图 2

从 Azure 门户启动 Cloud Shell
图 2 启动从 Azure 门户的 Cloud Shell

可以随后执行粘贴操作中所示的脚本图 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。

为你配置的另一个对象是授予对你的服务器访问权限的防火墙规则。示例脚本将起始 ip 和结束 ip 设置为 0.0.0.0,它不允许任何访问。通过在门户中,单击"显示防火墙设置"查找新的服务器,然后单击"添加客户端 IP,"会将其添加一个防火墙规则,允许在连接到数据库的当前计算机上,可以为特定计算机中添加的地址。

创建数据库和服务器,并调整防火墙规则,您可以连接到数据库使用 SQL Server Management Studio (SSMS)。该脚本将输出分配给 SQL 服务器的名称。只需将附加"。 database.windows.net"到服务器名称连接时。在此脚本中包含用户名和密码 (当然,您可以并且应该将其更改为仅你知道)。此时,你已连接到新的超大规模数据库。

创建 Azure SQL Database 超大规模的其他方法,请参阅bit.ly/2QoTLbj

下一代数据库体系结构

通过此简短的教程,你已了解 Azure SQL 数据库超大规模是革新性的新体系结构,提供与前几代的 SQL 引擎完全兼容的唯一好处。Azure SQL 数据库的超大规模是真正是种基于云的用户,并具有规模、 性能和可管理性方面的明显优势。通过消除常见的数据大小的操作,就能够提供非常大的数据库 (VLDB) 功能,而无需典型 VLDB 挑战。有关更多详细信息,请参阅的"超大规模服务层 (预览版) 为最多 100 TB"页面bit.ly/2TTJkeK


Kevin Farlee在行业中,在数据库和存储管理软件中拥有 30 年以上。在担任 Microsoft SQL 数据库团队的主体一样程序经理,他正在开展开发 Azure SQL DB 的超大规模 VLDB 功能。

衷心感谢以下 Microsoft 技术专家对本文的审阅:Alain Dormehl,Xiaochen Wu
Alain Dormehl 是基于在雷德蒙德的 Microsoft Azure SQL 数据库团队的高级程序经理。他曾在 Microsoft 担任多种角色,现在专注于针对 Azure SQL 数据库的功能和产品开发。他有十年中的 SQL Server 上的经验,是早期采用者和 Azure 推广人员。在 Twitter 上关注他@APSolutely

Xiaochen Wu 是 Microsoft SQL 团队的高级项目经理。他从事多项功能和 SQL Server 和 Azure SQL 数据库中的产品在过去 10 年。在 Twitter 上关注他@allenwux


在 MSDN 杂志论坛讨论这篇文章