分布式数据库TiDB是如何结合OLTP和OLAP的?
TiDB是一款開源、云原生、MySQL兼容的分布式數據庫,可以處理混合事務和分析處理(HTAP)工作負載。它是“NEWSQL”關系數據庫的一員,被設計為方便大規模部署。也許有人想知道,“Ti”代表了鈦。
PingCAP在三年半前才開始搭建TiDB,但是這個產品已經擁有了15000次GitHub點贊,200名貢獻者,7200次提交,2000個分支以及300名生產用戶。最近TiDB獲得了InfoWorld Bossie Award 2018數據存儲和分析領域最佳開源項目獎。
在這篇文章中,我將介紹TiDB設計的核心功能和架構,覆蓋數據庫的三個主要用例,并預覽了PingCAP即將推出的多云TiDB即服務和TiDB學術版。
TiDB功能
TiDB的核心功能包括彈性的水平可擴展性,有ACID保證的分布式事務,高可用性以及實時交易數據額分析。讓我們來看一下這些功能背后隱藏的平臺架構。TiDB平臺有以下這些組件:
- TiDB:無狀態SQL層,可以兼容MySQL,用Go語言開發。
- TiKV:分布式事務鍵值存儲,用Rust語言開發。(TiKV最近成為了云原生計算基金會項目)
- TiSpark:Apache Spark插件,連接到TiKV或者專門的柱狀存儲引擎(我們還在研究的部分,請持續關注)。
- Placement Driver(PD):Etcd提供的元數據集群,管理并調度TiKV。
TiKV是基礎層。這是所有數據持久化的地方,自動分成小的塊(我們稱為“區域”),并通過執行Raft一致性協議自動復制并保持強一致。和Placement Driver(PD)一起,TiKV可以復制節點、數據中心和地理位置的數據。它還可以動態地去除形成的熱點,并拆分或合并區域,以提升性能和存儲使用率。我們在TiKV中實現了基于范圍的切片,而不是基于哈希的切片,因為從一開始,我們的目標就是支持全功能的關系型數據庫。因此TiKV也支持不同類型的掃描操作:表掃描、索引掃描等等。
TiDB中的無狀態SQL層用來負責所有的的在線交易處理(OLTP)工作和80%的常規在線分析處理(OLAP)。這樣的設計提升了常規性能(參考我們最新的TPC-H基準測試),這個無狀態SQL層使用TiKV的分布式設計,通過協處理器層將部分查詢下放到不同TiKV節點進行并行處理。
對于更復雜的OLAP工作,比如說訓練機器學習模型的迭代分析或實時業務智能采集,是由第二個無狀態SQL層TiSpark負責的,也是直接從TiKV獲得數據。TiDB兼容MySQL,而TiSpark兼容Spark SQL。
TiDB平臺架構TiDB架構
你可能已經注意到,整個TiDB平臺是模塊化的,所有的組件都有單獨的代碼庫,并且是松耦合的。你可以將整個TiDB平臺部署為一個完整的包(大多數用戶都是這么做的)或是根據你的需要部署其中的一部分。這樣的模塊化的架構給用戶提供了最大的靈活度,并符合云原生架構標準。根據CNCF的官方定義,云原生技術是“有彈性的、可管理的和可觀察的松耦合系統”。
作為TiDB的用戶,你可以擴展你的無狀態SQL服務器或TiSpark層(也就是你的計算資源),或者是單獨擴展TiKV(也就是你的存儲容量),允許你充分利用消耗的大部分資源,更好地滿足你的工作負載。你幾乎可以將TiDB無狀態SQL服務認為是在TiKV之上的微服務,它是持久化數據的有狀態應用程序。這個設計有利于隔離缺陷,更快地滾動升級和維護,而破壞性更小。
TiDB這些優勢的代價是額外的部署和監視復雜性,有更多需要追蹤的部分。然而,隨著Kubernetes的興起以及CoreOS推動的Operator模式,部署和管理TiDB是簡單、直接并且日益自動化的。開源的TiDB Operator for Kubernetes可以幫助你在任何云環境下(公有、私有或混合)部署、擴展、升級和維護TiDB。TiDB默認安裝Prometheus和Grafana,所以可以立即進行監視。(查看我們的TiDB Operator教程)
靈活的技術資產擴展性是業務成功與否的最終關鍵。這就是你會成為下一個Facebook還是下一個Friendster的區別。TiDB模塊化和Kubernetes的加入可以給你的數據庫服務帶來靈活的擴展性。
最后,讓我們來看一下TiDB的三個主要用例:MySQL擴展性、HTAP實時分析和統一數據存儲。
示例Grafana儀表板監視TiDB部署TiDB用例:MySQL擴展性
由于TiDB兼容MySQL,它同時兼容MySQL連接協議和MySQL生態系統工具,比如MyDumper和MyLoader,對于MySQL用戶來說,這是解決問題的自然選擇。我們需要清楚,TiDB并非要取代MySQL,相反,它是MySQL的補充。MySQL仍然是很好的單實例數據庫選擇,所以如果你的數據大小或工作負載不大,那請繼續使用MySQL。但如果你還在頭疼這些問題:
- 考慮如何復制、遷移或擴展數據庫得到更多容量
- 尋找優化現有存儲容量的方法
- 查詢性能慢
- 研究中間件擴展解決方案或實施手動分片策略
那么請開始考慮使用像TiDB這樣的分布式SQL數據庫吧,它可以幫你解決你關心的所有問題。MySQL分片的缺陷讓世界最大的單車共享平臺之一Mobike選擇使用TiDB(閱讀Mobike案例)。Mobike在200個城市擁有9百萬單車,服務于2億名用戶,因此不難想象團隊使用MySQL時候會遇到的擴展瓶頸。Mobike通過在MySQL之外部署TiDB,以及PingCAP的企業級工具套件,包括可以自動將MySQL主機和TiDB集群同步的Syncer,解決了彈性擴展需求。
TiDB和其他MySQL兼容數據庫之間最主要的區別在于TiDB的分布式架構。MySQL技術已經存在了23年了,它從來沒有打算涉足于分布式領域。比如說,不像TiDB,MySQL不能產生查詢計劃,將部分查詢下放到多臺機器中同時進行并行處理。TiDB的SQL解析器、基于成本的優化器和協處理器層從頭開始構建的,利用了分布式數據庫的計算資源和并行性,因此MySQL用戶可以從中獲得更多功能。
TiDB用例:HTAP實時分析
HTAP(混合事務和分析處理)是Gartner在2014年提出的一個術語,描述打破事務和分析數據工作之間隔閡的數據庫架構。目標是給企業實時分析,這樣就可以作出實時決策。其他行業分析公司有描述這個架構的專門術語:451 Research的HOAP(混合操作分析處理),Forrester的Translytical以及IDC的ATP(分析事務處理)。
正如我們討論的,TiDB通過解耦計算層和存儲層,并使用不同的無狀態SQL引擎(TiDB和TiSpark)來做不同的分析任務,打破了OLTP和OLAP之間的隔閡。這兩個引擎都連接到同一個持久數據存儲(TiKV),讓系統自然擁有實時分析和決策的能力。復雜的ETL過程被簡單化,”t+1”延遲不復存在,TiDB中存儲的數據可以更有創造力地進行使用。
服務于5百萬用戶的大型生鮮產品運送平臺Yiguo.com在TiDB之上運行Apache Spark(閱讀Yiguo.com案例)來加速復雜的查詢。通過從SQL Server升級其基礎設施,并通過部署TiDB到其現有的MySQL,Yiguo.com可以高性能地在中國最大的在線購物節雙11運行復雜的連接運算,進行實時決策。
TiDB用例:統一數據存儲
分布式、模塊化、HTAP數據庫TiDB被設計為可以水平地擴展計算和存儲容量,靈活地適應不同的工作負載,同時還是“唯一可信來源”。通過在鍵值存儲之上提供可擴展的SQL服務,TiDB旨在動態地降低基礎設施棧中維護數據管理層的人力和技術成本。
對于世界上最大的食物配送平臺之一Ele.me來說,想要統一數據存儲是采用TiDB和TiKV的關鍵原因之一(閱讀Ele.me的案例)。之前,Ele.me的數據分散在不同的數據庫中,包括MongoDB、MySQL、Cassandra和Redis。最終,這個臨時堆棧不再可用,因為操作和維護成本不斷增加。現在Ele.me 2億6千萬用戶的80%操作在單個TiKV部署下服務。這個TiKV集群跨越了4個數據中心,每個都有100多個節點,存儲了十幾個TB的數據,這些數據總是存在,一直可用。
多云TiDB即服務和TiDB Academy
自PingCAP開始搭建TiDB已經超過了3年,該數據庫在各種情況下都進行了測試。現在,超過300家公司都在使用TiDB滿足他們的OLTP/OLAP、數據庫擴展性、實時分析和統一存儲的需求。然而,TiDB的路線圖上還有許多目標。
其中一個是全面管理的多云TiDB即服務,可以在各種云設置下使用,包括公有、私有和混合。PingCAP正在開發企業級、全托管、基于Kubernetes的TiDB,并將在今年年底發布第一個版本。如果你想要更早地使用,請在這里注冊。
PingCAP開發的另一個項目是TiDB Academy,這是自己制定進度的實踐課程,幫助數據庫管理員、devops以及系統架構師理解TiDB的架構、設計選擇、長處和短板。第一個課程“給MySQL DBA的分布式數據庫TiDB”正在招生。你可以在這里注冊。
如果你想快速了解TiDB,請參閱我們的TiDB快速入門指南。
Kevin Xu (twitter: @kevinsxu)是PingCAP全球策略和運營的總經理,特別負責云產品管理和策略。
查看英文原文:How TiDB combines OLTP and OLAP in a distributed database
總結
以上是生活随笔為你收集整理的分布式数据库TiDB是如何结合OLTP和OLAP的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国联通app怎么销户(目前的中国在世界
- 下一篇: Java 历史