導(dǎo)語(yǔ)|雖然數(shù)據(jù)庫(kù)上云解決了傳統(tǒng)數(shù)據(jù)庫(kù)很多問(wèn)題,但如何讓云數(shù)據(jù)庫(kù)發(fā)揮最優(yōu)的效能,依然充滿極大挑戰(zhàn)。為解決這一難題,高速發(fā)展的云數(shù)據(jù)庫(kù)正在走向“自治”。本文是對(duì)騰訊云數(shù)據(jù)庫(kù)高級(jí)產(chǎn)品經(jīng)理劉迪在云+社區(qū)沙龍online的分享整理,為大家?guī)?lái)騰訊云在數(shù)據(jù)庫(kù)自治服務(wù)領(lǐng)域的探索和實(shí)踐,希望與大家一同交流。
一、數(shù)據(jù)庫(kù)自治的演進(jìn)
上圖所示是一張關(guān)于數(shù)據(jù)庫(kù)自治的宏觀視圖。
業(yè)內(nèi)普遍定義的石器時(shí)代大概是在十幾、二十年前,剛剛進(jìn)入數(shù)據(jù)庫(kù)發(fā)展的快速軌道,當(dāng)時(shí)的技術(shù)方案和對(duì)于數(shù)據(jù)庫(kù)的認(rèn)知都處于一個(gè)初級(jí)的階段。
經(jīng)歷了后續(xù)的工具時(shí)代、專家時(shí)代,現(xiàn)在數(shù)據(jù)庫(kù)自治已經(jīng)到達(dá)了智能時(shí)代。在智能時(shí)代中,我們享受到了數(shù)據(jù)庫(kù)自治在數(shù)據(jù)庫(kù)性能優(yōu)化、管理、服務(wù)等紅利。
很多人都有疑惑,這條時(shí)代發(fā)展的時(shí)間線到底是怎么演進(jìn)的?其實(shí)這個(gè)問(wèn)題不難理解,大家在日常工作中也能體會(huì)到,時(shí)代的更替、技術(shù)的誕生,往往跟業(yè)務(wù)的需求有關(guān),也跟現(xiàn)有的技術(shù)能力有關(guān)。
無(wú)論是業(yè)務(wù)驅(qū)動(dòng)還是技術(shù)驅(qū)動(dòng),最終的結(jié)果就是使得數(shù)據(jù)庫(kù)自治從石器時(shí)代到工具時(shí)代、專家時(shí)代、智能時(shí)代,這樣一個(gè)井然有序的發(fā)展過(guò)程。
我們所謂的石器時(shí)代、工具時(shí)代、專家時(shí)代、智能時(shí)代其實(shí)不僅僅是指代時(shí)間的迭代,更多的是指技術(shù)的發(fā)展和趨勢(shì)的迭代。所以有些公司現(xiàn)在可能依然處于石器時(shí)代,有些公司可能很早就進(jìn)入了專家或者智能時(shí)代。
1.石器時(shí)代
首先我們來(lái)看石器時(shí)代解決了什么樣的問(wèn)題?石器時(shí)代數(shù)據(jù)庫(kù)運(yùn)維和服務(wù)領(lǐng)域關(guān)注的問(wèn)題是什么?
最明顯的一個(gè)特征,石器時(shí)代關(guān)注的問(wèn)題就是“沒(méi)有問(wèn)題”,也就是保證業(yè)務(wù)不出問(wèn)題,沒(méi)有問(wèn)題就是最大的成功。
因?yàn)樵谑鲿r(shí)代,運(yùn)維依靠的主要是純手工的人力,靠數(shù)據(jù)庫(kù)運(yùn)維工程師沒(méi)日沒(méi)夜進(jìn)行手工的運(yùn)維操作。
在這個(gè)階段,往往是有經(jīng)驗(yàn)的DBA帶一些剛剛?cè)腴T(mén)或者剛剛畢業(yè)的同學(xué),傳幫接代的進(jìn)行知識(shí)傳遞。這樣造成的結(jié)果就是整個(gè)團(tuán)隊(duì)的資質(zhì)水平參差不齊,但整個(gè)團(tuán)隊(duì)還是可以承擔(dān)起公司業(yè)務(wù)線數(shù)據(jù)庫(kù)運(yùn)維的重任。
石器時(shí)代最大的目標(biāo)、最大的收益,就是知識(shí)的積累,但積累的大部分是碎片化、零星化的知識(shí)。
2.工具時(shí)代
在工具時(shí)代,關(guān)注的焦點(diǎn)從“不出問(wèn)題”,轉(zhuǎn)變?yōu)椤霸诓怀鰡?wèn)題的前提下如何提高效率”。工具時(shí)代不再是原來(lái)的手工錄入代碼、手工處理問(wèn)題,而是開(kāi)始把經(jīng)驗(yàn)、知識(shí)沉淀成腳本或者工具。
目前大部分公司的數(shù)據(jù)庫(kù)運(yùn)維有可能是專人專崗,也可能是由研發(fā)同學(xué)兼職,他們會(huì)用自己寫(xiě)的工具或者網(wǎng)上開(kāi)源的工具進(jìn)行運(yùn)維工作。這個(gè)工具可能是一個(gè)很簡(jiǎn)單的腳本,也可能是非常復(fù)雜的命令集合,這是數(shù)據(jù)庫(kù)運(yùn)維中一個(gè)必不可少的過(guò)程。
在這個(gè)時(shí)代中,大家關(guān)注的焦點(diǎn)是怎樣用工具去很好的滿足業(yè)務(wù)的需求。
除了人和工具之外,能幫助大家提高效率的還有流程管理。在工具時(shí)代,看重的一點(diǎn)是流程管理如何把人和工具結(jié)合在一起,提高數(shù)據(jù)庫(kù)運(yùn)維的效率。
在這個(gè)階段會(huì)出現(xiàn)大量審核的系統(tǒng)、流程和服務(wù),每個(gè)審核都有著非常規(guī)范的流程來(lái)進(jìn)行數(shù)據(jù)庫(kù)的運(yùn)維。
3.專家時(shí)代
當(dāng)工具時(shí)代的積累達(dá)到了一定的程度,就到達(dá)了專家時(shí)代。
在這個(gè)時(shí)期,大家發(fā)現(xiàn)之前的腳本雖然很多但很雜亂,用了各種各樣的編程語(yǔ)言、運(yùn)行在各種不同的環(huán)境中,沒(méi)有統(tǒng)一的管理平臺(tái),也沒(méi)有統(tǒng)一的歸類整理。數(shù)據(jù)庫(kù)運(yùn)維的水平往往取決于寫(xiě)這個(gè)腳本的運(yùn)維工程師的個(gè)人能力,很難很好繼承下去。
所以專家時(shí)代更多的是想把腳本標(biāo)準(zhǔn)化,用服務(wù)平臺(tái)代替雜亂無(wú)章的腳本,從而將腳本規(guī)范化、標(biāo)準(zhǔn)化,變成一個(gè)可以實(shí)現(xiàn)自動(dòng)化運(yùn)維的平臺(tái)。
通過(guò)這個(gè)平臺(tái),無(wú)論是有資歷的工程師還是剛剛?cè)腴T(mén)的研發(fā)同學(xué),都可以井然有序的根據(jù)平臺(tái)化的服務(wù)進(jìn)行數(shù)據(jù)庫(kù)管理。
把專家的經(jīng)驗(yàn)轉(zhuǎn)變?yōu)榭蓮?fù)制的能力工具,是專家時(shí)代運(yùn)維最顯著的特點(diǎn)。
4.云數(shù)據(jù)庫(kù)時(shí)代
隨著近幾年云數(shù)據(jù)庫(kù)時(shí)代的到來(lái),很多企業(yè)從自建DB遷移到了云上,也開(kāi)始認(rèn)知到云帶給大家的好處。
數(shù)據(jù)庫(kù)從本地部署到云上,可以自建云服務(wù)器,也可以直接使用云上提供的PaaS服務(wù)。這部分無(wú)論是關(guān)系型數(shù)據(jù)庫(kù)還是非關(guān)系型數(shù)據(jù)庫(kù)或者是NewSQL,大家都開(kāi)始逐漸享受到云數(shù)據(jù)庫(kù)時(shí)代的紅利。
在數(shù)據(jù)庫(kù)上云后,很多人會(huì)問(wèn)云廠商提供的服務(wù)是不是可以保證數(shù)據(jù)庫(kù)的運(yùn)維沒(méi)有任何的問(wèn)題了?就不再需要去思考、不需要擁有之前一代代繼承下來(lái)的經(jīng)驗(yàn)?
其實(shí)并不是這樣。數(shù)據(jù)庫(kù)上云解決的只是基礎(chǔ)的管控服務(wù),比如備份、監(jiān)控、故障切換等等,云上提供的是相應(yīng)的PaaS能力、高可用能力和數(shù)據(jù)可靠性的能力。
但其實(shí)云服務(wù)的到來(lái),對(duì)數(shù)據(jù)庫(kù)的運(yùn)維服務(wù)反而提出了更多的挑戰(zhàn)。這里我們可以舉幾個(gè)例子。
首先是資源的評(píng)估,這是在上云、多云的使用中會(huì)經(jīng)常遇到的問(wèn)題。本地使用的是4核16G的物理機(jī),那么在云上要購(gòu)買(mǎi)哪種型號(hào)的服務(wù)器?購(gòu)買(mǎi)哪種規(guī)格的PaaS數(shù)據(jù)庫(kù)服務(wù)?絕大多數(shù)沒(méi)有經(jīng)歷過(guò)云遷移的同學(xué)在這個(gè)階段會(huì)認(rèn)為最好的方法是平移,這樣一定不會(huì)出現(xiàn)問(wèn)題。其實(shí)不然,在某些環(huán)節(jié)出現(xiàn)的問(wèn)題有可能會(huì)導(dǎo)致業(yè)務(wù)性能出現(xiàn)故障。
其次在上云之后,大家會(huì)認(rèn)為云的彈性伸縮促使了業(yè)務(wù)的快速發(fā)展。近兩年來(lái)很多的電商業(yè)務(wù)量、訪問(wèn)流量都呈幾何倍數(shù)增長(zhǎng),各種各樣的大促節(jié)日讓業(yè)務(wù)部門(mén)、數(shù)據(jù)庫(kù)運(yùn)維部門(mén)面臨更重的數(shù)據(jù)庫(kù)保障任務(wù)。這時(shí)要如何保障資源評(píng)估的準(zhǔn)確率,以及快速處理突發(fā)事件就成了要解決的問(wèn)題。
同樣對(duì)于云上的數(shù)據(jù)庫(kù),最大的變化就是上云之后變成了黑盒。這種黑盒現(xiàn)象使得在故障診斷、分析和恢復(fù)數(shù)據(jù)庫(kù)問(wèn)題時(shí)不能快速的定位問(wèn)題、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題。
所以云上數(shù)據(jù)庫(kù)時(shí)代到來(lái)以后,對(duì)數(shù)據(jù)庫(kù)運(yùn)維同學(xué)其實(shí)是提出了更高的要求。對(duì)于非專業(yè)的運(yùn)維同學(xué),如何通過(guò)云上成千上百的異常指標(biāo)來(lái)發(fā)現(xiàn)問(wèn)題、找出規(guī)律,是面臨的一個(gè)大問(wèn)題。
最后,云時(shí)代還對(duì)性能提出了新的考驗(yàn)。如何利用經(jīng)驗(yàn)幫助提高數(shù)據(jù)庫(kù)的性能,并且持續(xù)不斷的進(jìn)行優(yōu)化?隨著數(shù)據(jù)量的積累和業(yè)務(wù)的增長(zhǎng),甚至一些數(shù)據(jù)的變化導(dǎo)致的數(shù)據(jù)分布不均衡,都會(huì)導(dǎo)致數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題,所以數(shù)據(jù)庫(kù)性能的優(yōu)化在云上有著更大的挑戰(zhàn)。
5.智能時(shí)代
正因?yàn)樯厦嬷v到的原因,促使運(yùn)維從原來(lái)平臺(tái)化運(yùn)維,不得不推進(jìn)進(jìn)入智能時(shí)代的發(fā)展。智能時(shí)代大家不再是人和工具的結(jié)合,而是人、云資源、以及自治服務(wù)的結(jié)合,從而提供更好的數(shù)據(jù)庫(kù)運(yùn)維服務(wù)能力。
這個(gè)階段的目標(biāo)是數(shù)據(jù)庫(kù)能力和專家經(jīng)驗(yàn)的共享,能夠把之前已經(jīng)積累好、沉淀好的數(shù)據(jù)庫(kù)處理經(jīng)驗(yàn)自動(dòng)化,能夠讓數(shù)據(jù)庫(kù)自己處理一些簡(jiǎn)單的問(wèn)題,不需要人工干預(yù)。面對(duì)復(fù)雜問(wèn)題的時(shí)候能夠提供非常充足的建議,通過(guò)專家的干預(yù)進(jìn)行最后的處理。
在云時(shí)代也要通過(guò)自治服務(wù)幫助大家獲取數(shù)據(jù)庫(kù)目前存在的看不見(jiàn)、摸不到的隱患。比如查詢操作,當(dāng)一個(gè)表只有十行數(shù)據(jù)的時(shí)候,無(wú)論怎樣查詢返回速度都會(huì)非???、CPU消耗也會(huì)非常小,但一旦并發(fā)上來(lái),比如數(shù)據(jù)量增長(zhǎng)到十萬(wàn)、百萬(wàn)量級(jí)的時(shí)候,原來(lái)看起來(lái)非常快的SQL就都變慢了。
在故障沒(méi)有發(fā)生前,如何通過(guò)自治服務(wù)幫助用戶在隱患階段就能解決數(shù)據(jù)庫(kù)的潛在問(wèn)題,這就是數(shù)據(jù)庫(kù)智能時(shí)代主要關(guān)注的焦點(diǎn)。
類比自動(dòng)駕駛的等級(jí),我們把數(shù)據(jù)庫(kù)自治運(yùn)維也切分成Level 0~Level 4這幾個(gè)階段。
最開(kāi)始所有操作都需要人工部署、人工干預(yù),而后期人只是作為輔助,一些簡(jiǎn)單的工作、沒(méi)有成長(zhǎng)、重復(fù)的勞動(dòng)都可以交給數(shù)據(jù)庫(kù)自治服務(wù)統(tǒng)一完成。
經(jīng)常有人會(huì)問(wèn),數(shù)據(jù)庫(kù)自治服務(wù)是否會(huì)取代人工?取代數(shù)據(jù)庫(kù)運(yùn)維?取代DBA?我可以很明確的告訴大家,數(shù)據(jù)庫(kù)自治目的是為了提高處理問(wèn)題的效率、提高業(yè)務(wù)的穩(wěn)定性、降低業(yè)務(wù)的故障導(dǎo)致的損失,而并不是為了取代DBA。
DBA在數(shù)據(jù)庫(kù)各個(gè)發(fā)展時(shí)代的核心價(jià)值,從會(huì)寫(xiě)自動(dòng)命令到會(huì)編寫(xiě)腳本,處理線上的故障、會(huì)排查日志,再到會(huì)做一些監(jiān)控和管控平臺(tái)。到了數(shù)據(jù)庫(kù)自治時(shí)代,數(shù)據(jù)庫(kù)運(yùn)維核心價(jià)值應(yīng)該是能夠貼近業(yè)務(wù),在業(yè)務(wù)層面發(fā)揮更多的價(jià)值。能夠通過(guò)積累、通過(guò)對(duì)業(yè)務(wù)的理解和數(shù)據(jù)庫(kù)的理解,幫助業(yè)務(wù)在架構(gòu)設(shè)計(jì)、附表設(shè)計(jì)、整體的業(yè)務(wù)架構(gòu)上面做更多的工作。
所以數(shù)據(jù)庫(kù)自治服務(wù)是放大了數(shù)據(jù)庫(kù)運(yùn)維的核心價(jià)值,而不是取代了數(shù)據(jù)庫(kù)運(yùn)維。
二、騰訊在數(shù)據(jù)庫(kù)自治中的探索與實(shí)踐
騰訊在數(shù)據(jù)庫(kù)自治中的探索跟整個(gè)行業(yè)的歷史發(fā)展一樣,同樣是從簡(jiǎn)單的運(yùn)維系統(tǒng)雛形,到后面隨著業(yè)務(wù)體量越來(lái)越大,包括微信、騰訊視頻、紅包業(yè)務(wù)、騰訊游戲產(chǎn)業(yè)、騰訊體育這些大業(yè)務(wù)不斷的擴(kuò)張,使得人工操作遇到了瓶頸,成本也到了需要轉(zhuǎn)型的階段,因此數(shù)據(jù)庫(kù)自治平臺(tái)從內(nèi)部開(kāi)始逐漸孵化。
因?yàn)轵v訊自身業(yè)務(wù)的行業(yè)屬性非常多,有內(nèi)容線的行業(yè)屬性,有社交類的、有文體類的等等,根據(jù)不同的使用場(chǎng)景不斷打磨后,去年開(kāi)始對(duì)外發(fā)布——數(shù)據(jù)庫(kù)智能管家DBbrain,這是騰訊對(duì)外發(fā)布的一款強(qiáng)大的數(shù)據(jù)庫(kù)自治產(chǎn)品。
1.DBbrain產(chǎn)品能力解讀
DBbrain服務(wù)在云上是免費(fèi)的,大家可以進(jìn)行免費(fèi)的試用。DBbrain提供的自治服務(wù)涵蓋三個(gè)方面:
性能優(yōu)化:利用機(jī)器學(xué)習(xí)、大數(shù)據(jù)手段快速?gòu)?fù)制資深數(shù)據(jù)庫(kù)管理員的成熟經(jīng)驗(yàn),將大量數(shù)據(jù)庫(kù)問(wèn)題的診斷優(yōu)化工作自動(dòng)化,服務(wù)于云上和云下企業(yè)。
安全防護(hù):提供從用戶行為安全、SQL安全到數(shù)據(jù)存儲(chǔ)加密安全等多項(xiàng)數(shù)據(jù)安全服務(wù),公安部認(rèn)證的等保合規(guī)性安全產(chǎn)品。
數(shù)據(jù)庫(kù)管理:提供免安裝、免運(yùn)維、即開(kāi)即用、多種數(shù)據(jù)庫(kù)類型與多種環(huán)境統(tǒng)一的web數(shù)據(jù)庫(kù)管理終端。
數(shù)據(jù)庫(kù)智能管家DBbrain與傳統(tǒng)數(shù)據(jù)庫(kù)管理工具的區(qū)別在于,它不僅僅作為輔助運(yùn)維工具供DBA使用,而是面向所有用戶,包括運(yùn)維團(tuán)隊(duì)、開(kāi)發(fā)團(tuán)隊(duì)、運(yùn)營(yíng)團(tuán)隊(duì)。其核心思想是通過(guò)智能運(yùn)維平臺(tái)為應(yīng)用部門(mén)提供標(biāo)準(zhǔn)化和自動(dòng)化的數(shù)據(jù)庫(kù)運(yùn)維服務(wù)。
2.DBbrain系統(tǒng)架構(gòu)解讀
數(shù)據(jù)庫(kù)智能管家DBbrain提供的自治服務(wù)是跨數(shù)據(jù)庫(kù)引擎的,是通過(guò)多數(shù)據(jù)庫(kù)引擎插件式方式提供的,不僅支持MySQL,也支持NoSQL、Redis等。
之前大家在網(wǎng)上聽(tīng)過(guò)Oracle有自治數(shù)據(jù)庫(kù)、微軟也有自治服務(wù),但他們的服務(wù)是在特有引擎上進(jìn)行數(shù)據(jù)庫(kù)自治,并不是多引擎的的服務(wù)平臺(tái)。
我們認(rèn)為數(shù)據(jù)庫(kù)自治既然是為了幫助數(shù)據(jù)庫(kù)運(yùn)維同學(xué)減輕工作的壓力、提高運(yùn)維的效率,應(yīng)該是具備涵蓋數(shù)據(jù)庫(kù)運(yùn)維所涉及的盡可能多的數(shù)據(jù)庫(kù)引擎,因?yàn)橐粋€(gè)業(yè)務(wù)可能不止會(huì)用到單一的數(shù)據(jù)庫(kù),比如常見(jiàn)的MySQL+Redis組合等。
在數(shù)據(jù)的采集層,以MySQL為例,我們會(huì)根據(jù)不同數(shù)據(jù)采集監(jiān)控指標(biāo)、比如主機(jī)監(jiān)控指標(biāo)、網(wǎng)絡(luò)監(jiān)控指標(biāo)、數(shù)據(jù)庫(kù)監(jiān)控指標(biāo),通過(guò)秒級(jí)監(jiān)控的指標(biāo)以及采集的日志信息,幫助用戶發(fā)現(xiàn)更廣的問(wèn)題面,不僅僅是數(shù)據(jù)庫(kù)層面的故障、主機(jī)層面和管控任務(wù)的故障都可以有豐富的源數(shù)據(jù)的記錄。
在數(shù)據(jù)的計(jì)算和加工層的模塊,模塊通過(guò)流式計(jì)算平臺(tái)提取出特征數(shù)據(jù)。這個(gè)地方并不需要人工進(jìn)行分類,而是通過(guò)特征提取和加工來(lái)識(shí)別出異常信息、異常的數(shù)據(jù),再進(jìn)行異常指標(biāo)和異常趨勢(shì)的預(yù)測(cè)。
這個(gè)模型我們自身已經(jīng)訓(xùn)練出了涵蓋比較多指標(biāo)和比較多情況的通用引擎,另一方面,也通過(guò)了現(xiàn)網(wǎng)用戶對(duì)數(shù)據(jù)庫(kù)使用情況和對(duì)于問(wèn)題的反饋來(lái)進(jìn)行監(jiān)督式學(xué)習(xí),不斷增強(qiáng)模型訓(xùn)練,做到模型對(duì)業(yè)務(wù)是千人千面,而不是一套通用模型面對(duì)所有的數(shù)據(jù)庫(kù)業(yè)務(wù)。
在實(shí)時(shí)診斷模塊中,通過(guò)計(jì)算模塊給出的結(jié)果、識(shí)別出的異常信息,以及內(nèi)置的專家智能服務(wù)來(lái)為大家提供診斷優(yōu)化的建議,同時(shí)會(huì)調(diào)用一些運(yùn)維工具類處理的模塊,比如慢日志分析模塊、延遲主備切換分析等等,以工具類的模塊進(jìn)行輔助診斷,給到用戶非常精準(zhǔn)的數(shù)據(jù)庫(kù)問(wèn)題的診斷結(jié)果和對(duì)應(yīng)分析以及優(yōu)化定義。
在功能和輸出交互層面也提供了多終端的訪問(wèn),不僅僅是PC端的訪問(wèn),也提供了小程序、移動(dòng)端、公眾號(hào)、訂閱號(hào)一體化的輸出,幫助用戶有各種各樣的體驗(yàn),在任何地方都可以享受數(shù)據(jù)庫(kù)自治服務(wù)帶來(lái)的紅利和便利。
3.用戶級(jí)監(jiān)控告警全鏈路
接下來(lái)和大家分享這幾年我們做了哪些工作,有了哪些沉淀積累。
數(shù)據(jù)庫(kù)自治服務(wù)首先關(guān)注的是故障,故障具體關(guān)注的是告警和監(jiān)控,DBbrain提供了宏觀用戶級(jí)別的監(jiān)控和告警,讓用戶第一時(shí)間內(nèi)能夠發(fā)現(xiàn)故障、發(fā)現(xiàn)異常,可以了解整個(gè)自己負(fù)責(zé)的所有數(shù)據(jù)庫(kù)的情況。
這部分采用的是二八原則,產(chǎn)品基本上為80%以上的”小白”設(shè)計(jì),涵蓋80%常見(jiàn)的數(shù)據(jù)庫(kù)異常問(wèn)題和監(jiān)控指標(biāo),所以門(mén)檻非常低。
監(jiān)控頁(yè)面給用戶呈現(xiàn)出來(lái)的易讀性非常高,不需要從幾百個(gè)監(jiān)控指標(biāo)中找出哪個(gè)有問(wèn)題,我們會(huì)幫助用戶篩選、聚合出相同問(wèn)題觸發(fā)的監(jiān)控指標(biāo)。
最后是過(guò)程+結(jié)果的導(dǎo)向,DBbrain的全景視圖是聯(lián)動(dòng)的,所有都是結(jié)果導(dǎo)向,不僅僅讓用戶看得到實(shí)際上出現(xiàn)什么問(wèn)題,也可以在監(jiān)控告警層面給大家展示故障發(fā)生過(guò)程中的變化,性能變更趨勢(shì)、其他指標(biāo)變化趨勢(shì)等等。不僅是在結(jié)果側(cè)方面給出反饋,在過(guò)程方面也會(huì)給用戶清晰的呈現(xiàn)。
4.7*24小時(shí)異常診斷
7x24小時(shí)異常診斷,就相當(dāng)于不間斷的DBA值班一樣,只不過(guò)是通過(guò)數(shù)據(jù)庫(kù)自治服務(wù)來(lái)提供。
在之前的專家時(shí)代、工具時(shí)代,沒(méi)有辦法做到7x24小時(shí)的異常診斷,主要有三個(gè)原因:
信息分析難
信息獲取難
性能優(yōu)化難
數(shù)據(jù)庫(kù)自治服務(wù)可以幫助大家克服掉這三座大山,提供自治的閉環(huán)服務(wù),幫助大家識(shí)別各種各樣的數(shù)據(jù)庫(kù)問(wèn)題。這里我們可以舉幾個(gè)例子:
比如在線教育行業(yè)由于疫情的原因,在晚上八點(diǎn)到十點(diǎn)會(huì)是一個(gè)業(yè)務(wù)高峰;而交易類、金融類的業(yè)務(wù)在早上和下午會(huì)是高峰,在某一個(gè)點(diǎn)可能會(huì)出現(xiàn)峰值,所以具備一個(gè)周期性的變化。
變更是指原來(lái)的業(yè)務(wù)變化是有規(guī)律的,但是突然有一天出現(xiàn)業(yè)務(wù)的變更,這很可能是業(yè)務(wù)進(jìn)行了功能上的發(fā)布或者調(diào)整。
通過(guò)這些特征提取以及采集到的多維度秒級(jí)監(jiān)控進(jìn)行相互的配合,能夠幫助識(shí)別出每一類業(yè)務(wù)自有、特有的規(guī)律,使得在做歸因分析和自我優(yōu)化過(guò)程中,可以屏蔽掉由于自身業(yè)務(wù)特性帶來(lái)的并非是故障的高峰點(diǎn),幫助用戶識(shí)別“偽高峰”。
5.異常框架診斷
數(shù)據(jù)庫(kù)自治服務(wù)診斷的框架分三部分——假說(shuō)生成、證據(jù)評(píng)分、決策計(jì)算。
在假說(shuō)生成時(shí),我們會(huì)把各種關(guān)系模型進(jìn)行1-N個(gè)關(guān)聯(lián),取到非常多的相關(guān)指標(biāo)和異常,通過(guò)決策候選集的篩選,利用證據(jù)模型通過(guò)證據(jù)鏈進(jìn)行篩選。最后通過(guò)決策支持度向量,進(jìn)入決策計(jì)算模塊。
決策計(jì)算模塊會(huì)進(jìn)行判斷,決策是否為最優(yōu),如果不是最優(yōu)會(huì)重新進(jìn)行證據(jù)評(píng)分。
6.SQL優(yōu)化
相信SQL優(yōu)化是絕大多數(shù)DBA或者研發(fā)同學(xué)都很感興趣的話題,也是大家用的最頻繁的功能之一。
DBbrain提供的SQL優(yōu)化,特點(diǎn)在于代價(jià)和成本。不僅提供索引的建議,還會(huì)提供語(yǔ)句的改寫(xiě)和排序字段的選擇。
DBbrain在索引分析方面考慮的更為全面。比如在增加索引時(shí),會(huì)考慮是否有冗余索引,是否有現(xiàn)成的索引可以使用或者修改。其次在索引更新后,還會(huì)評(píng)估對(duì)于用戶已有的SQL是否會(huì)有影響,從而使得數(shù)據(jù)庫(kù)性能下降等?
此外像大家比較關(guān)注的SQL模板聚合統(tǒng)計(jì)、耗時(shí)區(qū)間統(tǒng)計(jì)等多維度的信息統(tǒng)計(jì),DBbrain也會(huì)提供相應(yīng)的能力。
7.基于cost的分析引擎
基于cost的分析引擎也是我們今年的重點(diǎn)之一。首先的出發(fā)點(diǎn)是增加用戶對(duì)于DBbrain提供的索引建議的可信度。
往往我們要判斷一個(gè)索引、一個(gè)優(yōu)化建議好不好,最簡(jiǎn)單的方法是理論上一定是可行的,二是實(shí)踐,如果加上去真的變快了,我們就認(rèn)為這個(gè)處理得好。如果加上去沒(méi)改變就不行。
但是通過(guò)基于cost的分析引擎,我們能夠在用戶沒(méi)有執(zhí)行優(yōu)化建議之前就把優(yōu)化的結(jié)果告訴大家,從而在優(yōu)化前就可以清楚的看到預(yù)期的優(yōu)化效果。
cost值不等同于耗時(shí),減少的cost不能等比例的計(jì)算耗時(shí)。這里我們會(huì)考慮三個(gè)方面:
在Server層中主要的開(kāi)銷是計(jì)算符合條件的行的代價(jià)
在engine層中主要的開(kāi)銷是從磁盤(pán)讀數(shù)據(jù)的代價(jià)
在Jion計(jì)算時(shí)不僅要考慮condition,還要考慮condition上的filter
我們會(huì)將這些綜合到cost引擎中,幫助用戶更好的在優(yōu)化之前看到優(yōu)化的預(yù)期效果。
8.數(shù)據(jù)庫(kù)審計(jì)與分析
這個(gè)功能也是DBbrain提供的非常前沿的功能,也是非常實(shí)用的功能。
具體就是我們之前有些操作很可能是瞬間的操作,在回溯問(wèn)題時(shí)發(fā)現(xiàn)不了;有些SQL由于記錄的原因記錄不全,導(dǎo)致分析問(wèn)題時(shí)沒(méi)有參考。
通過(guò)SQL審計(jì)與分析服務(wù),可以幫助用戶記錄所有在數(shù)據(jù)庫(kù)層面執(zhí)行的SQL,不僅僅是變更的操作,查詢操作也可以被記錄下來(lái)。可以理解為類似于原生的log。首先對(duì)性能消耗做了嚴(yán)格的測(cè)試,每條SQL執(zhí)行完以后會(huì)進(jìn)行審計(jì)規(guī)則的識(shí)別和過(guò)濾,將命中審計(jì)規(guī)則的SQL寫(xiě)入到內(nèi)存中,批量的進(jìn)行刷盤(pán),它的性能整體損耗在做壓縮以后,得出數(shù)據(jù)是低于5%。
各個(gè)廠商都在做審計(jì)類的服務(wù),評(píng)測(cè)報(bào)告也是網(wǎng)上可以查詢到的,5%的消耗是業(yè)內(nèi)很領(lǐng)先的水平。
針對(duì)審計(jì)全量SQL能夠做的事非常多,能夠貢獻(xiàn)所有SQL任意時(shí)刻的快照以及執(zhí)行的趨勢(shì)。很多時(shí)候一條SQL可能就執(zhí)行十秒,但其中等了20秒,所以SQL執(zhí)行時(shí)間很短,但是這條SQL結(jié)束的時(shí)間跨度非常長(zhǎng)。對(duì)于這種SQL如果沒(méi)有全量時(shí)間的快照就很難發(fā)現(xiàn)這樣的問(wèn)題,這幫助我們?cè)谂懦呻y雜癥的時(shí)候有更多的支持,能夠幫助我們把整個(gè)數(shù)據(jù)庫(kù)執(zhí)行軌跡更加精確的梳理出來(lái)。
9.數(shù)據(jù)庫(kù)健康評(píng)估策略解讀
除了精確到SQL層面的優(yōu)化,數(shù)據(jù)庫(kù)自治服務(wù)在宏觀上對(duì)整個(gè)數(shù)據(jù)庫(kù)也有一套健康評(píng)估策略,主要通過(guò)五個(gè)方面進(jìn)行評(píng)估,如下圖所示:
首先是可用性,可用性是指服務(wù)正常還是不正常。業(yè)務(wù)最明顯的感知就是業(yè)務(wù)是不是掛了,是不是可以正常的使用。
第二是數(shù)據(jù)可靠性。什么情況下會(huì)影響數(shù)據(jù)可靠性?除了故障數(shù)據(jù)、丟數(shù)據(jù)、人為的操作導(dǎo)致數(shù)據(jù)的不一致以外,有時(shí)候正常的業(yè)務(wù)邏輯中也會(huì)出現(xiàn)數(shù)據(jù)可靠性的問(wèn)題。比如數(shù)據(jù)延遲增加,一旦出現(xiàn)故障如果主庫(kù)的數(shù)據(jù)無(wú)法找回、起不來(lái),備庫(kù)的數(shù)據(jù)就會(huì)出現(xiàn)數(shù)據(jù)丟失的情況,很可能是由于binlog還沒(méi)有傳輸過(guò)去、或者主庫(kù)事務(wù)沒(méi)有結(jié)束的情況。
性能是指是不是存在慢SQL、是不是存在并發(fā)數(shù)導(dǎo)致CPU資源消耗過(guò)于明顯,是不是使用率非常高、發(fā)揮功能不足或者是cache比較低等等導(dǎo)致的性能問(wèn)題,也是數(shù)據(jù)庫(kù)健康評(píng)估策略非常關(guān)注的一點(diǎn)。
還有就是隱患、超大表或者是表數(shù)量的不合理,沒(méi)有及時(shí)進(jìn)行分步、分表,或者是采用分布式底層存儲(chǔ)的架構(gòu),導(dǎo)致在做大量數(shù)據(jù)的排序查詢時(shí)性能會(huì)隨著數(shù)據(jù)量逐漸增大,聚合的消耗會(huì)越來(lái)越大,這也是隱患項(xiàng)。還有一個(gè)隱患是權(quán)限是否合理、是否有過(guò)多的授權(quán),這些都會(huì)涉及到數(shù)據(jù)庫(kù)的隱患,我們也會(huì)在健康評(píng)估策略中特別的強(qiáng)調(diào)出來(lái)。
變化我們?cè)?x24小時(shí)的異常診斷中提到過(guò),業(yè)務(wù)趨勢(shì)的變更、突增、變化,與之前業(yè)務(wù)消耗和業(yè)務(wù)資源使用情況不一致的情況,我們都會(huì)識(shí)別出來(lái)告訴用戶,幫助大家不僅能夠掌握整個(gè)業(yè)務(wù)的使用情況,也可以對(duì)業(yè)務(wù)資源消耗畫(huà)像有所了解。通過(guò)健康評(píng)估報(bào)告,更能夠知道各種業(yè)務(wù)是否合理。
10.時(shí)間序列模型Porphet在資源預(yù)測(cè)上的應(yīng)用
剛剛我們提到,我們結(jié)合了一些算法進(jìn)行了一些預(yù)測(cè),預(yù)測(cè)模型是采用前幾年Facebook開(kāi)源的Porphet算法,應(yīng)用累加回歸的模型,通過(guò)時(shí)間、趨勢(shì)以及循環(huán)變更的規(guī)律來(lái)幫助業(yè)務(wù)預(yù)測(cè)資源的使用情況。
最簡(jiǎn)單的是根據(jù)歷史使用趨勢(shì)預(yù)測(cè)磁盤(pán)使用量,能夠幫助用戶提早知道什么時(shí)候該擴(kuò)容、什么時(shí)候縮容、什么時(shí)候需要購(gòu)買(mǎi)更多的設(shè)備、什么時(shí)候需要清理數(shù)據(jù),同樣也可以幫助用戶預(yù)測(cè)CPU、內(nèi)存性能指標(biāo)在后續(xù)趨勢(shì)中的變動(dòng),幫助用戶在大促前、一些活動(dòng)之前、一些重要敏感操作之前,知道業(yè)務(wù)什么時(shí)候是低峰、什么時(shí)候需要拓展多少資源,這種預(yù)測(cè)模型對(duì)用戶和云廠商有非常大的價(jià)值。
對(duì)于云廠商而言,對(duì)于資源調(diào)度、資源的管理以及幫助用戶進(jìn)行資源合理的分配,有非常大的價(jià)值。
對(duì)于客戶而言,云上的資源評(píng)估、資源的管理工作,借助預(yù)測(cè)模型可以預(yù)先啟動(dòng)這些工作,不用每次都措手不及。想要擴(kuò)容的時(shí)候馬上申請(qǐng)資源是來(lái)不及的,雖然云上是彈性的伸縮,但是特殊情況下,比如出現(xiàn)大促的時(shí)候,電商客戶都在這一天發(fā)起擴(kuò)容,很可能就會(huì)出現(xiàn)資源洪峰,用戶可能不能夠按時(shí)拿到想要的資源。
11.自動(dòng)性能優(yōu)化系統(tǒng)CDBTune
CDBTune是一個(gè)新的前沿技術(shù),去年我們?cè)赟IGMOD以論文的形式進(jìn)行了發(fā)布。產(chǎn)品化的過(guò)程也在進(jìn)行逐步的完善。
大家都知道數(shù)據(jù)庫(kù)參數(shù)很多,那么要如何調(diào)參?很多人表示網(wǎng)上有很多萬(wàn)能模板,但到底適不適合你的業(yè)務(wù),其實(shí)是不知道的,可能無(wú)法發(fā)揮數(shù)據(jù)庫(kù)最大的性能。
如果對(duì)這些參數(shù)進(jìn)行手動(dòng)調(diào)參,有經(jīng)驗(yàn)的DBA可能對(duì)其中的某些參數(shù)有自己的經(jīng)驗(yàn),但對(duì)于各種不同特征業(yè)務(wù)或者不斷變更的業(yè)務(wù),CDBTune就可以幫助很好的解決這個(gè)問(wèn)題。
我們可以通過(guò)深度學(xué)習(xí)算法通過(guò)自調(diào)優(yōu)的方式,得到與自身業(yè)務(wù)相匹配的參數(shù)配置。調(diào)優(yōu)的時(shí)間也比其他的要快,調(diào)優(yōu)的結(jié)果經(jīng)過(guò)測(cè)試,已經(jīng)達(dá)到了很高的水平。
12.容易被忽略的數(shù)據(jù)庫(kù)安全防護(hù)
絕大多數(shù)的數(shù)據(jù)庫(kù)運(yùn)維對(duì)于這部分的內(nèi)容要不然是接觸的很少,要不然就是會(huì)被忽略掉。大部分的數(shù)據(jù)庫(kù)運(yùn)維往往認(rèn)為只要保證業(yè)務(wù)不出性能問(wèn)題、不出故障就可以,但很少會(huì)關(guān)注數(shù)據(jù)庫(kù)的安全防護(hù)。
數(shù)據(jù)庫(kù)自治服務(wù)作為一個(gè)全方位的服務(wù),必然要在大家忽略或者沒(méi)有關(guān)注到的地方提供相應(yīng)的價(jià)值,這樣才能為客戶更好的提供數(shù)據(jù)庫(kù)的穩(wěn)定性和安全性。
這里我們主要提供了三個(gè)功能:
合規(guī)審計(jì):提供符合國(guó)家等保要求的安全審計(jì),對(duì)企業(yè)網(wǎng)絡(luò)中的數(shù)據(jù)庫(kù)各類會(huì)話信息、訪問(wèn)操作、SQL語(yǔ)句進(jìn)行安全審計(jì),可挖掘數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中各類潛在風(fēng)險(xiǎn)和隱患,為數(shù)據(jù)庫(kù)安全運(yùn)行保駕護(hù)航。
安全治理:可對(duì)數(shù)據(jù)資產(chǎn)、數(shù)據(jù)內(nèi)容、訪問(wèn)信息進(jìn)行中心化管理。并依托先進(jìn)的AI引擎與敏感數(shù)據(jù)發(fā)現(xiàn)算法,將針對(duì)企業(yè)核心數(shù)據(jù)的異常操作進(jìn)行篩選告警,實(shí)現(xiàn)企業(yè)數(shù)據(jù)保護(hù)。
數(shù)據(jù)脫敏:以處理數(shù)據(jù)庫(kù)文件的方式,對(duì)數(shù)據(jù)庫(kù)中敏感數(shù)據(jù)進(jìn)行在線屏蔽、變形、字符替換、隨機(jī)替換等脫敏操作,達(dá)到企業(yè)核心數(shù)據(jù)保密效果。