Tdsql數(shù)據(jù)庫水平拆分
隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲和訪問成為系統(tǒng)設(shè)計(jì)的瓶頸問題。對于大型的互聯(lián)網(wǎng)應(yīng)用,每天幾十億的PV無疑對數(shù)據(jù)庫造成了相當(dāng)高的負(fù)載。給系統(tǒng)的穩(wěn)定性和擴(kuò)展性造成了極大的問題。通過數(shù)據(jù)的切分來提高系統(tǒng)整體性能,擴(kuò)充系統(tǒng)整體容量,橫向擴(kuò)展數(shù)據(jù)層已經(jīng)成為架構(gòu)研發(fā)人員首選的方式。
2004年,騰訊開始逐步上線互聯(lián)網(wǎng)增值服務(wù),業(yè)務(wù)量開始第一次爆炸。計(jì)費(fèi)成為所有業(yè)務(wù)都需要的一個公共服務(wù),不再是某個服務(wù)的專屬。業(yè)務(wù)量的爆炸給DB層帶來了巨大的壓力,原來的單機(jī)模式已經(jīng)無法支撐。伴隨計(jì)費(fèi)公共平臺的整合建設(shè),在DB層開始引入分庫分表機(jī)制:針對大的表,按照某個key預(yù)先拆成n個子表,分布在不同的機(jī)器節(jié)點(diǎn)上。邏輯層在訪問DB時,自己根據(jù)分表邏輯將請求分發(fā)到不同的節(jié)點(diǎn)。在擴(kuò)容時,需要手工完成子表數(shù)據(jù)的搬遷和訪問路由的修改。DB層在業(yè)務(wù)狂潮之下,增加各種工具和補(bǔ)丁來解決容量水平擴(kuò)展的問題。2012年TDSQL項(xiàng)目立項(xiàng),目標(biāo)為金融聯(lián)機(jī)交易數(shù)據(jù)庫。
TDSQL(Tencent Distributed MySQL,騰訊分布式MySQL)是針對金融聯(lián)機(jī)交易場景推出的高一致性、分布式數(shù)據(jù)庫解決方案。產(chǎn)品形態(tài)為一個數(shù)據(jù)庫集群,底層基于MySQL,對外的功能表現(xiàn)上與MySQL兼容。截至2017年,TDSQL已在公司內(nèi)部關(guān)鍵數(shù)據(jù)領(lǐng)域獲得廣泛應(yīng)用,其中之一作為Midas(米大師)核心數(shù)據(jù)庫,經(jīng)受了互聯(lián)網(wǎng)交易場景的考驗(yàn)。Midas作為騰訊官方唯一數(shù)字業(yè)務(wù)支付平臺,為公司移動App(iOS、Android、Win phone等)、PC客戶端、Web等不同場景提供一站式計(jì)費(fèi)解決方案。
水平拆分
TDSQL規(guī)定shardkey為表拆分的依據(jù),即進(jìn)行SQL查詢時,shardkey作為查詢字段指明該SQL發(fā)往哪個Set(數(shù)據(jù)分片)。在分庫分表之前需要Schedule初始化集群,我們這里稱作一個Group。在初始化Group時要確定最初的分片大小,因而需要確定準(zhǔn)備幾套Set。例如,我們需要對邏輯表拆分成四張子表,需要我們在初始化集群時準(zhǔn)備四個Set,同時指定每個Set的路由信息,并將這些路由信息寫入ZK
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%