NewSQL 的應用:分佈式數據庫實踐篇 3
什麼是 NewSQL
NewSQL=RDBMS(ACID)+ SQL +NoSQL(擴展性)
所謂的 NewSQL 其實就是 在 NoSQL 上 改造,實現關係型數據。但是如果沒有 DB sharding 的需求,不要輕易上 NewSQL, 因爲那比較喫硬件資源。
NewSQL 主要目的是替換傳統 DB 的分庫分表,如 MySQL+MongoDB 的大數據性能瓶頸、業務層邏輯複雜度的增加(多維度 mapping)、運維成本(MySQK 5.5 不支持 online ddl)、故障切換時間長(30s-1 分鐘)、MHA/MMM 二次開發。
那麼,
-
數據量大如何快速水平擴展存儲
-
大數據量下,如何快速 DDL
-
業務層分佈分表造成業務邏輯非常複雜
-
常規 MySQL 主從故障轉移造成業務不可用
-
開源高可用運維方案不友好
NewSQL 目前有以下種類:
-
Google:Spanner/F1 不開源
-
TiDB
-
CockroachDB:百度在用
-
OceanBase
-
華爲高斯 DB
-
騰訊 TDSQL
NewSQL 的數據隔離
快照隔離(snapshot isolation)是數據庫事務處理中的一個隔離級別,保證事務的讀操作將看到一個一致的數據庫的版本快照(實際上讀取比該事務早的最後一次提交值),寫操作成功提交的前提是沒有對該快照併發修改衝突。
很多重要的數據庫管理系統已經採用了快照隔離,如 InterBase, Firebird, Oracle, MySQL, PostgreSQL, SQL Anywhere(英語:Sql anywhere), MongoDB 與 Microsoft SQL Server (從 2005)。原因是快照隔離比可順序化隔離級別的性能更好,且仍仍避免絕大多數併發異常。快照隔離一般用多版本併發控制 (MVCC) 實現。
TiDB 的架構
需要注意的是,TiDB 無法直接參與到分佈式事務中,它只是寫數據的時候可以強一致地寫到多個節點。也就是按照處理本地事務的方式來分佈式寫數據。
TiDB 高度兼容 MySQL 協議,基於 raft 算法的多副本複製。
TiDB 架構如下所示:
TiDB clutster 負責 SQL 語義解釋,TiKV 是真正存儲數據的地方,內部是 RocksDB。TiSpark 負責 OLAP 部分。TiKV 必須是 SSD 的,TiDB cluster 可是 SAS,但最好是 SSD。
TiDB 支持大多數 MySQL 語法,不支持存儲過程 / 自定義函數 / 觸發器。可實現基於 MySQL 業務無縫遷移。
通過對 TiDB 的壓力測試,得到如下結論:
-
順序掃描效率高,連續行大概率存儲同一臺機器相鄰的位置,批量讀取 / 寫入效率高。
-
控制併發運行的線程數會減少請求響應時間,提高處理性能。
-
場景建議:適合線上業務混合讀寫場景;適合順序寫場景:數據歸檔、操作日誌、攤銷流水。
TiDB 的預上線
-
TiDB 掛載到線上 MySQL,作爲 MySQL 從庫同步線上數據
-
首先將業務部分讀流量切換到 TiDB,做好預判,逐步灰度讀流量到 100%。
-
然後切換業務部分寫流量到 TiDB,做好預判,逐步灰度流量到 100%
線上業務的接入步驟:
測試(判斷 TiDB 業務場景滿足、性能)=> 同步數據 => 切流量
-
測試驗證:引流線上數據和流量到線下
-
大量功能和性能測試 (日誌、耗時;DBA 數據抽樣正確性驗證)
-
TiDB 完全滿足消息業餘需求。
在同步數據時,TiDB 集羣作爲 MySQL 實例從庫,MySQL 單實例多個表同步到 TiDB 的一張大表。
切流量如上圖所示:
-
將讀流量灰度切換 TiDB,觀察一週,逐步灰度至 100%。
-
斷開 TiDB 與 MySQL 主從同步。
-
業務雙寫(確保業務隨時回滾到 MySQL)
-
業務停止 MySQL 寫入。
TiDB 的上線架構圖如下所示:
接下來,我們對比一下 TiDB 和 MySQL 的性能表現:
請求延時:
TiDB 整體相應延遲非常穩定,不受業務流量高峯影響。
MySQL 波動很大
TiDB/TiKV 通過無縫實例提升吞吐量。
業務請求隊列等到情況:
TiDB 恆爲 1
MySQL 抖動大
業務請求隊列等待情況:
接入 TiDB 後業務員服務接口耗時穩定無抖動,沒有發生丟棄的情況。
數據庫的無縫遷移
DB 無縫遷移的方式和數據的類型有有關:
時效性數據:紅包就是時效性數據
永久性數據:永久性數據如用戶數據
時效性數據遷移方案相對簡單:
接下來,我們看一個永久數據類型從 mongodb 遷移到 MySQL 的步驟。
mongodb 拿下來之前,一定會有一段時間雙寫:
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/xDVpLOowlRIOBowGrlODqg