虢國(guó)飛談餓了么數(shù)據(jù)庫(kù)架構(gòu)變遷
大?。?/span>0.03 MB 人氣: 2017-10-12 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:數(shù)據(jù)庫(kù)(62882)
餓了么DBA經(jīng)理 虢國(guó)飛
CSDN:首先請(qǐng)您簡(jiǎn)單介紹下自己、公司以及目前所負(fù)責(zé)的領(lǐng)域。
虢國(guó)飛:大家好,我叫虢(guo)國(guó)飛,網(wǎng)名“飛揚(yáng)過(guò)?!保恢睆氖聰?shù)據(jù)庫(kù)領(lǐng)域的工作,熟悉的數(shù)據(jù)庫(kù)產(chǎn)品有MySQL、MSSQL、PostgreSQL和部分NoSQL,先后在5173、新蛋網(wǎng)、滬江網(wǎng)從事過(guò)DBA方面的工作,現(xiàn)在“餓了么”公司擔(dān)任DBA經(jīng)理職務(wù),主要負(fù)責(zé)餓了么數(shù)據(jù)庫(kù)的維護(hù)和數(shù)據(jù)庫(kù)團(tuán)隊(duì)的管理工作。
CSDN:您在數(shù)據(jù)庫(kù)行業(yè)多年,掌握著豐富的數(shù)據(jù)庫(kù)開(kāi)發(fā)和設(shè)計(jì)經(jīng)驗(yàn),那么您是如何保持對(duì)這份技術(shù)熱情的呢?
虢國(guó)飛:個(gè)人認(rèn)為,能夠在一個(gè)領(lǐng)域里面保持持續(xù)的熱情,主要取決于興趣、成就感和好奇心,只有熱愛(ài)這個(gè)行業(yè)、這份工作,才會(huì)不斷的想去學(xué)習(xí)、研究和思考,如果再能在此基礎(chǔ)上做出一些有意思的事情,取得一些成績(jī),然后結(jié)交一些朋友,相信這份成就感會(huì)繼續(xù)支持你在這個(gè)行業(yè)里面走下去;還有需要保持一顆好奇心,樂(lè)于接受新的事物和技術(shù),能打破自己已有的知識(shí)體系,融入新的思想,再?gòu)男陆M織起來(lái),形成新的體系,這樣才能不斷豐富、提升自己。
CSDN:您能和我們分享下餓了么訂單從每天幾十萬(wàn)單到如今的幾百萬(wàn)訂單過(guò)程中,在數(shù)據(jù)庫(kù)架構(gòu)方面是如何調(diào)整變化的,以及每個(gè)階段面臨了哪些問(wèn)題,又是如何應(yīng)對(duì)的呢?
虢國(guó)飛:我最初到餓了么的時(shí)候,那時(shí)候每天幾十萬(wàn)的單量,但是因?yàn)轲I了么之前一直沒(méi)有專門(mén)的DBA,使得數(shù)據(jù)庫(kù)面臨的問(wèn)題很多,包括磁盤(pán)空間不足、主從延時(shí)、連接數(shù)不夠、無(wú)規(guī)范、無(wú)規(guī)則、大量慢SQL等問(wèn)題一應(yīng)俱全;我過(guò)去后做了三件事情:1. 先解決一些救火方面的問(wèn)題,比方磁盤(pán)空間、延時(shí)、連接數(shù)等,2. 推動(dòng)數(shù)據(jù)庫(kù)設(shè)計(jì)、開(kāi)發(fā)的規(guī)則、規(guī)范和數(shù)據(jù)庫(kù)部署安裝的規(guī)范,3. 收集了數(shù)據(jù)庫(kù)運(yùn)行數(shù)據(jù)、加上了監(jiān)控報(bào)警;三項(xiàng)措施其實(shí)瞄準(zhǔn)了三個(gè)方向:穩(wěn)定現(xiàn)在、收緊入口、把控?cái)?shù)據(jù);尤其是把控?cái)?shù)據(jù)方面,為我們后面的架構(gòu)調(diào)整和DB優(yōu)化提供了數(shù)據(jù)、指明了方向。
數(shù)據(jù)庫(kù)架構(gòu)調(diào)整大概經(jīng)歷了四個(gè)階段:硬件和DB升級(jí)、垂直拆分、sharding、異地容災(zāi)。
硬件和DB升級(jí):
這個(gè)是最開(kāi)始為解決磁盤(pán)空間、延時(shí)、SlowSQL等問(wèn)題采取的一些救火措施,我們上了SSD盤(pán)、升級(jí)MySQL5.5到5.6、增加slave將不同業(yè)務(wù)劃分到單獨(dú)的slave上面 (做隔離,單個(gè)業(yè)務(wù)Slow SQL不影響全局 )、同時(shí)還進(jìn)行了機(jī)房的搬遷,這其中遇到MySQL升級(jí)到5.6 業(yè)務(wù)代碼不兼容的問(wèn)題(主要是時(shí)間和null值不兼容,前期測(cè)試也做得不完善),導(dǎo)致真正實(shí)施的時(shí)候排查了比較久。
垂直拆分:
隨著我們訂單量的不斷上漲,主庫(kù)的壓力增加明顯,我們通過(guò)之前收集的運(yùn)行數(shù)據(jù),再對(duì)比我們壓測(cè)數(shù)據(jù),發(fā)現(xiàn)原有的架構(gòu)下,訂單上升到200萬(wàn)單左右,核心數(shù)據(jù)庫(kù)TPS就支持不了啦,同時(shí)Slave延時(shí)的問(wèn)題還會(huì)繼續(xù)出現(xiàn),連接數(shù)也不夠,于是我們將核心的主庫(kù)按業(yè)務(wù)和TPS的比例拆分成了五套集群,其他相關(guān)的業(yè)務(wù)庫(kù)也按照我們的運(yùn)行數(shù)據(jù)和壓測(cè)效果一一拆分,最終平穩(wěn)支持了300多萬(wàn)單的沖擊;這個(gè)階段其實(shí)主要的問(wèn)題在于,如何有節(jié)奏的推動(dòng)開(kāi)發(fā)人員配合我們來(lái)做DB的拆分,那在拆分之前我們會(huì)通過(guò)我們的數(shù)據(jù)來(lái)告知到老板和開(kāi)發(fā)負(fù)責(zé)人我們DB會(huì)面臨哪些問(wèn)題?瓶頸在哪里?不調(diào)整的話最多能支撐的訂單量是多少?我們會(huì)拿運(yùn)行數(shù)據(jù)、壓測(cè)數(shù)據(jù)以及我們拆分后的預(yù)期數(shù)據(jù)來(lái)展示給他們,有了數(shù)據(jù)的支撐和專業(yè)的對(duì)比分析,老板也會(huì)幫我們推動(dòng)拆分的事;其實(shí)還沒(méi)完,等拆分完成后我們會(huì)拿實(shí)際運(yùn)行的數(shù)據(jù)和之前預(yù)期的數(shù)據(jù)做對(duì)比,做成分析報(bào)告發(fā)給老板和相關(guān)的開(kāi)發(fā)人員,讓大家感覺(jué)到咱們做的事情是有效果、有價(jià)值的。
sharding:
這個(gè)階段,系統(tǒng)要求是10x容量設(shè)計(jì),這個(gè)階段對(duì)DBA來(lái)講,其實(shí)比較痛苦,首先是方案的確定會(huì)比較麻煩,最重要的是依賴的因素太多了,很多事情DBA并不能把控,需要很多資源的投入;因?yàn)闃I(yè)務(wù)比較復(fù)雜,光討論sharding的切片方案就耗時(shí)1個(gè)多月,還有sharding的方案選型、實(shí)施方案、灰度方案、回滾方案以及業(yè)務(wù)代碼的改造等;最終我們將核心的DB拆分為兩個(gè)維度(用戶和商家維度),分了120個(gè)片(可以支持1024片),從一套集群變成了12套集群,引入了DAL層(對(duì)業(yè)務(wù)透明),改造后經(jīng)過(guò)壓測(cè)分析,可以支持到3000w訂單/天的量;當(dāng)然這種調(diào)整也帶來(lái)了新的問(wèn)題,如sharding之后數(shù)據(jù)一致性(兩個(gè)分片)、DAL本身的容災(zāi)機(jī)制、DB維護(hù)量增加等;我們后面開(kāi)發(fā)了數(shù)據(jù)差異對(duì)比和自動(dòng)數(shù)據(jù)訂正工具來(lái)保障數(shù)據(jù)的一致性,同時(shí)也在DAL這一層做了冗余的災(zāi)備機(jī)制,DB維護(hù)我們也通過(guò)工具來(lái)簡(jiǎn)化DBA的操作。
異地容災(zāi):
這個(gè)是我們正在進(jìn)行的階段,異地災(zāi)備投入比較大,而且風(fēng)險(xiǎn)也比較高,目前因?yàn)槲覀儾](méi)有在MySQL源碼上面做一些工作,有沒(méi)有開(kāi)發(fā)drc類似的工具(當(dāng)然這個(gè)是我們努力的方向),所以方案的研究和測(cè)試都是在考慮MySQL缺陷下進(jìn)行的,比如一開(kāi)始我們就是基于切換的時(shí)候兩邊的數(shù)據(jù)有差異的前提下來(lái)討論方案的(當(dāng)然數(shù)據(jù)是不能丟的,我們需要知道哪些數(shù)據(jù)出現(xiàn)了問(wèn)題),因?yàn)閿?shù)據(jù)的延時(shí),帶來(lái)比較嚴(yán)重的問(wèn)題是數(shù)據(jù)的沖突和業(yè)務(wù)數(shù)據(jù)狀態(tài)的一致性,對(duì)這些數(shù)據(jù)的丟失或者不一致問(wèn)題,我們是通過(guò)業(yè)務(wù)方和DBA分別跑腳本來(lái)應(yīng)對(duì)的,即業(yè)務(wù)會(huì)負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)狀態(tài)不一致的修復(fù),DBA會(huì)負(fù)責(zé)修復(fù)數(shù)據(jù)的沖突(比方切換前自增列我們會(huì)統(tǒng)一將自增因子調(diào)大或者一開(kāi)始兩邊就是奇偶遞增,避免新寫(xiě)入的數(shù)據(jù)和老的數(shù)據(jù)沖突),等機(jī)房恢復(fù)后,我們?cè)賮?lái)通過(guò)腳本比對(duì)差異的數(shù)據(jù),跟進(jìn)業(yè)務(wù)方案來(lái)修復(fù),目前方案還在測(cè)試驗(yàn)證當(dāng)中。
CSDN:在您看來(lái),您覺(jué)得數(shù)據(jù)庫(kù)技術(shù)接下來(lái)會(huì)面臨著哪些挑戰(zhàn)?它的發(fā)展趨勢(shì)又如何?
虢國(guó)飛:現(xiàn)在互聯(lián)網(wǎng)對(duì)數(shù)據(jù)庫(kù)的使用方式發(fā)生了很多變化,數(shù)據(jù)庫(kù)不再像過(guò)去那樣笨重,變成很輕的東西了,因?yàn)榇蠹覍?duì)數(shù)據(jù)庫(kù)的吞吐量有更高的要求;而且現(xiàn)在硬件性能提升很快,數(shù)據(jù)庫(kù)以前的瓶頸以前說(shuō)是在磁盤(pán)IO上,后面可能轉(zhuǎn)變到數(shù)據(jù)庫(kù)代碼能否將這些強(qiáng)悍的硬件性能使用好的情況。
個(gè)人感覺(jué),數(shù)據(jù)庫(kù)技術(shù)會(huì)往三個(gè)方向發(fā)展,第一是提高數(shù)據(jù)庫(kù)本身的吞吐量,在保證數(shù)據(jù)的一致性的前提下,如何減少鎖或者提高鎖效率、提高并發(fā)度、細(xì)化管理方式和提示信息等方面,像MySQL這類開(kāi)源數(shù)據(jù)庫(kù),還是有很多地方可以繼續(xù)完善;第二是分布式數(shù)據(jù)庫(kù)技術(shù)發(fā)展,目前大部分公司在做分布式數(shù)據(jù)庫(kù)時(shí)都會(huì)依賴中間件,沒(méi)有能力做中間件的公司,要做數(shù)據(jù)庫(kù)的sharding會(huì)比較痛苦,開(kāi)發(fā)人員需要改造很多代碼,而且升級(jí)、維護(hù)都會(huì)比較麻煩,不過(guò)中間件的引入會(huì)帶來(lái)新的問(wèn)題,拖慢了效率,增加一個(gè)新的風(fēng)險(xiǎn)點(diǎn),增加了溝通成本,出問(wèn)題時(shí)排查的路線也會(huì)更長(zhǎng);如果能讓數(shù)據(jù)庫(kù)本身實(shí)現(xiàn)中間件的機(jī)制,那對(duì)DBA來(lái)講會(huì)是很給力的支持,DBA完全能夠自己把控,現(xiàn)在有一些公司在做這個(gè)研究;第三是云數(shù)據(jù)庫(kù),CDB目前發(fā)展也比較迅速,高配的CDB 越來(lái)越多,有豐富的工具支持,中小型的業(yè)務(wù)完全可以使用CDB,如果不關(guān)注狀態(tài)的業(yè)務(wù)也可以在多個(gè)CDB之間做災(zāi)備(比方發(fā)送短信的業(yè)務(wù)),不過(guò)數(shù)據(jù)量大、并發(fā)高、要求高的業(yè)務(wù),還是推薦自己來(lái)維護(hù)。
CSDN:您在餓了么期間,有沒(méi)有很有意思的事情發(fā)生,讓您至今記憶猶新呢?
虢國(guó)飛:我覺(jué)得DBA最印象深刻的是故障,尤其是大的故障,我記得在餓了么經(jīng)歷了一個(gè)比較大的事故是int字段溢出的問(wèn)題,碰巧的是我們業(yè)務(wù)代碼之前就有對(duì)這個(gè)表的插入失敗情況,于是拋出的錯(cuò)都被業(yè)務(wù)丟棄了,當(dāng)時(shí)正是業(yè)務(wù)高峰期,訂單狀態(tài)都不輪轉(zhuǎn)了,我們的各項(xiàng)監(jiān)控指標(biāo)都在安全水位,而且沒(méi)有錯(cuò)誤日志,大家都找到問(wèn)題;后來(lái)還是一位熟悉業(yè)務(wù)的架構(gòu)師發(fā)現(xiàn)這個(gè)現(xiàn)象后,再對(duì)表進(jìn)行測(cè)試才找到原因;這個(gè)事情讓我感受最深的是做DBA很多事情不能停留在表面,我們對(duì)各種性能指標(biāo)都有監(jiān)控,但是這個(gè)還是不夠的,還必須深入到業(yè)務(wù),才能真正在問(wèn)題出現(xiàn)時(shí)及時(shí)定位;現(xiàn)在我們的監(jiān)控會(huì)加入對(duì)業(yè)務(wù)對(duì)數(shù)據(jù)的監(jiān)控,這需要深入了解業(yè)務(wù)的特點(diǎn),這樣我們才能制定有效的監(jiān)控指標(biāo),有的放矢,自證清白(即便故障時(shí)沒(méi)有業(yè)務(wù)代碼的錯(cuò)誤信息,我們也能知道DB到底有沒(méi)有問(wèn)題)。
CSDN:以您對(duì)數(shù)據(jù)庫(kù)技術(shù)的多年研究,如何才能更好的掌握數(shù)據(jù)庫(kù)這門(mén)技術(shù)呢?
虢國(guó)飛:個(gè)人認(rèn)為有幾點(diǎn):感興趣、愛(ài)學(xué)習(xí)、多動(dòng)手、勤思考、善總結(jié),先深入學(xué)習(xí)某一款數(shù)據(jù)庫(kù),再擴(kuò)展到其他,搭建T型知識(shí)體系,最終能形成一套自己的維護(hù)管理DB的方式方法。
CSDN:在本次SDCC數(shù)據(jù)庫(kù)峰會(huì)上分享的話題是?
虢國(guó)飛:“餓了么數(shù)據(jù)庫(kù)架構(gòu)變遷”,希望和大家分享下我們?cè)跇I(yè)務(wù)快速增長(zhǎng)下是怎么來(lái)調(diào)整數(shù)據(jù)庫(kù)架構(gòu)的,同時(shí)和大家探討下各種架構(gòu)的優(yōu)劣。
CSDN:您最期待在本次SDCC數(shù)據(jù)庫(kù)峰會(huì)上聽(tīng)到哪些內(nèi)容?
虢國(guó)飛:數(shù)據(jù)庫(kù)架構(gòu)和技術(shù)發(fā)展上面其他同仁的一些新的想法和實(shí)踐,還有遇到過(guò)的問(wèn)題。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
虢國(guó)飛談餓了么數(shù)據(jù)庫(kù)架構(gòu)變遷下載
相關(guān)電子資料下載
- 常用于緩存處理的機(jī)制總結(jié) 如何避免緩存雪崩問(wèn)題? 24
- 觸發(fā)器的基本原理、應(yīng)用場(chǎng)景及優(yōu)缺點(diǎn) 83
- AI大模型對(duì)數(shù)據(jù)存儲(chǔ)技術(shù)的發(fā)展趨勢(shì) 64
- 訪問(wèn)控制中PIP的典型流程和關(guān)鍵點(diǎn)思考 60
- 物證管理系統(tǒng)|智物證DW-S404是一套成熟系統(tǒng) 44
- Python 梯度計(jì)算模塊如何實(shí)現(xiàn)一個(gè)邏輯回歸模型 93
- TinyDB :一個(gè)純Python編寫(xiě)的輕量級(jí)數(shù)據(jù)庫(kù) 58
- mysql經(jīng)典面試題及答案 63
- 人大金倉(cāng)獲評(píng)“2023年度軟件和信息技術(shù)服務(wù)名牌企業(yè)” 100
- 人大金倉(cāng)亮相第40屆CCF中國(guó)數(shù)據(jù)庫(kù)學(xué)術(shù)會(huì)議(NDBC 2023) 119