通過(guò)Azure SQL實(shí)現(xiàn)蓬勃發(fā)展
非常感謝來(lái)自Microsoft Dynamics團(tuán)隊(duì)的同事Mahesh Sreenivas、Pranab Mazumdar、Karthick Pakirisamy Krishnamurthy、Mayank Mehta和Shovan Kar為本文所做的貢獻(xiàn)。
[概述]
Dynamics 365是一組智能的SaaS業(yè)務(wù)應(yīng)用程序,可幫助來(lái)自各個(gè)行業(yè)的各種規(guī)模的公司運(yùn)行其整個(gè)業(yè)務(wù),并通過(guò)預(yù)測(cè)性的、由AI驅(qū)動(dòng)的見(jiàn)解來(lái)提供更好的結(jié)果。Dynamics 365應(yīng)用程序構(gòu)建于Microsoft Power Platform之上,該平臺(tái)提供了可擴(kuò)展的基礎(chǔ),不僅可以運(yùn)行Dynamics應(yīng)用程序本身,還可以讓客戶、系統(tǒng)集成商和ISV創(chuàng)建針對(duì)特定行業(yè)的自定義內(nèi)容,并將其業(yè)務(wù)流程連接到利用無(wú)代碼/低代碼方法的數(shù)百個(gè)現(xiàn)有連接器的其他解決方案和系統(tǒng)。
Microsoft Power Platform(還提供Power Apps、Power Automate、Power Virtual Agents和PowerBI等服務(wù))建立在Azure SQL數(shù)據(jù)庫(kù)等Microsoft Azure服務(wù)基礎(chǔ)上,這些服務(wù)提供可擴(kuò)展且可靠的底層計(jì)算、數(shù)據(jù)、管理和安全服務(wù),為上圖中表示的整個(gè)堆棧提供支持。
[歷史背景]
Microsoft Dynamics 365的根是一套打包的業(yè)務(wù)解決方案,例如Dynamics AX、NAV和CRM,它們?cè)谌蚋鞯氐目蛻魯?shù)據(jù)中心的多個(gè)Windows Server和SQL Server版本上運(yùn)行。
當(dāng)軟件即服務(wù)范例開(kāi)始在商業(yè)應(yīng)用程序行業(yè)中占主導(dǎo)地位時(shí),Dynamics CRM使得該產(chǎn)品包成為Microsoft最早的在線服務(wù)之一。在向SaaS方式轉(zhuǎn)變的初期,Dynamics服務(wù)在Microsoft本地?cái)?shù)據(jù)中心中的裸機(jī)服務(wù)器上運(yùn)行。隨著每天數(shù)百萬(wàn)計(jì)的活動(dòng)用戶所帶來(lái)的使用增長(zhǎng),部署和運(yùn)行所有這些服務(wù)器、管理容量需求以及及時(shí)響應(yīng)不斷增長(zhǎng)的客戶數(shù)據(jù)量(對(duì)于最大規(guī)模的租戶而言,數(shù)據(jù)庫(kù)大小分布從100 MB增加到超過(guò)4 TB)所帶來(lái)的工作量最終將變得難以管理。
Dynamics是最早采用Microsoft SQL Server 2012 AlwaysOn來(lái)實(shí)現(xiàn)業(yè)務(wù)連續(xù)性平臺(tái)之一,它還通過(guò)創(chuàng)建額外副本以重新平衡利用率的方式提供了一種靈活的方法來(lái)將客戶數(shù)據(jù)庫(kù)移動(dòng)到新的群集。
大規(guī)模管理如此眾多的數(shù)據(jù)庫(kù)顯然是一項(xiàng)復(fù)雜的任務(wù),它涉及從初始資源配置到監(jiān)控、修補(bǔ)和運(yùn)行這一龐大的系統(tǒng)的整個(gè)數(shù)據(jù)庫(kù)生命周期,同時(shí)還要保證可用性。團(tuán)隊(duì)還學(xué)會(huì)了如何處理不在故障轉(zhuǎn)移-就緒狀態(tài)的仲裁丟失和副本等問(wèn)題。從性能的角度來(lái)看,在共享基礎(chǔ)節(jié)點(diǎn)上運(yùn)行的數(shù)據(jù)庫(kù)實(shí)例使得我們很難隔離性能問(wèn)題,并且除了將單個(gè)實(shí)例移至新節(jié)點(diǎn)之外,它提供的擴(kuò)展或適應(yīng)突發(fā)工作負(fù)載的選項(xiàng)也很有限。
由于最終客戶可以在其環(huán)境中運(yùn)行(高度定制的)應(yīng)用程序的多個(gè)版本,導(dǎo)致產(chǎn)生明顯不同的工作負(fù)載,因此,聽(tīng)到通用數(shù)據(jù)服務(wù)團(tuán)隊(duì)的合作伙伴組工程經(jīng)理Mahesh Sreenivas說(shuō)在傳統(tǒng)平臺(tái)上管理和維護(hù)所有這些組件“對(duì)工程師和最終客戶都非常痛苦”也就不足為奇了。
轉(zhuǎn)向Azure和Azure SQL數(shù)據(jù)庫(kù)
Dynamics 365團(tuán)隊(duì)決定將其平臺(tái)遷移到Microsoft Azure,以解決這些管理和運(yùn)營(yíng)難題,同時(shí)滿足客戶需求并確保平臺(tái)基礎(chǔ)性能(如可用性和可靠性),并讓工程團(tuán)隊(duì)專注于添加創(chuàng)新功能。
從最初的設(shè)計(jì)到生產(chǎn)的工程工作花好幾年的時(shí)間,其中包括將客戶遷移到新的基于Azure的平臺(tái),從在本地運(yùn)行的整體代碼庫(kù)遷移到在Azure上運(yùn)行的世界一流的行星級(jí)大規(guī)模服務(wù)。
[Azure SQL數(shù)據(jù)庫(kù)中的常用數(shù)據(jù)服務(wù)]
第一個(gè)關(guān)鍵決定是從一組異構(gòu)應(yīng)用程序(每個(gè)應(yīng)用程序都有自己的歷史和技術(shù)特點(diǎn))轉(zhuǎn)移到一個(gè)通用的基礎(chǔ)平臺(tái),在該平臺(tái)上,Dynamics應(yīng)用程序成為常規(guī)應(yīng)用程序,就像其他ISV公司可以構(gòu)建和運(yùn)行的應(yīng)用程序一樣:因此引入了Microsoft Power Platform及其公共數(shù)據(jù)服務(wù)層。本質(zhì)上,基于基礎(chǔ)Azure功能(如計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)和Azure SQL數(shù)據(jù)庫(kù)等其他專門服務(wù))構(gòu)建的新的無(wú)代碼或低代碼平臺(tái)是一種從基礎(chǔ)平臺(tái)提取Dynamics應(yīng)用程序的方法,讓Dynamics開(kāi)發(fā)人員可以專注于向平臺(tái)轉(zhuǎn)移而無(wú)需管理數(shù)據(jù)庫(kù)實(shí)例等單個(gè)資源。
現(xiàn)在,該平臺(tái)還托管著PowerApps、Power Automate、Power Virtual Agents或PowerBI等其他服務(wù),其他公司可以基于該平臺(tái)構(gòu)建自己的SaaS應(yīng)用程序,從無(wú)代碼的簡(jiǎn)單解決方案到全代碼專用ISV應(yīng)用程序都可以,且無(wú)需擔(dān)心如何管理計(jì)算和各種存儲(chǔ)設(shè)施等基礎(chǔ)資源。
通過(guò)將一個(gè)大約可管理100萬(wàn)個(gè)數(shù)據(jù)庫(kù)實(shí)例的平臺(tái)遷移到Azure(截至2020年7月),Dynamics團(tuán)隊(duì)學(xué)習(xí)了很多有關(guān)基礎(chǔ)服務(wù)工作原理的知識(shí),還互惠互利地向其他Microsoft團(tuán)隊(duì)提供了大量反饋,以使其服務(wù)更好。
從架構(gòu)的角度來(lái)看,通用數(shù)據(jù)服務(wù)以邏輯戳(或規(guī)模組)進(jìn)行組織,邏輯戳具有計(jì)算和數(shù)據(jù)兩層,其中關(guān)系數(shù)據(jù)存儲(chǔ)基于Azure SQL數(shù)據(jù)庫(kù)構(gòu)建,因?yàn)閳F(tuán)隊(duì)以前對(duì)SQL Server 2012和2016很熟悉。它提供了具有3(或更多)個(gè)9的SLA的經(jīng)過(guò)預(yù)先配置的現(xiàn)成高可用性,具體取決于選擇的服務(wù)層。業(yè)務(wù)連續(xù)性也通過(guò)Geo-restore、Active Geo-replication和Auto Failover Groups等功能得到了保證。
與在共享的單個(gè)SQL Server實(shí)例本地運(yùn)行多個(gè)數(shù)據(jù)庫(kù)相比,Azure SQL數(shù)據(jù)庫(kù)通過(guò)減少表、索引或備份級(jí)別的數(shù)據(jù)庫(kù)損壞事件而為團(tuán)隊(duì)提供了很大的幫助。同樣,在物理計(jì)算機(jī)上的固件、操作系統(tǒng)和SQL Server上打補(bǔ)丁所需的若干工時(shí)已減少到僅需管理應(yīng)用程序?qū)蛹捌鋽?shù)據(jù)。
鏈接:
過(guò)預(yù)先配置的現(xiàn)成高可用性
https://docs.microsoft.com/en-us/azure/azure-sql/database/high-availability-sla
業(yè)務(wù)連續(xù)性
https://docs.microsoft.com/en-us/azure/azure-sql/database/business-continuity-high-availability-disaster-recover-hadr-overview
[Azure SQL數(shù)據(jù)庫(kù)彈性池]
登錄Azure SQL數(shù)據(jù)庫(kù)后,第二個(gè)關(guān)鍵決策是采用彈性池來(lái)托管其數(shù)據(jù)庫(kù)。Azure SQL數(shù)據(jù)庫(kù)彈性池是一款簡(jiǎn)單且經(jīng)濟(jì)高效的解決方案,可以管理和擴(kuò)展多個(gè)具有不斷變化且無(wú)法預(yù)測(cè)的使用需求的數(shù)據(jù)庫(kù)。彈性池中的數(shù)據(jù)庫(kù)位于單個(gè)邏輯服務(wù)器上,并以固定價(jià)格共享給定數(shù)量的資源。SaaS應(yīng)用程序開(kāi)發(fā)人員可以在擬定的資源預(yù)算內(nèi)優(yōu)化數(shù)百個(gè)數(shù)據(jù)庫(kù)的性價(jià)比,同時(shí)為每個(gè)數(shù)據(jù)庫(kù)提供性能彈性并通過(guò)為每個(gè)租戶設(shè)置最小-最大利用率閾值來(lái)控制多租戶。同時(shí),它們通過(guò)為每個(gè)數(shù)據(jù)庫(kù)提供單獨(dú)的訪問(wèn)控制策略來(lái)加強(qiáng)安全性和隔離。“通過(guò)遷移到Azure SQL數(shù)據(jù)庫(kù)彈性池,我們的團(tuán)隊(duì)不需要在管理復(fù)制這方面進(jìn)行過(guò)多投資,因?yàn)樗葾zure SQL數(shù)據(jù)庫(kù)服務(wù)負(fù)責(zé)處理”,Mahesh解釋說(shuō)。
Microsoft Power Platform為使用其產(chǎn)品組合中給定服務(wù)的每個(gè)租戶使用一個(gè)單獨(dú)的帳戶。
鏈接:
Azure SQL數(shù)據(jù)庫(kù)彈性池
https://docs.microsoft.com/en-us/azure/azure-sql/database/elastic-pool-overview
[“Spartan”資源管理層]
考慮到廣泛的客戶行業(yè)、規(guī)模和(定制的)工作負(fù)載,關(guān)鍵要求之一是能夠在一組彈性池中高效地分配和管理這些數(shù)據(jù)庫(kù),從而最大程度地利用和管理資源。要實(shí)現(xiàn)此目的,必須滿足以下三點(diǎn):
1.規(guī)模和容量規(guī)劃方面的靈活性
2.為單個(gè)租戶擴(kuò)展資源的敏捷性
3.優(yōu)化的性價(jià)比
在Azure SQL數(shù)據(jù)庫(kù)平臺(tái)為全面管理這些方面提供了基礎(chǔ)(例如,在線服務(wù)層擴(kuò)展、在池之間移動(dòng)數(shù)據(jù)庫(kù)的能力、從單個(gè)數(shù)據(jù)庫(kù)移至池的能力或反之、多種性價(jià)比選擇等)的同時(shí),Dynamics團(tuán)隊(duì)還創(chuàng)建了一個(gè)專用管理層,以根據(jù)應(yīng)用程序定義的條件和策略自動(dòng)執(zhí)行這些操作?!癝partan”就是這個(gè)管理層,其設(shè)計(jì)目的就是為了最大程度地減少手動(dòng)操作。它具有可擴(kuò)展的微服務(wù)平臺(tái)(以ARM資源提供程序方式實(shí)現(xiàn)),后者負(fù)責(zé)其數(shù)據(jù)庫(kù)的整哥生命周期。
鏈接:
ARM資源提供程序
https://docs.microsoft.com/en-us/azure/azure-resource-manager/custom-providers/overview
Spartan是一個(gè)API層,不僅負(fù)責(zé)數(shù)據(jù)庫(kù)CRUD操作(創(chuàng)建、讀取、更新和刪除),還負(fù)責(zé)所有其他操作,例如在彈性池之間移動(dòng)數(shù)據(jù)庫(kù)以最大程度地利用資源,在池和邏輯服務(wù)器之間實(shí)現(xiàn)客戶工作負(fù)載的平衡,管理備份保留以及將數(shù)據(jù)庫(kù)還原到先前的時(shí)間點(diǎn)。平臺(tái)還自動(dòng)管理分配給數(shù)據(jù)庫(kù)和池的底層存儲(chǔ),以避免效率低下并最大化密度。在生產(chǎn)中收縮數(shù)據(jù)庫(kù)這樣的操作似乎很少見(jiàn),但對(duì)于需要操作超過(guò)100萬(wàn)個(gè)數(shù)據(jù)庫(kù)并優(yōu)化成本的平臺(tái)而言,卻是一項(xiàng)很常見(jiàn)的任務(wù)。
彈性池按“層”進(jìn)行組織,其中每個(gè)層根據(jù)所使用的基礎(chǔ)服務(wù)層(通用、關(guān)鍵業(yè)務(wù))和分配的計(jì)算大小提供不同的配置,以便最終客戶數(shù)據(jù)庫(kù)始終以最佳性價(jià)比運(yùn)行。除防火墻設(shè)置等其他詳細(xì)信息外,每個(gè)層還控制關(guān)聯(lián)數(shù)據(jù)庫(kù)的最小-最大設(shè)置,并定義每個(gè)池的最佳數(shù)據(jù)庫(kù)密度。
圖1每個(gè)縮放組的Azure SQL數(shù)據(jù)庫(kù)布局
上圖將彈性池這種邏輯組織表示為多個(gè)層,并顯示了Dynamics團(tuán)隊(duì)用來(lái)在粒度資源分配和成本優(yōu)化之間找到最佳折衷的DTU和vCore購(gòu)買模型的組合。
對(duì)于非常大的客戶,該平臺(tái)還可以將這些數(shù)據(jù)庫(kù)從共享池移到專用的Azure SQL單一數(shù)據(jù)庫(kù)中,并能夠擴(kuò)展到最大的計(jì)算大?。ɡ?,具有128個(gè)vCore實(shí)例的M系列)。
如果您認(rèn)為Dynamics團(tuán)隊(duì)有兩名專門的工程師來(lái)管理整個(gè)平臺(tái),而這兩名工程師專注于操作和改進(jìn)Spartan平臺(tái),而不是管理單個(gè)的數(shù)據(jù)庫(kù),那么該平臺(tái)的效率水平是令人難以置信的。
[Dynamics 365與Azure SQL數(shù)據(jù)庫(kù)相結(jié)合,功能更加強(qiáng)大!]
如前所述,在此過(guò)程中,來(lái)自Dynamics和Azure團(tuán)隊(duì)的工程師們共同努力改進(jìn)了底層平臺(tái)。Dynamics團(tuán)隊(duì)大力倡導(dǎo)一些平臺(tái)范圍的改進(jìn)(例如加速網(wǎng)絡(luò))以顯著減少計(jì)算節(jié)點(diǎn)與其他Azure服務(wù)之間的網(wǎng)絡(luò)延遲,該團(tuán)隊(duì)以數(shù)據(jù)為中心的數(shù)據(jù)密集型應(yīng)用程序從這些改進(jìn)中受益匪淺。
在Azure SQL數(shù)據(jù)庫(kù)中,Dynamics團(tuán)隊(duì)影響了vCore模型的引入,從而找到了計(jì)算內(nèi)核與數(shù)據(jù)庫(kù)存儲(chǔ)之間的正確比例,現(xiàn)在它們可以獨(dú)立擴(kuò)展并優(yōu)化成本和性能。
為了更充分地利用Common Data Service中的關(guān)系數(shù)據(jù)庫(kù)資源,該團(tuán)隊(duì)實(shí)施了讀取擴(kuò)展,該服務(wù)通過(guò)通過(guò)分擔(dān)主要讀寫(xiě)數(shù)據(jù)庫(kù)副本上的部分工作負(fù)載來(lái)幫助提高性能。像大多數(shù)以數(shù)據(jù)為中心的服務(wù)一樣,Common Data Service中的工作負(fù)載是讀取密集型的—這意味著它獲得的讀取比寫(xiě)入要多很多。借助讀取擴(kuò)展,如果對(duì)Common Data Service的調(diào)用會(huì)導(dǎo)致選擇與更新,我們可以將該請(qǐng)求路由到只讀副本,并擴(kuò)展讀取工作量。
在考慮各種各樣的客戶工作負(fù)載和規(guī)模方面,Dynamics 365應(yīng)用程序一直是一個(gè)出色的陪練伙伴,它通過(guò)自動(dòng)計(jì)劃校正、自動(dòng)索引管理和智能查詢處理功能集來(lái)調(diào)整和改進(jìn)自動(dòng)調(diào)整等功能。
想象一下,在一百萬(wàn)個(gè)數(shù)據(jù)庫(kù)中出現(xiàn)查詢超時(shí)情況:是因?yàn)槿鄙僬_的索引策略嗎?是查詢計(jì)劃回歸?還是其他原因?
為了在故障排除和維護(hù)事件期間幫助Dynamics工程師和支持組織,我們開(kāi)發(fā)了另一個(gè)名為數(shù)據(jù)管理服務(wù)(DAMS)的微服務(wù)來(lái)計(jì)劃和執(zhí)行維護(hù)任務(wù)和工作,例如創(chuàng)建或重建索引以動(dòng)態(tài)優(yōu)化客戶工作負(fù)載的變化。這些任務(wù)可以涵蓋性能改進(jìn)、事務(wù)管理、診斷數(shù)據(jù)收集和查詢計(jì)劃管理等領(lǐng)域。
圖2 DAMS架構(gòu)
在Microsoft Research(MSR)的幫助下,Dynamics團(tuán)隊(duì)已將SQL Server的Database Tuning Advisor(DTA)移植到Azure SQL,并將其集成到了微服務(wù)中。DTA是一個(gè)用于評(píng)估查詢并生成索引和統(tǒng)計(jì)建議以調(diào)整最關(guān)鍵數(shù)據(jù)庫(kù)工作負(fù)載的查詢性能的平臺(tái)。
與Azure SQL數(shù)據(jù)庫(kù)中的任何其他客戶數(shù)據(jù)庫(kù)一樣,Dynamics 365數(shù)據(jù)庫(kù)也具有默認(rèn)處于啟用狀態(tài)的查詢存儲(chǔ)等功能。此功能提供有關(guān)查詢計(jì)劃選擇和性能的見(jiàn)解,并通過(guò)幫助它們快速發(fā)現(xiàn)由查詢計(jì)劃更改引起的性能差異來(lái)簡(jiǎn)化性能故障排除。
除了這些功能,Dynamics團(tuán)隊(duì)還創(chuàng)建了一個(gè)與最終用戶共享的優(yōu)化工具,以驗(yàn)證他們的自定義設(shè)置是否正確實(shí)施,檢測(cè)諸如以可視化形式放置多少數(shù)據(jù)控件之類的內(nèi)容,并提供符合其最佳做法的建議。
他們還主動(dòng)監(jiān)視客戶的工作負(fù)載,以了解關(guān)鍵的用例并檢測(cè)客戶可能引入的新模式,并確保平臺(tái)可以有效地運(yùn)行這些新模式。
Dynamics團(tuán)隊(duì)與Azure SQL數(shù)據(jù)庫(kù)工程師并肩工作,幫助改進(jìn)了數(shù)據(jù)庫(kù)引擎的許多方面。其中有一個(gè)與超大型查詢計(jì)劃緩存(超過(guò)10萬(wàn)個(gè)計(jì)劃)相關(guān)的示例,這是復(fù)雜OLTP工作負(fù)載的常見(jiàn)問(wèn)題,其中計(jì)劃重新編譯中的自旋鎖爭(zhēng)用導(dǎo)致較高的CPU利用率和很低的效率。此問(wèn)題的解決為在同一平臺(tái)上運(yùn)行的數(shù)以千計(jì)的其他Azure SQL數(shù)據(jù)庫(kù)客戶提供了很大的幫助。
他們幫助改進(jìn)的其他領(lǐng)域還包括恒定時(shí)間恢復(fù),使得數(shù)百萬(wàn)個(gè)數(shù)據(jù)庫(kù)的故障轉(zhuǎn)移過(guò)程的效率大大提高,以及設(shè)定管理鎖定優(yōu)先級(jí)以減少自動(dòng)索引創(chuàng)建期間的阻塞。
除了Azure SQL數(shù)據(jù)庫(kù)提供的現(xiàn)成功能外,Dynamics團(tuán)隊(duì)還開(kāi)發(fā)了針對(duì)客戶不斷升級(jí)的性能問(wèn)題的特定故障排除工作流。例如,Dynamics支持工程師可以在有問(wèn)題的客戶工作負(fù)載上運(yùn)行Database Tuning Advisor,并了解可以用于減輕客戶問(wèn)題的特定建議。
鏈接:
讀取擴(kuò)展
https://docs.microsoft.com/en-us/azure/azure-sql/database/read-scale-out
自動(dòng)調(diào)整
https://docs.microsoft.com/en-us/azure/azure-sql/database/automatic-tuning-overview
查詢存儲(chǔ)
https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15
恒定時(shí)間恢復(fù)
https://www.microsoft.com/en-us/research/publication/constant-time-recovery-in-azure-sql-database/
故障轉(zhuǎn)移過(guò)程
https://docs.microsoft.com/en-us/azure/azure-sql/accelerated-database-recovery
[展望未來(lái)]
就某些最大型的最終客戶的規(guī)模而言,Dynamics 365是將Azure SQL數(shù)據(jù)庫(kù)最大實(shí)例大小從1TB增加到4TB的主要影響因素之一。也就是說(shuō),即使現(xiàn)在的4TB容量在擴(kuò)展能力方面也是一個(gè)限制因素,因此Dynamics團(tuán)隊(duì)正在將Azure SQL Database Hyperscale作為其服務(wù)的下一代關(guān)系存儲(chǔ)。團(tuán)隊(duì)正在研究的最關(guān)鍵特性是:幾乎無(wú)限制的數(shù)據(jù)庫(kù)大小,結(jié)合計(jì)算和存儲(chǔ)大小之間的分隔以及利用只讀副本來(lái)擴(kuò)展客戶工作負(fù)載的能力。
鏈接:
Azure SQL Database Hyperscale
https://docs.microsoft.com/en-us/azure/azure-sql/database/service-tier-hyperscale
Dynamics團(tuán)隊(duì)與Azure SQL團(tuán)隊(duì)并肩合作,在前面提到的所有具有挑戰(zhàn)性的方案上測(cè)試和驗(yàn)證Azure SQL Database Hyperscale,這種協(xié)作不僅將分別在兩個(gè)團(tuán)隊(duì)中繼續(xù)取得成功,而且對(duì)在平臺(tái)上運(yùn)行的所有其他客戶也將繼續(xù)取得成功。