亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

TiKV 源碼解析系列文章(一)序

LeviDing / 1805人閱讀

摘要:而源碼解析系列文章則是會(huì)從源碼層面給大家抽絲剝繭,讓大家知道我們內(nèi)部到底是如何實(shí)現(xiàn)的。我們希望通過(guò)該源碼解析系列,能讓大家對(duì)有一個(gè)更深刻的理解。

作者:唐劉

TiKV 是一個(gè)支持事務(wù)的分布式 Key-Value 數(shù)據(jù)庫(kù),有很多社區(qū)開(kāi)發(fā)者基于 TiKV 來(lái)開(kāi)發(fā)自己的應(yīng)用,譬如 titan、tidis。尤其是在 TiKV 成為 CNCF 的 Sandbox 項(xiàng)目之后,吸引了越來(lái)越多開(kāi)發(fā)者的目光,很多同學(xué)都想?yún)⑴c到 TiKV 的研發(fā)中來(lái)。這時(shí)候,就會(huì)遇到兩個(gè)比較大的攔路虎:

Rust 語(yǔ)言:眾所周知,TiKV 是使用 Rust 語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā)的,而 Rust 語(yǔ)言的學(xué)習(xí)難度相對(duì)較高,有些人認(rèn)為其學(xué)習(xí)曲線大于 C++,所以很多同學(xué)在這一步就直接放棄了。

文檔:最開(kāi)始 TiKV 是作為 HTAP 數(shù)據(jù)庫(kù) TiDB 的一個(gè)底層存儲(chǔ)引擎設(shè)計(jì)并開(kāi)發(fā)出來(lái)的,屬于內(nèi)部系統(tǒng),缺乏詳細(xì)的文檔,以至于同學(xué)們不知道 TiKV 是怎么設(shè)計(jì)的,以及代碼為什么要這么寫(xiě)。

對(duì)于第一個(gè)問(wèn)題,我們內(nèi)部正在制作一系列的 Rust 培訓(xùn)課程,由 Rust 作者以及 Rust 社區(qū)知名的開(kāi)發(fā)者親自操刀,預(yù)計(jì)會(huì)在今年第一季度對(duì)外發(fā)布。希望通過(guò)該課程的學(xué)習(xí),大家能快速入門(mén) Rust,使用 Rust 開(kāi)發(fā)自己的應(yīng)用。

而對(duì)于第二個(gè)問(wèn)題,我們會(huì)啟動(dòng) 《TiKV 源碼解析系列文章》以及 《Deep Dive TiKV 系列文章》計(jì)劃,在《Deep Dive TiKV 系列文章》中,我們會(huì)詳細(xì)介紹與解釋 TiKV 所使用技術(shù)的基本原理,譬如 Raft 協(xié)議的說(shuō)明,以及我們是如何對(duì) Raft 做擴(kuò)展和優(yōu)化的。而 《TiKV 源碼解析系列文章》則是會(huì)從源碼層面給大家抽絲剝繭,讓大家知道我們內(nèi)部到底是如何實(shí)現(xiàn)的。我們希望,通過(guò)這兩個(gè)系列,能讓大家對(duì) TiKV 有更深刻的理解,再加上 Rust 培訓(xùn),能讓大家很好的參與到 TiKV 的開(kāi)發(fā)中來(lái)。

結(jié)構(gòu)

本篇文章是《TiKV 源碼解析系列文章》的序篇,會(huì)簡(jiǎn)單的給大家講一下 TiKV 的基本模塊,讓大家對(duì)這個(gè)系統(tǒng)有一個(gè)整體的了解。

要理解 TiKV,只是了解 https://github.com/tikv/tikv 這一個(gè)項(xiàng)目是遠(yuǎn)遠(yuǎn)不夠的,通常,我們也需要了解很多其他的項(xiàng)目,包括但不限于:

https://github.com/pingcap/raft-rs

https://github.com/pingcap/rust-prometheus

https://github.com/pingcap/rust-rocksdb

https://github.com/pingcap/fail-rs

https://github.com/pingcap/rocksdb

https://github.com/pingcap/grpc-rs

https://github.com/pingcap/pd

在這個(gè)系列里面,我們首先會(huì)從 TiKV 使用的周邊庫(kù)開(kāi)始介紹,然后介紹 TiKV,最后會(huì)介紹 PD。下面簡(jiǎn)單來(lái)說(shuō)下我們的一些介紹計(jì)劃。

Storage Engine

TiKV 現(xiàn)在使用 RocksDB 作為底層數(shù)據(jù)存儲(chǔ)方案。在 pingcap/rust-rocksdb 這個(gè)庫(kù)里面,我們會(huì)簡(jiǎn)單說(shuō)明 Rust 是如何通過(guò) Foreign Function Interface (FFI) 來(lái)跟 C library 進(jìn)行交互,以及我們是如何將 RocksDB 的 C API 封裝好給 Rust 使用的。

另外,在 pingcap/rocksdb 這個(gè)庫(kù)里面,我們會(huì)詳細(xì)的介紹我們自己研發(fā)的 Key-Value 分離引擎 - Titan,同時(shí)也會(huì)讓大家知道如何使用 RocksDB 對(duì)外提供的接口來(lái)構(gòu)建自己的 engine。

Raft

TiKV 使用的是 Raft 一致性協(xié)議。為了保證算法的正確性,我們直接將 etcd 的 Go 實(shí)現(xiàn) port 成了 Rust。在 pingcap/raft-rs,我們會(huì)詳細(xì)介紹 Raft 的選舉,Log 復(fù)制,snapshot 這些基本的功能是如何實(shí)現(xiàn)的。

另外,我們還會(huì)介紹對(duì) Raft 的一些優(yōu)化,譬如 pre-vote,check quorum 機(jī)制,batch 以及 pipeline。

最后,我們會(huì)說(shuō)明如何去使用這個(gè) Raft 庫(kù),這樣大家就能在自己的應(yīng)用里面集成 Raft 了。

gRPC

TiKV 使用的是 gRPC 作為通訊框架,我們直接把 Google C gRPC 庫(kù)封裝在 grpc-rs 這個(gè)庫(kù)里面。我們會(huì)詳細(xì)告訴大家如何去封裝和操作 C gRPC 庫(kù),啟動(dòng)一個(gè) gRPC 服務(wù)。

另外,我們還會(huì)介紹如何使用 Rust 的 futures-rs 來(lái)將異步邏輯變成類似同步的方式來(lái)處理,以及如何通過(guò)解析 protobuf 文件來(lái)生成對(duì)應(yīng)的 API 代碼。

最后,我們會(huì)介紹如何基于該庫(kù)構(gòu)建一個(gè)簡(jiǎn)單的 gRPC 服務(wù)。

Prometheus

TiKV 使用 Prometheus 作為其監(jiān)控系統(tǒng), rust-prometheus 這個(gè)庫(kù)是 Prometheus 的 Rust client。在這個(gè)庫(kù)里面,我們會(huì)介紹如果支持不同的 Prometheus 的數(shù)據(jù)類型(Coutner,Gauge,Historgram)。

另外,我們會(huì)重點(diǎn)介紹我們是如何通過(guò)使用 Rust 的 Macro 來(lái)支持 Prometheus 的 Vector metrics 的。

最后,我們會(huì)介紹如何在自己的項(xiàng)目里面集成 Prometheus client,將自己的 metrics 存到 Prometheus 里面,方便后續(xù)分析。

Fail

Fail 是一個(gè)錯(cuò)誤注入的庫(kù)。通過(guò)這個(gè)庫(kù),我們能很方便的在代碼的某些地方加上 hook,注入錯(cuò)誤,然后在系統(tǒng)運(yùn)行的時(shí)候觸發(fā)相關(guān)的錯(cuò)誤,看系統(tǒng)是否穩(wěn)定。

我們會(huì)詳細(xì)的介紹 Fail 是如何通過(guò) macro 來(lái)注入錯(cuò)誤,會(huì)告訴大家如何添加自己的 hook,以及在外面進(jìn)行觸發(fā)

TiKV

TiKV 是一個(gè)非常復(fù)雜的系統(tǒng),這塊我們會(huì)重點(diǎn)介紹,主要包括:

Raftstore,該模塊里面我們會(huì)介紹 TiKV 如何使用 Raft,如何支持 Multi-Raft。

Storage,該模塊里面我們會(huì)介紹 Multiversion concurrency control (MVCC),基于 Percolator 的分布式事務(wù)的實(shí)現(xiàn),數(shù)據(jù)在 engine 里面的存儲(chǔ)方式,engine 操作相關(guān)的 API 等。

Server,該模塊我們會(huì)介紹 TiKV 的 gRPC API,以及不同函數(shù)執(zhí)行流程。

Coprocessor,該模塊我們會(huì)詳細(xì)介紹 TiKV 是如何處理 TiDB 的下推請(qǐng)求的,如何通過(guò)不同的表達(dá)式進(jìn)行數(shù)據(jù)讀取以及計(jì)算的。

PD,該模塊我們會(huì)介紹 TiKV 是如何跟 PD 進(jìn)行交互的。

Import,該模塊我們會(huì)介紹 TiKV 如何處理大量數(shù)據(jù)的導(dǎo)入,以及如何跟 TiDB 數(shù)據(jù)導(dǎo)入工具 lightning 交互的。

Util,該模塊我們會(huì)介紹一些 TiKV 使用的基本功能庫(kù)。

PD

PD 用來(lái)負(fù)責(zé)整個(gè) TiKV 的調(diào)度,我們會(huì)詳細(xì)的介紹 PD 內(nèi)部是如何使用 etcd 來(lái)進(jìn)行元數(shù)據(jù)存取和高可用支持,也會(huì)介紹 PD 如何跟 TiKV 交互,如何生成全局的 ID 以及 timestamp。

最后,我們會(huì)詳細(xì)的介紹 PD 提供的 scheduler,以及不同的 scheudler 所負(fù)責(zé)的事情,讓大家能通過(guò)配置 scheduler 來(lái)讓系統(tǒng)更加的穩(wěn)定。

小結(jié)

上面簡(jiǎn)單的介紹了源碼解析涉及的模塊,還有一些模塊譬如 https://github.com/tikv/client-rust 仍在開(kāi)發(fā)中,等完成之后我們也會(huì)進(jìn)行源碼解析。

我們希望通過(guò)該源碼解析系列,能讓大家對(duì) TiKV 有一個(gè)更深刻的理解。當(dāng)然,TiKV 的源碼也是一直在不停的演化,我們也會(huì)盡量保證文檔的及時(shí)更新。

最后,歡迎大家參與 TiKV 的開(kāi)發(fā)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17894.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<