TDSQL MySQL版基本原理-水平分表 讀寫分離 彈性擴展 強同步


TDSQL MySQL版(TDSQL for MySQL)是部署在騰訊雲上的一種支持自動水平拆分、Shared Nothing 架構的分布式數據庫。TDSQL MySQL版 即業務獲取的是完整的邏輯庫表,而后端會將庫表均勻的拆分到多個物理分片節點。

水平分表

概述

水平拆分方案是 TDSQL MySQL版 的基礎原理,它的每個節點都參與計算和數據存儲,且每個節點都僅計算和存儲一部分數據。因此,無論業務的規模如何增長,我們僅需要在分布式集群中不斷的添加設備,用新設備去應對增長的計算和存儲需要即可。

通過如下視頻,您可以了解水平拆分的過程與原理:https://cloud.tencent.com/document/product/557/10521

水平切分

水平切分(分表):是按照某種規則,將一個表的數據分散到多個物理獨立的數據庫服務器中,形成“獨立”的數據庫“分片”。多個分片共同組成一個邏輯完整的數據庫實例。

常規的單機數據庫中,一張完整的表僅在一個物理存儲設備上讀寫。
image.png
分布式數據庫中,根據在建表時設定的分表鍵,系統將根據不同分表鍵自動分布到不同的物理分片中,但邏輯上仍然是一張完整的表。
image.png
在 TDSQL MySQL版 中,數據的切分通常就需要找到一個分表鍵(shardkey)以確定拆分維度,再采用某個字段求模(HASH)的方案進行分表,而計算 HASH 的某個字段就是 shardkey。 HASH 算法能夠基本保證數據相對均勻地分散在不同的物理設備中。

寫入數據( SQL 語句含有 shardkey )

  1. 業務寫入一行數據。
  2. 網關通過對 shardkey 進行 hash。
  3. 不同的 hash 值范圍對應不同的分片(調度系統預先分片的算法決定)。
  4. 數據根據分片算法,將數據存入實際對應的分片中。
    image.png

數據聚合

數據聚合:如果一個查詢 SQL 語句的數據涉及到多個分表,此時 SQL 會被路由到多個分表執行,TDSQL MySQL版 會將各個分表返回的數據按照原始 SQL 語義進行合並,並將最終結果返回給用戶。

注意:
執行 SELECT 語句時,建議您在 where 條件帶上 shardKey 字段,否則會導致數據需要全表掃描然后網關才對執行結果進行聚合。全表掃描響應較慢,對性能影響很大。

讀取數據(有明確 shardkey 值)

  1. 業務發送 select 請求中含有 shardkey 時,網關通過對 shardkey 進行 hash。
  2. 不同的 hash 值范圍對應不同的分片。
  3. 數據根據分片算法,將數據從對應的分片中取出。

讀取數據(無明確 shardkey 值)

  1. 業務發送 select 請求沒有 shardkey 時,將請求發往所有分片。
  2. 各個分片查詢自身內容,發回 Proxy 。
  3. Proxy 根據 SQL 規則,對數據進行聚合,再答復給網關。
    image.png

讀寫分離

功能簡介

當處理大數據量讀請求的壓力大、要求高時,可以通過讀寫分離功能將讀的壓力分布到各個從節點上。
TDSQL MySQL版 默認支持讀寫分離功能,架構中的每個從機都能支持只讀能力,如果配置有多個從機,將由網關集群(TProxy)自動分配到低負載從機上,以支撐大型應用程序的讀取流量。

基本原理

讀寫分離基本的原理是讓主節點(Master)處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),讓從節點(Slave)處理查詢操作(SELECT)。

只讀賬號

只讀帳號是一類僅有讀權限的帳號,默認從數據庫集群中的從機(或只讀實例)中讀取數據。
通過只讀帳號,對讀請求自動發送到備機,並返回結果。

彈性擴展

概述

TDSQL MySQL版 支持在線實時擴容,擴容方式分為新增分片和現有分片擴容兩種方式,整個擴容過程對業務完全透明,無需業務停機。擴容時僅部分分片存在秒級的只讀或中斷,整個集群不會受影響。

擴容過程

TDSQL MySQL版 主要是采用自研的自動再均衡技術保證自動化的擴容和穩定。

新增分片擴容

  1. 在 TDSQL MySQL版控制台 對需要擴容的 A 節點進行擴容操作。
  2. 根據新加 G 節點配置,將 A 節點部分數據搬遷(從備機)到 G 節點。
  3. 數據完全同步后,A、G 節點校驗數據庫,存在一至幾十秒的只讀,但整個服務不會停止。
  4. 調度通知 proxy 切換路由。
    image.png

現有分片擴容

基於現有分片的擴容相當於更換了一塊更大容量的物理分片。

說明:
基於現有分片的擴容沒有增加分片,不會改變划分分片的邏輯規則和分片數量。

  1. 按需要升級的配置分配一個新的物理分片(以下簡稱新分片)。
  2. 將需要升級的物理分片(以下簡稱老分片)的數據、配置等同步數據到新分片中。
  3. 同步數據完成后,在騰訊雲網關做路由切換,切換到新分片繼續使用。
    image.png

相關操作

分布式數據庫由多個分片組成,如您需要將現有 TDSQL MySQL版 實例的規格升級到更高規格,請參見 升級實例。

強同步

背景

傳統數據復制方式有如下三種:

  1. 異步復制:應用發起更新請求,主節點(Master) 完成相應操作后立即響應應用,Master 向從節點(Slave)異步復制數據。
  2. 強同步復制:應用發起更新請求,Master 完成操作后向 Slave 復制數據,Slave 接收到數據后向 Master 返回成功信息,Master 接到 Slave 的反饋后再應答給應用。Master 向 Slave 復制數據是同步進行的。
  3. 半同步復制:應用發起更新請求,Master 在執行完更新操作后立即向 Slave 復制數據,Slave 接收到數據並寫到 relay log 中(無需執行) 后才向 Master 返回成功信息,Master 必須在接受到 Slave 的成功信息后再向應用程序返回響應。

存在問題

當 Master 或 Slave 不可用時,以上三種傳統數據復制方式均有幾率引起數據不一致。

數據庫作為系統數據存儲和服務的核心能力,其可用性要求非常高。在生產系統中,通常都需要用高可用方案來保證系統不間斷運行,而數據同步技術是數據庫高可用方案的基礎。

解決方案

MAR 強同步復制方案是騰訊自主研發的基於 MySQL 協議的並行多線程強同步復制方案,只有當備機數據完全同步(日志)后,才由主機給予應用事務應答,保障數據正確安全。

原理示意圖如下:
image.png
在應用層發起請求時,只有當從節點(Slave)返回信息成功后,主節點(Master)才向應用層應答請求成功,以確保主從節點數據完全一致。
MAR 強同步方案在性能上優於其他主流同步方案,具體數據詳情可參見 強同步性能對比數據。主要特點如下:

一致性的同步復制,保證節點間數據強一致性。
對業務層面完全透明,業務層面無需做讀寫分離或同步強化工作。
將串行同步線程異步化,引入線程池能力,大幅度提高性能。
支持集群架構。
支持自動成員控制,故障節點自動從集群中移除。
支持自動節點加入,無需人工干預。
每個節點都包含完整的數據副本,可以隨時切換。
無需共享存儲設備。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM