WOT2016翁寧龍:美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)
原創(chuàng)近日,51CTO將舉辦WOT互聯(lián)網(wǎng)運(yùn)維與開發(fā)者峰會(huì),記者在會(huì)前專訪了本次大會(huì)數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用專場(chǎng)的重要講師翁寧龍,他此次分享的主題是《美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng) 》。美團(tuán)數(shù)據(jù)庫(kù)目前機(jī)器數(shù)大約1300臺(tái)(包括mysql、redis、mongo)、mysql的日均流量約9億、數(shù)據(jù)庫(kù)中間件的線上使用比率80%+、mysql 5.6+GTID的線上使用比率70%+、DBA日常操作的自動(dòng)化率達(dá)到50%+。面對(duì)這樣一串可觀的數(shù)據(jù),不得不讓我們對(duì)美團(tuán)數(shù)據(jù)庫(kù)的運(yùn)維產(chǎn)生好奇。接下來,讓我們隨著翁寧龍走近美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng),進(jìn)一步了解。
【受訪人簡(jiǎn)介】
翁寧龍· 美團(tuán)網(wǎng)高級(jí)DBA
翁寧龍,2015年6月加入美團(tuán)網(wǎng),目前負(fù)責(zé)美團(tuán)網(wǎng)數(shù)據(jù)庫(kù)自動(dòng)化相關(guān)的架構(gòu)設(shè)計(jì)以及開發(fā)工作。2012年,東北大學(xué)研究生畢業(yè)加入百度從事數(shù)據(jù)庫(kù)自動(dòng)化相關(guān)的設(shè)計(jì)、開發(fā)工作,參與了分布式數(shù)據(jù)庫(kù)、私有云數(shù)據(jù)庫(kù)以及公有云數(shù)據(jù)庫(kù)的相關(guān)設(shè)計(jì)、開發(fā)。
美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)初期架構(gòu)及后期的演進(jìn)
翁寧龍?jiān)诓稍L中表示,美團(tuán)自動(dòng)化運(yùn)維系統(tǒng)初期僅支持在線的DDL操作、數(shù)據(jù)庫(kù)賬戶申請(qǐng)操作以及數(shù)據(jù)庫(kù)相關(guān)集群信息查詢操作。初期架構(gòu),前端將用戶相關(guān)的操作信息以任務(wù)的形式記錄在數(shù)據(jù)庫(kù)中,服務(wù)端有常駐內(nèi)存的模塊去數(shù)據(jù)庫(kù)中取任務(wù)、操作并進(jìn)行相關(guān)元信息的修改工作。美團(tuán)自動(dòng)化運(yùn)維系統(tǒng)初期的功能比較單一,整個(gè)系統(tǒng)缺乏高可用、高性能等方面的設(shè)計(jì)。
如上圖所示,為當(dāng)前美團(tuán)自動(dòng)化運(yùn)維系統(tǒng)的架構(gòu)設(shè)計(jì):
- 用戶在前端所有的數(shù)據(jù)請(qǐng)求都通過API層獲取,所有的操作都通過API層提交;API層除了系統(tǒng)使用外,還為公司其他團(tuán)隊(duì)提供方便的接口化、服務(wù)化支持。
- 用戶的所有請(qǐng)求都由任務(wù)管理模塊進(jìn)行消費(fèi),任務(wù)管理模塊獲取任務(wù)之后,找到對(duì)應(yīng)的任務(wù)執(zhí)行者,將任務(wù)拋給任務(wù)執(zhí)行者,即反饋前端任務(wù)提交成功。
- 任務(wù)執(zhí)行者托管于OS,負(fù)責(zé)單元任務(wù)的執(zhí)行,并將執(zhí)行過程中相關(guān)的數(shù)據(jù)記錄在數(shù)據(jù)庫(kù),展示到前端,方便用戶查看任務(wù)進(jìn)展情況,任務(wù)執(zhí)行結(jié)束,任務(wù)單元退出。
美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)支持的功能展示
如上圖所示,美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)現(xiàn)在主要支持的功能包括:
- 總覽:查看數(shù)據(jù)庫(kù)集群的實(shí)時(shí)情況,相關(guān)報(bào)警信息,慢查詢等
- 工單:方便RD提交數(shù)據(jù)庫(kù)問題,引導(dǎo)RD進(jìn)行問題解決
- 系統(tǒng)公告&***動(dòng)態(tài):發(fā)布數(shù)據(jù)庫(kù)相關(guān)的重大變更、***通告等
- 初始化:新集群的搭建工作(包括mysql和中間件)
- 擴(kuò)容:給數(shù)據(jù)庫(kù)擴(kuò)容從庫(kù)
- 數(shù)據(jù)庫(kù)創(chuàng)建:建庫(kù)&添加賬號(hào)
- 自助表變更:在線的DDL和DML
- 備份管理:數(shù)據(jù)庫(kù)集群的備份相關(guān)的操作
翁寧龍表示,除了上述功能之外,還有checksum管理、中間件管理、歷史、實(shí)時(shí)processlist查看、歷史innodb status查看、SQL評(píng)審等。
美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)開發(fā)過程中踩過的坑
當(dāng)問及美團(tuán)數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維系統(tǒng)在開發(fā)過程中遇到哪些問題,又如何應(yīng)對(duì)時(shí),翁寧龍從開發(fā)流程和功能具體實(shí)現(xiàn)兩方面來舉例:
針對(duì)開發(fā)流程來說,開發(fā)出來的功能與運(yùn)維DBA預(yù)期不符合
應(yīng)對(duì):數(shù)據(jù)庫(kù)自動(dòng)化的需求來源:運(yùn)維DBA平時(shí)運(yùn)維工作中的痛點(diǎn),通過運(yùn)維DBA投票的方式?jīng)Q定自動(dòng)化相關(guān)功能的開發(fā);功能先進(jìn)行原型設(shè)計(jì),必須要有運(yùn)維DBA參與其中;功能開發(fā)過程中與運(yùn)維DBA常溝通,開發(fā)完成需要至少2個(gè)運(yùn)維DBA測(cè)試OK沒問題才能上線;上線之后,DBA有任何使用不舒服的地方,隨時(shí)跟進(jìn)修改
針對(duì)具體功能實(shí)現(xiàn)來說,任務(wù)中途失敗造成的手動(dòng)回滾
應(yīng)對(duì):由于數(shù)據(jù)庫(kù)操作很多功能沒有辦法方便得回滾,所以需要手動(dòng)回滾,如果失敗率高的話,就會(huì)給運(yùn)維DBA帶來額外的工作;所以在所有功能上必須加上詳細(xì)的前置檢查和后置檢查工作,在操作環(huán)境不正確的情況下,直接給運(yùn)維DBA報(bào)錯(cuò),而不是流程走到一半出錯(cuò)退出。
在采訪***,翁寧龍分享了開發(fā)過程中總結(jié)的三條寶貴經(jīng)驗(yàn),供大家參考借鑒:其一,要與運(yùn)維DBA和RD保持溝通,明確了解需求;現(xiàn)在可以通過工單的方式,統(tǒng)計(jì)最需要的功能。其二,用戶在使用的過程中,有什么不舒服的地方,如果修改量不大的話,應(yīng)該立即修改,因?yàn)檫@樣的小需求會(huì)很多,但是能夠解決大問題。其三,高可用、高性能、高擴(kuò)展的系統(tǒng)設(shè)計(jì),方便運(yùn)維DBA參與到開發(fā)中來,提升開發(fā)效率。