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 )

  1. 業務寫入一行資料。
  2. 閘道器通過對 shardkey 進行 hash。
  3. 不同的 hash 值範圍對應不同的分片(排程系統預先分片的演算法決定)。
  4. 資料根據分片演算法,將資料存入實際對應的分片中。

資料聚合

資料聚合:如果一個查詢 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 規則,對資料進行聚合,再答覆給閘道器。

讀寫分離

功能簡介

當處理大資料量讀請求的壓力大、要求高時,可以通過讀寫分離功能將讀的壓力分佈到各個從節點上。

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 切換路由。

現有分片擴容

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

說明:

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

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

相關操作

分散式資料庫由多個分片組成,如您需要將現有 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 協議的並行多執行緒強同步複製方案,只有當備機資料完全同步(日誌)後,才由主機給予應用事務應答,保障資料正確安全。

原理示意圖如下:



在應用層發起請求時,只有當從節點(Slave)返回資訊成功後,主節點(Master)才嚮應用層應答請求成功,以確保主從節點資料完全一致。

MAR 強同步方案在效能上優於其他主流同步方案,具體資料詳情可參見 強同步效能對比資料。主要特點如下:

一致性的同步複製,保證節點間資料強一致性。

對業務層面完全透明,業務層面無需做讀寫分離或同步強化工作。

將串行同步執行緒非同步化,引入執行緒池能力,大幅度提高效能。

支援叢集架構。

支援自動成員控制,故障節點自動從叢集中移除。

支援自動節點加入,無需人工干預。

每個節點都包含完整的資料副本,可以隨時切換。

無需共享儲存裝置。