內(nèi)容來源:2017年6月4日,袋鼠云首席數(shù)據(jù)庫架構(gòu)師宏翊在“企業(yè)互聯(lián)網(wǎng)架構(gòu)優(yōu)化升級之路”進(jìn)行《讓數(shù)據(jù)庫不再成為業(yè)務(wù)發(fā)展瓶頸——分布式數(shù)據(jù)庫架構(gòu)設(shè)計》演講分享谬以。IT 大咖說(ID:itdakashuo)作為獨(dú)家視頻合作方,經(jīng)主辦方和講者審閱授權(quán)發(fā)布派桩。
閱讀字?jǐn)?shù):1705?| 3分鐘閱讀
獲取嘉賓演講視頻回放及PPT腾誉,請點(diǎn)擊:http://t.cn/RkDNJ0l
摘要
企業(yè)如何實(shí)現(xiàn)高容量大并發(fā)數(shù)據(jù)庫服務(wù)?公司業(yè)務(wù)高速發(fā)展组砚,單實(shí)例數(shù)據(jù)庫到達(dá)瓶頸的情況下吻商,如何做好分布式設(shè)計,提供高并發(fā)高性能的數(shù)據(jù)庫服務(wù)以支撐業(yè)務(wù)增長糟红?
本次分享主要內(nèi)容包括數(shù)據(jù)庫分布式架構(gòu)設(shè)計思路艾帐,拆分原理,改造難點(diǎn)盆偿,解決方案等柒爸,讓數(shù)據(jù)庫不再成為業(yè)務(wù)發(fā)展瓶頸。
為什么要做分布式事扭?
高并發(fā):分布式應(yīng)用帶來更大量的數(shù)據(jù)庫請求捎稚。
高容量:業(yè)務(wù)增長,產(chǎn)生大量在線數(shù)據(jù)求橄。
資源向上擴(kuò)展存在天花板今野。
支撐業(yè)務(wù)高速發(fā)展,平滑擴(kuò)容罐农。
拆分原則:循序漸進(jìn)
在業(yè)務(wù)初期条霜,客戶量比較少,可以把所有服務(wù)和數(shù)據(jù)都存在一個實(shí)例上涵亏,都能支持業(yè)務(wù)的發(fā)展宰睡。
發(fā)展之后的客戶量蒲凶、數(shù)據(jù)量和并發(fā)都上來了,這時數(shù)據(jù)庫很容易出現(xiàn)瓶頸夹厌。我們建議大家首先進(jìn)行服務(wù)化的改造豹爹,將不同的業(yè)務(wù)模塊做垂直梳理,把不同服務(wù)的數(shù)據(jù)庫相互隔離矛纹,中間的交互由業(yè)務(wù)上去實(shí)現(xiàn)臂聋。這樣數(shù)據(jù)庫就可以分布在不同的實(shí)例上,能夠支持相對較高的并發(fā)和容量或南。
繼續(xù)發(fā)展的話孩等,實(shí)例依然是一個瓶頸,這時我們就要考慮做水平的拆分采够。把一個服務(wù)的數(shù)據(jù)分布到不同的實(shí)例上肄方,以支持?jǐn)U展、高并發(fā)蹬癌、大容量的數(shù)據(jù)庫服務(wù)权她。
拆分需要循序漸進(jìn),然后做服務(wù)的梳理逝薪,最后再做水平拆分隅要。
水平拆分會引入一些復(fù)雜性,研發(fā)方面需要考慮的東西就比較多董济,所以需要謹(jǐn)慎地做拆分步清。數(shù)據(jù)庫的拆分和業(yè)務(wù)架構(gòu)緊密結(jié)合,有時在業(yè)務(wù)上的一個小改動完全可以把壓力擋在數(shù)據(jù)庫之外虏肾。
水平拆分的難點(diǎn)
水平拆分的一個服務(wù)數(shù)據(jù)會分布到不同的底層數(shù)據(jù)庫上廓啊,所以會帶來一些復(fù)雜性。
系統(tǒng)架構(gòu)需要適應(yīng)數(shù)據(jù)庫的分布式封豪,就需要做一些改造谴轮。面臨的技術(shù)挑戰(zhàn)就是應(yīng)用需要處理復(fù)雜的分布式邏輯,比如分布式的事務(wù)吹埠、跨庫查詢第步。在穩(wěn)定性方面也會有一些挑戰(zhàn),但不是最主要的藻雌。主要是分布式的局限性雌续,分布式數(shù)據(jù)分布在不同的數(shù)據(jù)庫上,它不支持跨庫的join胯杭、分布式事務(wù)驯杜、以及全局sequence等。
解決方案:客戶端實(shí)現(xiàn)數(shù)據(jù)路由
在客戶端直接做一個配置做个,去實(shí)現(xiàn)路由的功能鸽心。它的好處就是不需要引入額外模塊滚局,整體架構(gòu)不變;程序的把控力強(qiáng)顽频,場景簡單方便使用藤肢;對代碼的侵入性強(qiáng);配置管理復(fù)雜糯景。
此方案不會引入額外的組建嘁圈,架構(gòu)上比較輕量,簡單場景使用尚可蟀淮,比如配置管理復(fù)雜等最住,不建議使用。
解決方案:數(shù)據(jù)庫中間件
實(shí)現(xiàn)自動分庫分表怠惶,對應(yīng)用透明涨缚;使用門檻極低,應(yīng)用改造量胁咧巍脓魏;方便的動態(tài)水平擴(kuò)容;針對分布式的各種定制功能通惫,如異構(gòu)索引茂翔、小表廣播等;最重要的是讽膏,有了數(shù)據(jù)庫中間件檩电,應(yīng)用看到還是單一的數(shù)據(jù)庫拄丰。
中間件的使用最大限度的屏蔽了分布式數(shù)據(jù)庫所引入的復(fù)雜性府树,極大降低了研發(fā)的門檻。
DRDS功能簡介
分庫分表是DRDS的核心功能料按,支持?jǐn)?shù)據(jù)的多維度切分和路由訪問奄侠;內(nèi)建讀寫分離功能,可以靈活配置訪問權(quán)重载矿;自帶全局唯一ID組件垄潮;查詢引擎識別和下推復(fù)雜查詢,兼容98% MySQL語法闷盔;彈性擴(kuò)容組件實(shí)現(xiàn)自動化在線水平擴(kuò)容弯洗。
DRDS物理框架
數(shù)據(jù)拆分,能夠組合1K個MySQL逢勾;分布式SQL查詢引擎與高度的SQL兼容性牡整;數(shù)據(jù)存儲的平滑擴(kuò)容;處理性能的彈性伸縮溺拱;讀寫分離(應(yīng)用透明)逃贝;小表廣播谣辞、跨庫join、全局sequence沐扳。
主庫和讀庫通過數(shù)據(jù)庫的原生復(fù)制實(shí)現(xiàn)泥从,數(shù)據(jù)是強(qiáng)一致的。DRDS會自動判斷請求沪摄,然后做分發(fā)躯嫉。事務(wù)性的操作全部路由到主庫上去,讀庫則承擔(dān)一些讀的操作杨拐。
把join從DRDS層往下推和敬,在MySQL層實(shí)現(xiàn)它的join,業(yè)務(wù)設(shè)計上要避免跨庫join戏阅。
分布式SQL規(guī)范設(shè)計:最佳實(shí)踐
查詢盡可能帶上分庫條件昼弟。如果把一個表拆分到底層的十個庫,查詢的時候每次都帶上一個拆分條件奕筐,DRDS能夠很清楚地把請求路由到底層的庫上舱痘。
Join的時候有幾種解決方案。一種是兩個表的分庫鍵都相等去做join离赫,這樣就能限定在一個庫上芭逝。還有一種是廣播表,join的字段不一樣渊胸,但是每個表都帶上分庫的條件旬盯,這樣還是會限定在同一個庫里面。
EasyDB:數(shù)據(jù)庫自動化管理平臺
資源:實(shí)時監(jiān)控數(shù)據(jù)庫和服務(wù)器空間的使用狀態(tài)翎猛。
高可用:云上高可用架構(gòu)設(shè)計胖翰,故障自動切換。
備份:定期的數(shù)據(jù)庫全量切厘,增量備份萨咳,可靈活配置。
監(jiān)控:異常情況下自動捕獲和告警疫稿,支持短信培他,郵件和微信通知。
性能:超過50個指標(biāo)性能趨勢和SQL采集遗座,實(shí)時監(jiān)控數(shù)據(jù)庫的運(yùn)行狀態(tài)舀凛。
日志:數(shù)據(jù)庫錯誤日志采集。
安全:數(shù)據(jù)庫賬號和操作的審計途蒋,基于服務(wù)器的安全設(shè)計猛遍。
我今天的分享就到這里,謝謝大家!