分庫分表:TIDB,你是來搶生意的贴硫?不講碼德椿每?

隨著互聯(lián)網(wǎng)的發(fā)展伊者,業(yè)務(wù)越來越龐大,客戶群體也越來越多间护,所要存儲的數(shù)據(jù)也越來越多亦渗,慢慢的就出現(xiàn)了分庫分表的中間件。
比如cobar汁尺,TDDL法精,atlas,sharding-jdbc痴突,mycat等具练,都是非常優(yōu)秀的產(chǎn)品,解決了各種問題海诲,但是引入了中間件肯定就會增加各方面的維護成本等
這篇帶大家了解一款替代分庫分表的解決方案:分布式數(shù)據(jù)庫:TIDB

前言

如今硬件的性價比越來越高棒厘,網(wǎng)絡(luò)傳輸速度越來越快,數(shù)據(jù)庫分層的趨勢逐漸顯現(xiàn)如迟,人們已經(jīng)不再強求用一個解決方案來解決所有的存儲問題收毫,而是通過分層,讓緩存與數(shù)據(jù)庫負責(zé)各自擅長的業(yè)務(wù)場景殷勘。

當(dāng)前數(shù)據(jù)庫領(lǐng)域面臨各種問題此再,如在縮放、一致性玲销、大數(shù)據(jù)分析输拇、與云基礎(chǔ)架構(gòu)集成等方面均存在諸多問題,現(xiàn)有的數(shù)據(jù)庫解決方案和大數(shù)據(jù)分析引擎解決方案基本處于割裂的狀態(tài)贤斜,由于 Oracle策吠、MySQL 數(shù)據(jù)庫并不是面向分布式環(huán)境而設(shè)計,因此即使勉強通過分庫瘩绒、分表或中間件的方式猴抹,在數(shù)據(jù)庫層面做了分片,從本質(zhì)上看也只是復(fù)制了相同的堆棧锁荔,而非針對分布式系統(tǒng)進行存儲和計算優(yōu)化蟀给,這正是進行跨業(yè)務(wù)查詢或跨物理機查詢和寫入十分繁瑣的本質(zhì)原因。NoSQL 雖然解決了數(shù)據(jù)庫彈性擴展的難題阳堕,但是卻放棄了數(shù)據(jù)的強一致性以及對 ACID 事務(wù)的支持跋理,帶來了新的問題。

為了解決這一問題恬总,TiDB 在架構(gòu)上將計算和存儲層進行高度的抽象和分離前普,對混合負載的場景通過 IO 優(yōu)先級隊列,智能副本調(diào)度越驻,行列混合存儲等技術(shù)使其變?yōu)榭赡堋?/strong>

大家可能都沒有聽過TIDB這款分布式數(shù)據(jù)庫汁政,但是它已經(jīng)出現(xiàn)很久了道偷,隨著不斷完善,也受到越來越多的企業(yè)喜愛记劈,接下來讓我們開始了解TIDB吧勺鸦!

TIDB簡介

TIDB是什么?

**TiDB **是一個分布式 NewSQL 數(shù)據(jù)庫目木。它支持水平彈性擴展换途、ACID 事務(wù)、標準 SQL刽射、MySQL 語法和 MySQL 協(xié)議军拟,具有數(shù)據(jù)強一致的高可用特性,是一個不僅適合 OLTP 場景還適合OLAP 場景的混合數(shù)據(jù)庫誓禁。

TIDB怎么來的懈息?

開源分布式緩存服務(wù) Codis 的作者,PingCAP 聯(lián)合創(chuàng)始人& CTO 摹恰,資深 infrastructure 工程師的黃東旭辫继,擅長分布式存儲系統(tǒng)的設(shè)計與實現(xiàn),開源狂熱分子的技術(shù)大神級別人物俗慈。即使在互聯(lián)網(wǎng)如此繁榮的今天姑宽,在數(shù)據(jù)庫這片邊界模糊且不確定地帶,他還在努力尋找確定性的實踐方向闺阱。

2012 年底炮车,他看到 Google 發(fā)布的兩篇論文,得到了很大的觸動酣溃,這兩篇論文描述了 **Google **內(nèi)部使用的一個海量關(guān)系型數(shù)據(jù)庫 F1/Spanner 瘦穆,解決了關(guān)系型數(shù)據(jù)庫、彈性擴展以及全球分布的問題救拉,并在生產(chǎn)中大規(guī)模使用难审√奔穑“如果這個能實現(xiàn)亿絮,對數(shù)據(jù)存儲領(lǐng)域來說將是顛覆性的”,黃東旭為完美方案的出現(xiàn)而興奮麸拄, **PingCAP **的 **TiDB **在此基礎(chǔ)上誕生了派昧。

TIDB的架構(gòu)

TiDB在整體架構(gòu)基本是參考 Google Spanner 和 F1 的設(shè)計,上分兩層為 TiDB 和 TiKV 拢切。**TiDB **對應(yīng)的是 Google F1蒂萎, 是一層無狀態(tài)的 SQL Layer ,兼容絕大多數(shù) MySQL 語法淮椰,對外暴露 MySQL 網(wǎng)絡(luò)協(xié)議五慈,負責(zé)解析用戶的 SQL 語句纳寂,生成分布式的 Query Plan,翻譯成底層 Key Value 操作發(fā)送給 **TiKV **泻拦, **TiKV **是真正的存儲數(shù)據(jù)的地方毙芜,對應(yīng)的是 Google Spanner ,是一個分布式 Key Value 數(shù)據(jù)庫争拐,支持彈性水平擴展腋粥,自動的災(zāi)難恢復(fù)和故障轉(zhuǎn)移(高可用),以及 ACID 跨行事務(wù)架曹。值得一提的是 **TiKV **并不像 HBase 或者 BigTable 那樣依賴底層的分布式文件系統(tǒng)绑雄,在性能和靈活性上能更好,這個對于在線業(yè)務(wù)來說是非常重要。

所以一套這樣的架構(gòu)是由這樣的3類角色共同組建而成。每個部分的解釋如下:

1.TiDB Server

TiDB Server 負責(zé)接收 SQL 請求,處理 SQL 相關(guān)的邏輯曲聂,并通過 PD 找到存儲計算所需數(shù)據(jù)的 TiKV 地址膜楷,與 TiKV 交互獲取數(shù)據(jù),最終返回結(jié)果勾缭。TiDB Server 是無狀態(tài)的,其本身并不存儲數(shù)據(jù),只負責(zé)計算洽洁,可以無限水平擴展,可以通過負載均衡組件(如LVS、HAProxy 或 F5)對外提供統(tǒng)一的接入地址。

2.PD Server

Placement Driver (簡稱 PD) 是整個集群的管理模塊,其主要工作有三個:一是存儲集群的元信息(某個 Key 存儲在哪個 TiKV 節(jié)點);二是對 TiKV 集群進行調(diào)度和負載均衡(如數(shù)據(jù)的遷移、Raft group leader 的遷移等);三是分配全局唯一且遞增的事務(wù) ID驼侠。PD 是一個集群句狼,需要部署奇數(shù)個節(jié)點筹吐,一般線上推薦至少部署 3 個節(jié)點邦危。

3.TiKV Server

TiKV Server 負責(zé)存儲數(shù)據(jù)陵且,從外部看 TiKV 是一個分布式的提供事務(wù)的 Key-Value 存儲引擎脓钾。存儲數(shù)據(jù)的基本單位是 Region,每個 Region 負責(zé)存儲一個 Key Range (從 StartKey 到 EndKey 的左閉右開區(qū)間)的數(shù)據(jù)谨胞,每個 TiKV 節(jié)點會負責(zé)多個 Region 逢防。TiKV 使用 Raft 協(xié)議做復(fù)制局嘁,保持數(shù)據(jù)的一致性和容災(zāi)。副本以 Region 為單位進行管理谓谦,不同節(jié)點上的多個 Region 構(gòu)成一個 Raft Group才顿,互為副本忙芒。數(shù)據(jù)在多個 TiKV 之間的負載均衡由 PD 調(diào)度,這里也是以 Region 為單位進行調(diào)度德谅。

TIDB五大核心特性

一鍵水平擴縮容

得益于 TiDB 存儲計算分離的架構(gòu)的設(shè)計萨螺,可按需對計算窄做、存儲分別進行在線擴容或者縮容,擴容或者縮容過程中對應(yīng)用運維人員透明慰技。

金融級高可用

數(shù)據(jù)采用多副本存儲椭盏,數(shù)據(jù)副本通過 Multi-Raft 協(xié)議同步事務(wù)日志,多數(shù)派寫入成功事務(wù)才能提交吻商,確保數(shù)據(jù)強一致性且少數(shù)副本發(fā)生故障時不影響數(shù)據(jù)的可用性掏颊。可按需配置副本地理位置艾帐、副本數(shù)量等策略滿足不同容災(zāi)級別的要求乌叶。

實時HTAP

提供行存儲引擎 TiKV、列存儲引擎 TiFlash 兩款存儲引擎柒爸,TiFlash 通過 Multi-Raft Learner 協(xié)議實時從 TiKV 復(fù)制數(shù)據(jù)准浴,確保行存儲引擎 TiKV 和列存儲引擎 TiFlash 之間的數(shù)據(jù)強一致。TiKV捎稚、TiFlash 可按需部署在不同的機器乐横,解決 HTAP 資源隔離的問題。

云原生的分布式數(shù)據(jù)庫

專為云而設(shè)計的分布式數(shù)據(jù)庫今野,通過 TiDB Operator 可在公有云葡公、私有云、混合云中實現(xiàn)部署工具化条霜、自動化催什。

兼容MYSQL5.7

專為云而設(shè)計的分布式數(shù)據(jù)庫,通過 TiDB Operator 可在公有云蛔外、私有云蛆楞、混合云中實現(xiàn)部署工具化、自動化夹厌。

TIDB四大核心應(yīng)用場景

HTAP 給開發(fā)者提供了一個實時數(shù)據(jù)分析方面的新思路豹爹,不需要再去維護另一個離線的數(shù)據(jù)倉庫,既減輕了 ETL 的工作矛纹,又能節(jié)省很大一部分建立數(shù)據(jù)倉庫所用到的存儲和計算成本臂聋,HTAP 將是未來的重要趨勢。

黃東旭介紹了 TiDB 的四個主要應(yīng)用場景,一是 MySQL 分片與合并孩等;二是直接替換 MySQL艾君;三是用做數(shù)據(jù)倉庫;四是作為其他系統(tǒng)的一個模塊肄方。

MySQL分片與合并

image
image

Syncer:

TiDB 應(yīng)用的第一類場景是 MySQL 的分片與合并冰垄。對于已經(jīng)在用 MySQL 的業(yè)務(wù),分庫权她、分表虹茶、分片、中間件是常用手段隅要,隨著分片的增多蝴罪,跨分片查詢是一大難題。TiDB 在業(yè)務(wù)層兼容 MySQL 的訪問協(xié)議步清,PingCAP 做了一個數(shù)據(jù)同步的工具——Syncer要门,它可以把 TiDB 作為一個 MySQL Slave,將 **TiDB **作為現(xiàn)有數(shù)據(jù)庫的從庫接在主 MySQL 庫的后方廓啊,在這一層將數(shù)據(jù)打通欢搜,可以直接進行復(fù)雜的跨庫、跨表崖瞭、跨業(yè)務(wù)的實時 SQL 查詢狂巢。黃東旭提到,過去的數(shù)據(jù)庫都是一主多從书聚,有了 **TiDB **以后唧领,可以反過來做到多主一從。

替換MySQL

image

第二類場景是用 **TiDB **直接去替換 MySQL雌续。如果你的IT架構(gòu)在搭建之初并未考慮分庫分表的問題斩个,全部用了 MySQL,隨著業(yè)務(wù)的快速增長驯杜,海量高并發(fā)的 OLTP 場景越來越多受啥,如何解決架構(gòu)上的弊端呢?

在一個 **TiDB 的數(shù)據(jù)庫上,所有業(yè)務(wù)場景不需要做分庫分表鸽心,所有的分布式工作都由數(shù)據(jù)庫層完成滚局。TiDB **兼容 MySQL 協(xié)議,所以可以直接替換 MySQL顽频,而且基本做到了開箱即用藤肢,完全不用擔(dān)心傳統(tǒng)分庫分表方案帶來繁重的工作負擔(dān)和復(fù)雜的維護成本,友好的用戶界面讓常規(guī)的技術(shù)人員可以高效地進行維護和管理糯景。另外嘁圈,TiDB 具有 NoSQL 類似的擴容能力省骂,在數(shù)據(jù)量和訪問流量持續(xù)增長的情況下能夠通過水平擴容提高系統(tǒng)的業(yè)務(wù)支撐能力,并且響應(yīng)延遲穩(wěn)定最住。

黃東旭在演講中提到了摩拜單車的案例钞澳,摩拜早期的數(shù)據(jù)庫全部用 MySQL,隨著業(yè)務(wù)的快速增長涨缚,MySQL 的弊端逐漸顯現(xiàn)轧粟,摩拜單車于 2017 年初開始使用 **TiDB **替換 MySQL。如今仗岖,摩拜的 IT 系統(tǒng)中已部署了數(shù)套 **TiDB **集群逃延,近百個節(jié)點览妖,承載著數(shù)十 TB 的各類數(shù)據(jù)轧拄。

數(shù)據(jù)倉庫

image
image

**TiDB 本身是一個分布式系統(tǒng),第三種使用場景是將 TiDB 當(dāng)作數(shù)據(jù)倉庫使用讽膏。TPC-H 是數(shù)據(jù)分析領(lǐng)域的一個測試集檩电,TiDB 2.0 在 OLAP 場景下的性能有了大幅提升,原來只能在數(shù)據(jù)倉庫里面跑的一些復(fù)雜的 Query府树,在 TiDB 2.0 里面跑俐末,時間基本都能控制在 10 秒以內(nèi)。當(dāng)然奄侠,因為 OLAP 的范疇非常大卓箫,TiDB 的 SQL 也有搞不定的情況,為此 PingCAP 開源了 TiSpark垄潮,TiSpark **是一個 Spark 插件烹卒,用戶可以直接用 Spark SQL 實時地在 **TiKV **上做大數(shù)據(jù)分析。

作為其他系統(tǒng)的模塊

image

**TiDB 是一個傳統(tǒng)的存儲跟計算分離的項目弯洗,其底層的 Key-Value 層旅急,可以單獨作為一個 HBase 的 Replacement 來用,它同時支持跨行事務(wù)牡整。TiDB **對外提供兩個 API 接口藐吮,一個是 ACID Transaction 的 API,用于支持跨行事務(wù)逃贝;另一個是 Raw API谣辞,它可以做單行的事務(wù),換來的是整個性能的提升沐扳,但不提供跨行事務(wù)的 ACID 支持泥从。用戶可以根據(jù)自身的需求在兩個 API 之間自行選擇。例如有一些用戶直接在 **TiKV **之上實現(xiàn)了 Redis 協(xié)議迫皱,將 **TiKV **替換一些大容量歉闰,對延遲要求不高的 Redis 場景辖众。

與MySQL兼容性對比

**TiDB **支持包括跨行事務(wù),JOIN 及子查詢在內(nèi)的絕大多數(shù) MySQL 的語法和敬,用戶可以直接使用現(xiàn)有的 MySQL 客戶端連接凹炸。如果現(xiàn)有的業(yè)務(wù)已經(jīng)基于 MySQL 開發(fā),大多數(shù)情況不需要修改代碼即可直接替換單機的 MySQL昼弟。

包括現(xiàn)有的大多數(shù) MySQL 運維工具(如 PHPMyAdmin, Navicat, MySQL Workbench 等)啤它,以及備份恢復(fù)工具(如 mysqldump, mydumper/myloader)等都可以直接使用。

不過一些特性由于在分布式環(huán)境下沒法很好的實現(xiàn)舱痘,目前暫時不支持或者是表現(xiàn)與 MySQL 有差異变骡。

一些 MySQL 語法在 **TiDB **中可以解析通過,但是不會做任何后續(xù)的處理芭逝,例如 Create Table 語句中 Engine 以及 Partition 選項塌碌,都是解析并忽略。

不支持的特性有以下這些:

存儲過程旬盯,視圖台妆,觸發(fā)器,自定義函數(shù)胖翰,外鍵約束接剩,全文索引,空間索引萨咳,非 UTF8 字符集等

總結(jié)

本文帶你了解了TIDB這款分布式數(shù)據(jù)庫懊缺,它的特性,應(yīng)用場景以及與MySQl的兼容性對比培他,下篇將會介紹TIDB的部署搭建鹃两,計算,存儲靶壮,調(diào)度方面的知識怔毛!

假如面試中你被問到這些,我相信你看了這篇一定能撥動面試官的心腾降!

希望你們是我最好的觀眾拣度!

https://zhuanlan.zhihu.com/p/334669357

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市螃壤,隨后出現(xiàn)的幾起案子抗果,更是在濱河造成了極大的恐慌,老刑警劉巖奸晴,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冤馏,死亡現(xiàn)場離奇詭異,居然都是意外死亡寄啼,警方通過查閱死者的電腦和手機逮光,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門代箭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涕刚,你說我怎么就攤上這事嗡综。” “怎么了杜漠?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵极景,是天一觀的道長。 經(jīng)常有香客問我驾茴,道長盼樟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任锈至,我火速辦了婚禮晨缴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裹赴。我一直安慰自己喜庞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布棋返。 她就那樣靜靜地躺著,像睡著了一般雷猪。 火紅的嫁衣襯著肌膚如雪睛竣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天求摇,我揣著相機與錄音射沟,去河邊找鬼。 笑死与境,一個胖子當(dāng)著我的面吹牛验夯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摔刁,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挥转,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了共屈?” 一聲冷哼從身側(cè)響起绑谣,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拗引,沒想到半個月后借宵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡矾削,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年壤玫,在試婚紗的時候發(fā)現(xiàn)自己被綠了豁护。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡欲间,死狀恐怖择镇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情括改,我是刑警寧澤腻豌,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站嘱能,受9級特大地震影響吝梅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惹骂,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一苏携、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧对粪,春花似錦右冻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儡遮,卻和暖如春乳蛾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鄙币。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工肃叶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人十嘿。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓因惭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绩衷。 傳聞我的和親對象是個殘疾皇子蹦魔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容