在 Azure SQL 上为大型 SaaS 提供一百万个数据库

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:微软中国MSDN网络

小提示:您能找到这篇{在 Azure SQL 上为大型 SaaS 提供一百万个数据库}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的在 Azure SQL 上为大型 SaaS 提供一百万个数据库内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">通过Azure SQL实现蓬勃发展

< ">非常感谢来自Microsoft Dynamics团队的同事Mahesh Sreenivas、Pranab Mazumdar、Karthick Pakirisamy Krishnamurthy、Mayank Mehta和Shovan Kar为本文所做的贡献。

< ">[概述]

< ">Dynamics 365是一组智能的SaaS业务应用程序,可帮助来自各个行业的各种规模的公司运行其整个业务,并通过预测性的、由AI驱动的见解来提供更好的结果。Dynamics 365应用程序构建于Microsoft Power Platform之上,该平台提供了可扩展的基础,不仅可以运行Dynamics应用程序本身,还可以让客户、系统集成商和ISV创建针对特定行业的自定义内容,并将其业务流程连接到利用无代码/低代码方法的数百个现有连接器的其他解决方案和系统。

< ">Microsoft Power Platform(还提供Power Apps、Power Automate、Power Virtual Agents和PowerBI等服务)建立在Azure SQL数据库等Microsoft Azure服务基础上,这些服务提供可扩展且可靠的底层计算、数据、管理和安全服务,为上图中表示的整个堆栈提供支持。

< ">[历史背景]

< ">Microsoft Dynamics 365的根是一套打包的业务解决方案,例如Dynamics AX、NAV和CRM,它们在全球各地的客户数据中心的多个Windows Server和SQL Server版本上运行。

< ">当软件即服务范例开始在商业应用程序行业中占主导地位时,Dynamics CRM使得该产品包成为Microsoft最早的在线服务之一。在向SaaS方式转变的初期,Dynamics服务在Microsoft本地数据中心中的裸机服务器上运行。随着每天数百万计的活动用户所带来的使用增长,部署和运行所有这些服务器、管理容量需求以及及时响应不断增长的客户数据量(对于最大规模的租户而言,数据库大小分布从100 MB增加到超过4 TB)所带来的工作量最终将变得难以管理。

< ">Dynamics是最早采用Microsoft SQL Server 2012 AlwaysOn来实现业务连续性平台之一,它还通过创建额外副本以重新平衡利用率的方式提供了一种灵活的方法来将客户数据库移动到新的群集。

< ">大规模管理如此众多的数据库显然是一项复杂的任务,它涉及从初始资源配置到监控、修补和运行这一庞大的系统的整个数据库生命周期,同时还要保证可用性。团队还学会了如何处理不在故障转移-就绪状态的仲裁丢失和副本等问题。从性能的角度来看,在共享基础节点上运行的数据库实例使得我们很难隔离性能问题,并且除了将单个实例移至新节点之外,它提供的扩展或适应突发工作负载的选项也很有限。

< ">由于最终客户可以在其环境中运行(高度定制的)应用程序的多个版本,导致产生明显不同的工作负载,因此,听到通用数据服务团队的合作伙伴组工程经理Mahesh Sreenivas说在传统平台上管理和维护所有这些组件“对工程师和最终客户都非常痛苦”也就不足为奇了。

< ">转向Azure和Azure SQL数据库

< ">Dynamics 365团队决定将其平台迁移到Microsoft Azure,以解决这些管理和运营难题,同时满足客户需求并确保平台基础性能(如可用性和可靠性),并让工程团队专注于添加创新功能。

< ">从最初的设计到生产的工程工作花好几年的时间,其中包括将客户迁移到新的基于Azure的平台,从在本地运行的整体代码库迁移到在Azure上运行的世界一流的行星级大规模服务。

< ">[Azure SQL数据库中的常用数据服务]

< ">第一个关键决定是从一组异构应用程序(每个应用程序都有自己的历史和技术特点)转移到一个通用的基础平台,在该平台上,Dynamics危机公关公关危机的应用程序成为常规应用程序,就像其他ISV公司可以构建和运行的应用程序一样:因此引入了Microsoft Power Platform及其公共数据服务层。本质上,基于基础Azure功能(如计算、存储、网络和Azure SQL数据库等其他专门服务)构建的新的无代码或低代码平台是一种从基础平台提取Dynamics应用程序的方法,让Dynamics开发人员可以专注于向平台转移而无需管理数据库实例等单个资源。

< ">现在,该平台还托管着PowerApps、Power Automate、Power Virtual Agents或PowerBI等其他服务,其他公司可以基于该平台构建自己的SaaS应用程序,从无代码的简单解决方案到全代码专用ISV应用程序都可以,且无需担心如何管理计算和各种存储设施等基础资源。

< ">通过将一个大约可管理100万个数据库实例的平台迁移到Azure(截至2020年7月),Dynamics团队学习了很多有关基础服务工作原理的知识,还互惠互利地向其他Microsoft团队提供了大量反馈,以使其服务更好。

< ">从架构的角度来看,通用数据服务以逻辑戳(或规模组)进行组织,逻辑戳具有计算和数据两层,其中关系数据存储基于Azure SQL数据库构建,因为团队以前对SQL Server 2012和2016很熟悉。它提供了具有3(或更多)个9的SLA的经过预先配置的现成高可用性,具体取决于选择的服务层。业务连续性也通过Geo-restore、Active Geo-replication和Auto Failover Groups等功能得到了保证。

< ">与在共享的单个SQL Server实例本地运行多个数据库相比,Azure SQL数据库通过减少表、索引或备份级别的数据库损坏事件而为团队提供了很大的帮助。同样,在物理计算机上的固件、操作系统和SQL Server上打补丁所需的若干工时已减少到仅需管理应用程序层及其数据。

< ">链接:

< ">过预先配置的现成高可用性

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/high-availability-sla

< ">业务连续性

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/business-continuity-high-availability-disaster-recover-hadr-overview

< ">[Azure SQL数据库弹性池]

< ">登录Azure SQL数据库后,第二个关键决策是采用弹性池来托管其数据库。Azure SQL数据库弹性池是一款简单且经济高效的解决方案,可以管理和扩展多个具有不断变化且无法预测的使用需求的数据库。弹性池中的数据库位于单个逻辑服务器上,并以固定价格共享给定数量的资源。SaaS应用程序开发人员可以在拟定的资源预算内优化数百个数据库的性价比,同时为每个数据库提供性能弹性并通过为每个租户设置最小-最大利用率阈值来控制多租户。同时,它们通过为每个数据库提供单独的访问控制策略来加强安全性和隔离。“通过迁移到Azure SQL数据库弹性池,我们的团队不需要在管理复制这方面进行过多投资,因为它由Azure SQL数据库服务负责处理”,Mahesh解释说。

< ">Microsoft Power Platform为使用其产品组合中给定服务的每个租户使用一个单独的帐户。

< ">链接:

< ">Azur电商企业代运营e SQL数据库弹性池

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/elastic-pool-overview

< ">[“Spartan”资源管理层]

< ">考虑到广泛的客户行业、规模和(定制的)工作负载,关键要求之一是能够在一组弹性池中高效地分配和管理这些数据库,从而最大程度地利用和管理资源。要实现此目的,必须满足以下三点:

< ">1.规模和容量规划方面的灵活性

< ">2.为单个租户扩展资源的敏捷性

< ">3.优化的性价比

< ">在Azure SQL数据库平台为全面管理这些方面提供了基础(例如,在线服务层扩展、在池之间移动数据库的能力、从单个数据库移至池的能力或反之、多种性价比选择等)的同时,Dynamics团队还创建了一个专用管理层,以根据应用程序定义的条件和策略自动执行这些操作。“Spartan”就是这个管理层,其设计目的就是为了最大程度地减少手动操作。它具有可扩展的微服务平台(以ARM资源提供程序方式实现),后者负责其数据库的整哥生命周期。

< ">链接:

< ">ARM资源提供程序

< ">https://docs.microsoft.com/en-us/azure/azure-resource-manager/custom-providers/overview

< ">Spartan是一个API层,不仅负责数据库CRUD操作(创建、读取、更新和删除),还负责所有其他操作,例如在弹性池之间移动数据库以最大程度地利用资源,在池和逻辑服务器之间实现客户工作负载的平衡,管理备份保留以及将数据库还原到先前的时间点。平台还自动管理分配给数据库和池的底层存储,以避免效率低下并最大化密度。在生产中收缩数据库这样的操作似乎很少见,但对于需要操作超过100万个数据库并优化成本的平台而言,却是一项很常见的任务。

< ">弹性池按“层”进行组织,其中每个层根据所使用的基础服务层(通用、关键业务)和分配的计算大小提供不同的配置,以便最终客户数据库始终以最佳性价比运行。除防火墙设置等其他详细信息外,每个层还控制关联数据库的最小-最大设置,并定义每个池的最佳数据库密度。



图1每个缩放组的Azure SQL数据库布局

< ">上图将弹性池这种逻辑组织表示为多个层,并显示了Dynamics团队用来在粒度资源分配和成本优化之间找到最佳折衷的DTU和vCore购买模型的组合。

< ">对于非常大的客户,该平台还可以将这些数据库从共享池移到专用的Azure SQL单一数据库中,并能够扩展到最大的计算大小(例如,具有128个vCore实例的M系列)。

< ">如果您认为Dynamics团队有两名专门的工程师来管理整个平台,而这两名工程师专注于操作和改进Spartan平台,而不是管理单个的数据库,那么该平台的效率水平是令人难以置信的。

< ">[Dynamics 365与Azure SQL数据库相结合,功能更加强大!]

< ">如前所述,在此过程中,来自Dynamics和Azure团队的工程师们共同努力改进了底层平台。Dynamics团队大力倡导一些平台范围的改进(例如加速网络)以显著减少计算节点与其他Azure服务之间的网络延迟,该团队以数据为中心的数据密集型应用程序从这些改进中受益匪浅。

< ">在Azure SQL数据库中,Dynamics团队影响了vCore模型的引入,从而找到了计算内核与数据库存储之间的正确比例,现在它们可以独立扩展并优化成本和性能。

< ">为了更充分地利用Common Data Service中的关系数据库资源,该团队实施了读取扩展,该服务通过通过分担主要读写数据库副本上的部分工作负载来帮助提高性能。像大多数以数据为中心的服务一样,Common Data Service中的工作负载是读取密集型的—这意味着它获得的读取比写入要多很多。借助读取扩展,如果对Common Data Service的调用会导致选择与更新,我们可以将该请求路由到只读副本,并扩展读取工作量。

< ">在考虑各种各样的客户工作负载和规模方面,Dynamics 365应用程序一直是一个出色的陪练伙伴,它通过自动计划校正、自动索引管理和智能查询处理功能集来调整和改进自动调整等功能。

< ">想象一下,在一百万个数据库中出现查询超时情况:是因为缺少正确的索引策略吗?是查询计划回归?还是其他原因?



< ">为了在故障排除和维护事件期间帮助Dynamics工程师和支持组织,我们开发了另一个名为数据管理服务(DAMS)的微服务来计划和执行维护任务和工作,例如创建或重建索引以动态优化客户工作负载的变化。这些任务可以涵盖性能改进、事务管理、诊断数据收集和查询计划管理等领域。

图2 DAMS架构

< ">在Microsoft Research(MSR)的帮助下,Dynamics团队已将SQL Server的Database Tuning Advisor(DTA)移植到Azure SQL,并将其集成到了微服务中。DTA是一个用于评估查询并生成索引和统计建议以调整最关键数据库工作负载的查询性能的平台。

< ">与Azure SQ网络营销设计L数据库中的任何其他客户数据库一样,Dynamics 365数据库也具有默认处于启用状态的查询存储等功能。此功能提供有关查询计划选择和性能的见解,并通过帮助它们快速发现由查询计划更改引起的性能差异来简化性能故障排除。

< ">除了这些功能,Dynamics团队还创建了一个与最终用户共享的优化工具,以验证他们的自定义设置是否正确实施,检测诸如以可视化形式放置多少数据控件之类的内容,并提供符合其最佳做法的建议。

< ">他们还主动监视客户的工作负载,以了解关键的用例并检测客户可能引入的新模式,并确保平台可以有效地运行这些新模式。

< ">Dynamics团队与Azure SQL数据库工程师并肩工作,帮助改进了数据库引擎的许多方面。其中有一个与超大型查询计划缓存(超过10万个计划)相关的示例,这是复杂OLTP工作负载的常见问题,其中计划重新编译中的自旋锁争用导致较高的CPU利用率和很低的效率。此问题的解决为在同一平台上运行的数以千计的其他Azure SQL数据库客户提供了很大的帮助。

< ">他们帮助改进的其他领域还包括恒定时间恢复,使得数百万个数据库的故障转移过程的效率大大提高,以及设定管理锁定优先级以减少自动索引创建期间的阻塞。

< ">除了Azure SQL数据库提供的现成功能外,Dynamics团队还开发了针对客户不断升级的性能问题的特定故障排除工作流。例如,Dynamics支持工程师可以在有问题的客户工作负载上运行Database Tuning Advisor,并了解可以用于减轻客户问题的特定建议。

< ">链接:

< ">读取扩展

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/read-scale-out

< ">自动调整

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/automatic-tuning-overview

< ">查询存储

< ">https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15

< ">恒定时间恢复

< ">https://www.microsoft.com/en-us/research/publication/constant-time-recovery-in-azure-sql-database/

< ">故障转移过程

< ">https://docs.microsoft.com/en-us/azure/azure-sql/accelerated-database-recovery

< ">[展望未来]

< ">就某些最大型的最终客户的规模而言,Dynamics 365是将Azure SQL数据库最大实例大小从1TB增加到4TB的主要影响因素之一。也就是说,即使现在的4TB容量在扩展能力方面也是一个限制因素,因此Dynamics团队正在将Azure SQL Database Hyperscale作为其服务的下一代关系存储。团队正在研究的最关键特性是:几乎无限制的数据库大小,结合计算和存储大小之间的分隔以及利用只读副本来扩展客户工作负载的能力。

< ">链接:

< ">Azure SQL Database Hyperscale

< ">https://docs.microsoft.com/en-us/azure/azure-sql/database/service-tier-hyperscale

< ">Dynamics团队与Azure SQL团队并肩合作,在前面提到的所有具有挑战性的方案上测试和验证Azure SQL Database Hyperscale,这种协作不仅将分别在两个团队中继续取得成功,而且对在平台上运行的所有其他客户也将继续取得成功。

在 Azure SQL 上为大型 SaaS 提供一百万个数据库

上一篇:腾讯云IoT支持接入主流语音技能平台,实现语音
下一篇:新手刚开虾皮店铺要怎么做?需要注意的问题?


版权声明:以上主题为“在 Azure SQL 上为大型 SaaS 提供一百万个数据库"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    在 Azure SQL 上为大型 SaaS 提供一百万个数据库
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“在 Azure SQL 上为大型 SaaS 提供一百万个数据库”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通在 Azure SQL 上为大型 SaaS 提供一百万个数据库的相关事宜。

关键词:在,Azure,SQL,上为大型,SaaS

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号