【TDSQL】MySQL版了解筆記
簡(jiǎn)介
TDSQL for MySQL是部署在騰訊云上的一種支持自動(dòng)水平拆分、Shared Nothing架構(gòu)的分布式數(shù)據(jù)庫(kù)。
TDSQL MYSQL版,即業(yè)務(wù)獲取的是完整的邏輯庫(kù)表,而后端會(huì)將庫(kù)表均勻的拆分到多個(gè)物理分片節(jié)點(diǎn)。TDSQL MYSQL版默認(rèn)部署主備架構(gòu),提供容災(zāi)、備份、恢復(fù)、監(jiān)控、遷移等全套解決方案,適用于TB或PB級(jí)的海量數(shù)據(jù)庫(kù)場(chǎng)景。
TDSQL MYSQL版目前單分片最大可支持6TB存儲(chǔ)。
數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的三種模式
Shared Everthing架構(gòu)
針對(duì)單個(gè)主機(jī),完全透明共享CPU、Memory、IO,并行處理能力是最差的。
Shared Disk架構(gòu)
各個(gè)處理單元使用自己的CPU和Memory,但共享磁盤系統(tǒng)。
Shared Nothing架構(gòu)
無(wú)共享架構(gòu),每個(gè)節(jié)點(diǎn)都有屬于自己的分區(qū),都有自己的CPU、內(nèi)存、硬盤,不存在共享資源。每個(gè)節(jié)點(diǎn)都是獨(dú)立的,各自處理各自的數(shù)據(jù),處理后的結(jié)果向上匯總。
水平分表
每個(gè)節(jié)點(diǎn)都參與計(jì)算和數(shù)據(jù)存儲(chǔ),且每個(gè)節(jié)點(diǎn)都僅計(jì)算和存儲(chǔ)一部分?jǐn)?shù)據(jù)。因此,無(wú)論業(yè)務(wù)的規(guī)模如何增長(zhǎng),僅需要在分布式集群中不斷地添加設(shè)備,用新設(shè)備去應(yīng)對(duì)增長(zhǎng)的計(jì)算和存儲(chǔ)需要即可。
分布式數(shù)據(jù)庫(kù)中,根據(jù)在建表時(shí)設(shè)定的分表鍵,系統(tǒng)將根據(jù)不同分表鍵自動(dòng)分布數(shù)據(jù)到不同的物理分片中,但邏輯上仍然是一張完整的表。
正讓我想到之前工作中遇到的一種場(chǎng)景,數(shù)據(jù)太多了,放到一張表里太多了,然后就拆分表,每條數(shù)據(jù)都有一個(gè)字段用來(lái)求hash,hash相同的放入到同一張表中,查詢的時(shí)候,就根據(jù)這個(gè)hash去對(duì)應(yīng)的表里查詢。
數(shù)據(jù)聚合
數(shù)據(jù)被插入到不同的表中了,查詢的時(shí)候就要去各個(gè)表中查詢,查出來(lái)的數(shù)據(jù)會(huì)進(jìn)行合并,將最終結(jié)果返回給用戶。
讀寫分離
讀寫分離的原理是讓主節(jié)點(diǎn)Master處理事務(wù)性增、改、刪操作,讓從節(jié)點(diǎn)處理查詢操作。

數(shù)據(jù)復(fù)制
異步復(fù)制
應(yīng)用發(fā)起更新請(qǐng)求,主節(jié)點(diǎn)完成相應(yīng)操作后立即響應(yīng)應(yīng)用,主節(jié)點(diǎn)向從節(jié)點(diǎn)異步復(fù)制數(shù)據(jù)。應(yīng)用接收到更新成功,其實(shí)Slave上還沒(méi)有同步完數(shù)據(jù)。
強(qiáng)同步復(fù)制
應(yīng)用發(fā)起更新請(qǐng)求,主節(jié)點(diǎn)完成操作后向從節(jié)點(diǎn)復(fù)制數(shù)據(jù),從節(jié)點(diǎn)接收到數(shù)據(jù)后向主節(jié)點(diǎn)返回成功信息,主節(jié)點(diǎn)接到從節(jié)點(diǎn)的反饋后再應(yīng)答給應(yīng)用。Master向Slave復(fù)制數(shù)據(jù)是同步進(jìn)行的。這個(gè)時(shí)候應(yīng)用收到更新成功,那是真成功了。
半同步復(fù)制
應(yīng)用發(fā)起更新請(qǐng)求,Master在執(zhí)行完更新操作后立即向Slave復(fù)制數(shù)據(jù),Slave接收到數(shù)據(jù)并寫到relay log中(無(wú)需執(zhí)行)后才向Master返回成功信息,Master必須在接收到Slave的成功信息后再向應(yīng)用程序返回響應(yīng)。這個(gè)時(shí)候應(yīng)用接收到更新成功,其實(shí)數(shù)據(jù)還沒(méi)有同步到Slave,需要執(zhí)行relay log,Slave上才有了更新后數(shù)據(jù)。
MySQL的relay log,中繼日志,是MySQL的主從同步復(fù)制過(guò)程中的一種日志,用于記錄Master上的二進(jìn)制日志中的事件,然后傳輸?shù)綇膸?kù)進(jìn)行重放,以實(shí)現(xiàn)從庫(kù)和主庫(kù)數(shù)據(jù)的同步。
當(dāng)Slave連接到Master時(shí),從庫(kù)會(huì)請(qǐng)求主庫(kù)的二進(jìn)制日志中的某個(gè)位置開始讀取二進(jìn)制日志,主庫(kù)會(huì)發(fā)送從該位置開始的二進(jìn)制日志到從庫(kù),并將這些日志寫入到從庫(kù)的relay log中。然后從庫(kù)會(huì)將relay log中的事件按順序執(zhí)行,以保證從庫(kù)中的數(shù)據(jù)和主庫(kù)一致。
當(dāng)從庫(kù)完成一個(gè)relay log文件的所有事件的執(zhí)行后,會(huì)將該文件標(biāo)記為完成,然后請(qǐng)求主庫(kù)的下一個(gè)二進(jìn)制日志文件。同事,MySQL還支持relay log的分發(fā)和平衡,可以將relay log文件分發(fā)到不同的從庫(kù)上,提高主從同步的效率和可靠性。????-- 引用資料【2】
參考資料
【1】TDSQL MYSQL官方文檔
https://cloud.tencent.com/document/product/557
【2】MySQL的Relay Log日志是干什么的?底層原理是什么?
https://developer.aliyun.com/article/1180928
【3】云監(jiān)控背后的技術(shù):Shared-nothing Architecture
https://mp.weixin.qq.com/s/KmPpxDXngWP--3Xs72BQng
【4】數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的三種模式:share nothing、share everything、share disk
https://www.malaoshi.top/show_1IX4U981uX6K.html