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