TDSQL MySQL版(TDSQL for MySQL)是部署在騰訊云上的一種支持自動水平拆分、Shared Nothing 架構的分布式資料庫,TDSQL MySQL版 即業務獲取的是完整的邏輯庫表,而后端會將庫表均勻的拆分到多個物理分片節點,
水平分表
概述
水平拆分方案是 TDSQL MySQL版 的基礎原理,它的每個節點都參與計算和資料存盤,且每個節點都僅計算和存盤一部分資料,因此,無論業務的規模如何增長,我們僅需要在分布式集群中不斷的添加設備,用新設備去應對增長的計算和存盤需要即可,
通過如下視頻,您可以了解水平拆分的程序與原理:https://cloud.tencent.com/document/product/557/10521
水平切分
水平切分(分表):是按照某種規則,將一個表的資料分散到多個物理獨立的資料庫服務器中,形成“獨立”的資料庫“分片”,多個分片共同組成一個邏輯完整的資料庫實體,
常規的單機資料庫中,一張完整的表僅在一個物理存盤設備上讀寫,

分布式資料庫中,根據在建表時設定的分表鍵,系統將根據不同分表鍵自動分布到不同的物理分片中,但邏輯上仍然是一張完整的表,

在 TDSQL MySQL版 中,資料的切分通常就需要找到一個分表鍵(shardkey)以確定拆分維度,再采用某個欄位求模(HASH)的方案進行分表,而計算 HASH 的某個欄位就是 shardkey, HASH 演算法能夠基本保證資料相對均勻地分散在不同的物理設備中,
寫入資料( SQL 陳述句含有 shardkey )
- 業務寫入一行資料,
- 網關通過對 shardkey 進行 hash,
- 不同的 hash 值范圍對應不同的分片(調度系統預先分片的演算法決定),
- 資料根據分片演算法,將資料存入實際對應的分片中,

資料聚合
資料聚合:如果一個查詢 SQL 陳述句的資料涉及到多個分表,此時 SQL 會被路由到多個分表執行,TDSQL MySQL版 會將各個分表回傳的資料按照原始 SQL 語意進行合并,并將最終結果回傳給用戶,
注意:
執行 SELECT 陳述句時,建議您在 where 條件帶上 shardKey 欄位,否則會導致資料需要全表掃描然后網關才對執行結果進行聚合,全表掃描回應較慢,對性能影響很大,
讀取資料(有明確 shardkey 值)
- 業務發送 select 請求中含有 shardkey 時,網關通過對 shardkey 進行 hash,
- 不同的 hash 值范圍對應不同的分片,
- 資料根據分片演算法,將資料從對應的分片中取出,
讀取資料(無明確 shardkey 值)
- 業務發送 select 請求沒有 shardkey 時,將請求發往所有分片,
- 各個分片查詢自身內容,發回 Proxy ,
- Proxy 根據 SQL 規則,對資料進行聚合,再答復給網關,

讀寫分離
功能簡介
當處理大資料量讀請求的壓力大、要求高時,可以通過讀寫分離功能將讀的壓力分布到各個從節點上,
TDSQL MySQL版 默認支持讀寫分離功能,架構中的每個從機都能支持只讀能力,如果配置有多個從機,將由網關集群(TProxy)自動分配到低負載從機上,以支撐大型應用程式的讀取流量,
基本原理
讀寫分離基本的原理是讓主節點(Master)處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),讓從節點(Slave)處理查詢操作(SELECT),
只讀賬號
只讀帳號是一類僅有讀權限的帳號,默認從資料庫集群中的從機(或只讀實體)中讀取資料,
通過只讀帳號,對讀請求自動發送到備機,并回傳結果,
彈性擴展
概述
TDSQL MySQL版 支持在線實時擴容,擴容方式分為新增分片和現有分片擴容兩種方式,整個擴容程序對業務完全透明,無需業務停機,擴容時區域分分片存在秒級的只讀或中斷,整個集群不會受影響,
擴容程序
TDSQL MySQL版 主要是采用自研的自動再均衡技術保證自動化的擴容和穩定,
新增分片擴容
- 在 TDSQL MySQL版控制臺 對需要擴容的 A 節點進行擴容操作,
- 根據新加 G 節點配置,將 A 節點部分資料搬遷(從備機)到 G 節點,
- 資料完全同步后,A、G 節點校驗資料庫,存在一至幾十秒的只讀,但整個服務不會停止,
- 調度通知 proxy 切換路由,

現有分片擴容
基于現有分片的擴容相當于更換了一塊更大容量的物理分片,
說明:
基于現有分片的擴容沒有增加分片,不會改變劃分分片的邏輯規則和分片數量,
- 按需要升級的配置分配一個新的物理分片(以下簡稱新分片),
- 將需要升級的物理分片(以下簡稱老分片)的資料、配置等同步資料到新分片中,
- 同步資料完成后,在騰訊云網關做路由切換,切換到新分片繼續使用,

相關操作
分布式資料庫由多個分片組成,如您需要將現有 TDSQL MySQL版 實體的規格升級到更高規格,請參見 升級實體,
強同步
背景
傳統資料復制方式有如下三種:
- 異步復制:應用發起更新請求,主節點(Master) 完成相應操作后立即回應應用,Master 向從節點(Slave)異步復制資料,
- 強同步復制:應用發起更新請求,Master 完成操作后向 Slave 復制資料,Slave 接收到資料后向 Master 回傳成功資訊,Master 接到 Slave 的反饋后再應答給應用,Master 向 Slave 復制資料是同步進行的,
- 半同步復制:應用發起更新請求,Master 在執行完更新操作后立即向 Slave 復制資料,Slave 接收到資料并寫到 relay log 中(無需執行) 后才向 Master 回傳成功資訊,Master 必須在接受到 Slave 的成功資訊后再向應用程式回傳回應,
存在問題
當 Master 或 Slave 不可用時,以上三種傳統資料復制方式均有幾率引起資料不一致,
資料庫作為系統資料存盤和服務的核心能力,其可用性要求非常高,在生產系統中,通常都需要用高可用方案來保證系統不間斷運行,而資料同步技術是資料庫高可用方案的基礎,
解決方案
MAR 強同步復制方案是騰訊自主研發的基于 MySQL 協議的并行多執行緒強同步復制方案,只有當備機資料完全同步(日志)后,才由主機給予應用事務應答,保障資料正確安全,
原理示意圖如下:

在應用層發起請求時,只有當從節點(Slave)回傳資訊成功后,主節點(Master)才向應用層應答請求成功,以確保主從節點資料完全一致,
MAR 強同步方案在性能上優于其他主流同步方案,具體資料詳情可參見 強同步性能對比資料,主要特點如下:
一致性的同步復制,保證節點間資料強一致性,
對業務層面完全透明,業務層面無需做讀寫分離或同步強化作業,
將串行同步執行緒異步化,引入執行緒池能力,大幅度提高性能,
支持集群架構,
支持自動成員控制,故障節點自動從集群中移除,
支持自動節點加入,無需人工干預,
每個節點都包含完整的資料副本,可以隨時切換,
無需共享存盤設備,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308604.html
標籤:其它
