1. 程式人生 > 實用技巧 >最火的HTAP資料庫 京東智聯雲新一代分散式資料庫TiDB架構揭祕

最火的HTAP資料庫 京東智聯雲新一代分散式資料庫TiDB架構揭祕

作者丨京東智聯雲資料庫團隊

2020年伊始,一場突如其來的新冠疫情, 席捲了華夏大地。為了抵抗疫情,全國人民眾志成城,共同抗疫。疫情期間,各行各業受到了巨大影響,多數線下服務和活動基本陷入了停滯狀態。而與此同時,人們對線上服務的需求則大大提升。線上業務伴隨著大量的資料湧入,首當其衝經受考驗的就是承載核心業務的資料庫系統。

我們對數百位企業使用者進行了線上調研,發現絕大多數使用者心目中理想的資料庫都具有以下幾個特點:

  • 可通過動態增加機器來滿足業務增長需求,應用層可以不用關心容量和吞吐量等問題;

  • 具有完整的ACID事務,能提供資料的強一致性,支援SQL並能相容MySQL;

  • 提供跨資料中心的高可用性,資料中心內的故障可自動快速恢復,無需人工介入;任意一個數據中心故障,不影響資料庫服務。

為了滿足這些需求,京東智聯雲聯合PingCAP,打造了開箱即用的新一代分散式資料庫——TiDB服務

TiDB是為雲而設計的資料庫,實現了一鍵水平伸縮,支援多資料中心部署,具有強一致性的多副本資料,可實現故障的自動恢復。同時,TiDB還具有強大的OLAP效能,可提供一站式的HTAP解決方案。


TiDB分散式資料庫在核心設計上將整體的架構拆分成多個大的模組,大的模組之間互相通訊,組成完整的TiDB系統。

  • TiDB:SQL層,負責接受客戶端的連線,執行SQL解析和優化,最終生成分散式執行計劃。TiDB 層本身是無狀態的,實踐中可以啟動多個TiDB節點,客戶端的連線可以均勻地分攤在多個TiDB節點上以達到負載均衡的效果。TiDB 節點本身並不儲存資料,只是解析SQL,將實際的資料讀取請求轉發給底層的儲存層TiKV。

  • TiKV:分散式KV儲存,支援完全彈性的擴容和縮容,資料分佈在多個TiKV儲存節點中,系統會動態且自動地進行均衡,不需要人工介入。TiKV的API能夠在KV鍵值對層面提供對分散式事務的原生支援,預設提供了SI (Snapshot Isolation)的隔離級別。TiKV中的資料都會自動維護多副本(預設為 3),天然支援高可用和自動故障轉移。

  • Placement Driver (簡稱 PD):整個TiDB叢集的元資訊管理模組,負責儲存每個 TiKV 節點實時的資料分佈情況和叢集的整體拓撲結構,併為分散式事務分配事務ID。同時PD會根據TiKV節點實時上報的資料分佈狀態,下發資料排程命令給具體的TiKV節點,可以說是整個叢集的「大腦」。PD本身也是由至少3個對等節點構成,擁有高可用的能力。


京東智聯雲上的TiDB基於Kubernetes部署,使得TiDB更加靈活可靠。具體部署架構如下圖:

*(為了便於描述,TiDB的資料庫例項我們稱為TiDB叢集,單個TiDB-server我們稱之為TiDB節點)

使用者VPC內的雲主機通過網路負載均衡(NLB)訪問TiDB叢集,叢集中的多個TiDB節點可以進行負載分擔,共同提供服務,實現了“雙活”乃至“多活”的能力。京東智聯雲TiDB叢集支援3可用區的部署架構,預設3資料副本,每個可用區一個數據副本。即使某一可用區失效後,資料庫服務仍然可用並且不發生資料丟失。同時通過設定親和性,可保證每個可用區的TiKV例項數保持大致均衡。

此外,PD節點預設為3個節點,每一個可用區都有PD例項,保證PD的高可用。在這種架構下,叢集中的所有節點,包括TiDB、TiKV及PD節點都具有高可用性,整個資料庫環節無單點故障,任一節點的故障均不影響TiDB叢集的對外提供服務。

同時,TiDB叢集還接入了京東智聯雲整體的監控告警服務及日誌系統,可全面監控TiDB例項的執行狀況,使用者通過控制檯即可TiDB例項進行建立,擴容、刪除等生命週期的管理。

下面再簡要介紹一下京東智聯雲TiDB叢集的主要能力及實現:

京東智聯雲TiDB可自動進行全量備份,並將備份資料儲存在物件儲存(OSS)中。在備份過程中,TiDB不會直接把資料寫到本地磁碟上,而是先快取在記憶體中,然後再傳送到物件儲存上,通過這種方式不但提高了備份的效率,也降低了對磁碟的消耗。在進行恢復時,也支援將物件儲存上的備份資料恢復到一個新的TiDB叢集裡面,而不覆蓋原TiDB例項,最大程度的保證使用者資料的安全,防止誤操作。

TiDB在京東智聯雲上的升降配是通過線上動態增加節點(或減少節點),來達到擴容的目的。TiDB可提供近似無限的水平擴充套件能力,這是 TiDB 的最大特點。這裡說的水平擴充套件包括兩方面:計算能力儲存能力

  • TiDB節點負責處理SQL請求,隨著業務的增長,可以簡單的新增 TiDB節點,提高整體的處理能力,提供更高的吞吐量。

  • TiKV節點負責儲存資料,隨著資料量的增長,可以部署更多的 TiKV解決資料擴充套件的問題。TiKV節點之間以Region為單位做排程,將部分資料遷移到新加的節點上。

所以在業務的早期,可以只部署少量的服務例項(推薦至少部署3個TiKV, 3個PD,2個TiDB),隨著業務量的增長,按照需求新增TiKV或者TiDB例項。

京東智聯雲TiDB通過TiFlash節點可以支援線上分析功能。TiFlash是TiDB HTAP形態的關鍵元件,它是TiKV的列存擴充套件,TiFlash實時複製TiKV叢集中的資料,並同時提供與TiKV一樣的一致性讀取,且可以保證讀取到最新的資料。TiDB可以自動選擇使用TiFlash列存或者TiKV行存,甚至在同一查詢內混合使用提供最佳查詢速度。

TiDB叢集支援CSV格式的資料檔案高速匯入到TiDB叢集,匯入速度每小時可達500G,是傳統SQL匯入速度的數倍。TiDB使用物件儲存(OSS)儲存要匯入的資料檔案,首先會對資料來源進行解析,篩選出DDL這些建表的語句,並在目標叢集建立庫和表;然後對錶資料進行解析和編碼,轉換成與 TiDB相同編碼的鍵值對,並對鍵值對排序,寫入本地臨時儲存檔案中。最後批量將這些鍵值對寫到各個TiKV節點中。匯入後,TiDB會對比匯入資料來源及目標叢集的校驗和 (checksum),確保匯入的資料是正確的。

京東智聯雲TiDB可支援主從叢集,可通過binlog進行資料同步,準實時的將主叢集的資料同步到從叢集(本地或異地)。主叢集負責應用接入提供讀寫服務,從叢集負責同步主叢集資料以及故障接管。同時從叢集還可以承載如資料查詢,報表分析等資料查詢業務,分擔主叢集業務壓力,提高資源利用率的影響。(該功能即將推出)

TiDB具有完善的監控和告警功能。TiDB的報警分為兩類:

  • 一是資源層面的報警,由Task Monitor元件監控資料庫中資源狀態和使用情況,例如CPU,儲存以及叢集中各個節點的執行狀態等。如果發現資源狀態或使用異常則會產生告警,並通過郵件或簡訊方式進行通知。

  • 另一類報警是通過日誌採集K8S叢集中POD和TiDB叢集中的節點的日誌,通過配置報警規則過濾對應的關鍵字觸發報警。

此外,TiDB叢集自身也提供了極其豐富的監控指標,使用者可以直接使用瀏覽器訪問TiDB叢集的監控埠,檢視TiDB上百個指標的詳細資訊。


  • 高併發、海量資料的OLTP系統

由於TiDB可提供無上限的、線性擴充套件的高併發、高吞吐的叢集處理能力,因此可簡單地把TiDB當作一個可無限擴充套件的MySQL使用,可極大的簡化程式設計,降低運維複雜度,是傳統資料庫中介軟體、資料庫分庫分表等方案優雅而理想的替換產品。

  • 海量資料高效能實時分析

TiDB可以提供可擴充套件的、無上限的實時寫入能力,同時,TiDB獨有的強大分散式查詢引擎可提供比MySQL快1~2個數量級的複雜查詢效能,使用者可將TiDB用於各種實時分析場景。

目前,京東智聯雲和PingCAP公司深度合作推出的TiDB產品已正式釋出,歡迎大家點選【閱讀原文】來體驗雲時代的新一代分散式資料庫。