這個系列共三篇譯文: TiDB 官方設計文檔翻譯(一) TiDB 官方設計文檔翻譯(二) TiDB 官方設計文檔翻譯(三)
原文: https://pingcap.github.io/blog/2016/10/17/how-we-build-tidb/
在本節中,將介紹TiKV和TiDB的架構和核心技術。
關于TiKV架構,讓我們從下往上看。
最底層,RocksDB。上一層,Raft KV,是一個分布式層。MVCC,Multiversion并發控制。 我相信很多人都熟悉MVCC。 TiKV是一個多版本的數據庫。 MVCC使我們能夠支持無鎖讀取和ACID事務。事務層:事務模型的靈感來自Google的Percolator。 它主要是一個優化的兩階段提交協議。 此模型依靠時間戳分配器為每個事務分配單調遞增時間戳,因此可以檢測沖突。 稍后會詳細說明。KV API:它是一組編程接口,并允許開發人員put或get數據。Placement 驅動程序:Placement 驅動程序是非常重要的部分,它有助于實現地理復制,水平伸縮和分布式事務。 它是集群的大腦。關于TiDB架構:
MySQL客戶端:頂層是一系列MySQL客戶端。 這些客戶端向下一層發送請求。 你仍然可以使用任何你已經熟悉的MySQL驅動程序。負載均衡器:這是一個可選層。 如HAPRoxy或LVS。TiDB服務器:它是無狀態的,客戶端可以連接到任何TiDB服務器。 在TiDB服務器中,頂層是MySQL協議,它提供MySQL協議支持; 下一層是SQL優化器,用于將MySQL請求翻譯為TiDB SQL。底層是KV API和分布式SQL API(DistSQL API)。 如果底層存儲引擎支持協處理器,TiDB SQL Layer將使用DistSQL API,這比KV API高效得多。 TiDB支持可插拔存儲引擎。 我們建議TiKV作為默認存儲引擎。讓我們來看看TiKV核心技術。
我們構建TiKV作為分布式鍵值層以存儲數據。
讓我們來看看軟件堆棧。
首先,我們可以看到有一個客戶端連接到TiKV。 我們還有幾個TiKV節點。 在每個節點內,有一個store存儲在物理磁盤。 在每個store里面有很多region。 region是數據移動的基本單位,根據Raft協議進行復制。 每個Region都復制到幾個節點。 Raft Group由一個Region的副本組成。 Region更像是一個邏輯概念,在單個store中,許多Region可能共享相同的Rocksdb實例。
關于Placement Driver,這個概念來自Google Spanner的原始文件。 它提供了整個集群的信息。 它有以下職責:
存儲元數據:客戶端有每個Region的位置信息的緩存。維護復制約束,默認情況下為3個副本。處理數據移動從而實現。 當Placement Driver注意到負載太高時,它將重新平衡數據或使用Raft轉移領導權。感謝Raft,Placement Driver也是一個高可用的集群。
在TiKV中,我們使用Raft進行縮放和復制。 我們有多個Raft組。 工作負載分布在多個region。 在一個大集群中可能有數百萬個region。 一旦region太大,它將被分裂成兩個較小的區域,就像細胞分裂。
下面我將展示橫向擴容的過程。
如上圖所示,我們有4個節點,即節點A,節點B,節點C和節點D。還有3個Region,Region1,Region2和Region3。節點A上有3個Region。
為了平衡數據,需要添加一個新節點,節點E。第一步是將領導權從節點A上的Region1的副本傳輸到節點B上的副本。
第二步,給節點E添加Region1的副本
第三步,從節點A中刪除Region1的副本。
現在數據是平衡的,集群從4個節點擴展到5個節點。
這就是TiKV如何擴容。 讓我們看看它如何處理自動故障轉移。
這些是事務API。 作為一個程序員,我想編寫如下代碼:
txn := store.Begin() // start a transactiontxn.Set([]byte("key1"), []byte("value1"))txn.Set([]byte("key2"), []byte("value2"))err = txn.Commit() // commit transactionif err != nil {txn.Rollback()}說到事務,它主要是一個優化過的兩階段提交協議。 在事務模型中,有3個列族,即cf:lock,cf:write和cf:data。
cf:lock:未提交的事務正在寫此單元格,并包含主鎖的位置/指針。 對于每個事務,我們選擇一個主鎖來指示事務的狀態。cf:write:它存儲數據的提交時間戳cf:data:存儲數據本身讓我們看一個例子:Bob想要給Joe轉7美元。
初始狀態:Joe有2美元,Bob有10美元。下面是事務完成時的樣子
說明 如有轉載,請注明出處 http://blog.csdn.net/antony9118/article/details/60470115
|
新聞熱點
疑難解答