一致性协议raft详解(四):raft在工程实践中的优化
生活随笔
收集整理的這篇文章主要介紹了
一致性协议raft详解(四):raft在工程实践中的优化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一致性協(xié)議raft詳解(四):raft在工程實踐中的優(yōu)化
- 前言
- 性能優(yōu)化
- client對raft集群的讀寫
- 參考鏈接
前言
有關(guān)一致性協(xié)議的資料網(wǎng)上有很多,當(dāng)然錯誤也有很多。筆者在學(xué)習(xí)的過程中走了不少彎路。現(xiàn)在回過頭來看,最好的學(xué)習(xí)資料就是Leslie Lamport和Diego Ongaro的數(shù)篇論文、Ongaro在youtube上發(fā)的三個視頻講解,以及何登成的ppt。
本系列文章是只是筆者在學(xué)習(xí)一致性協(xié)議過程中的摘抄和總結(jié),有疏漏之處敬請諒解,歡迎討論。
性能優(yōu)化
- TiKV 源碼解析系列 - Raft 的優(yōu)化
- 條分縷析 Raft 算法(續(xù)):日志壓縮和性能優(yōu)化
性能優(yōu)化主要有以下幾點:
- Batch:Leader 可以一次收集多個客戶端 requests,然后一批發(fā)送給 Follower。當(dāng)然,我們也需要有一個最大發(fā)送 size 來限制每次最多可以發(fā)送多少數(shù)據(jù),LogCabin 使用 1M 大小。
- Pipeline:如果只是用 batch,Leader 還是需要等待 Follower 返回才能繼續(xù)后面的流程,我們這里還可以使用 Pipeline 來進行加速。Leader 會維護一個 nextIndex 的變量來表示下一個給 Follower 發(fā)送的 log 位置,通常情況下,只要 Leader 跟 Follower 建立起了連接,我們都會認為網(wǎng)絡(luò)是穩(wěn)定互通的。所以當(dāng) Leader 給 Follower 發(fā)送了一批 log 之后,它可以直接更新 nextIndex,并且立刻發(fā)送后面的 log,不需要等待 Follower 的返回。如果網(wǎng)絡(luò)出現(xiàn)了錯誤,或者 Follower 返回一些錯誤,Leader 就重新調(diào)整 nextIndex,然后重新發(fā)送 log。
- 最初的線程架構(gòu)阻礙了 pipeline,因為它只能支持每個 Follower 一個 RPC。這里 Leader 必須多線程地與一個 Follower 建立多個連接。
- 如果 Leader 與一個 Follower 共用一個連接使用 pipeline 的話, 那么效果會是怎樣的呢?其實這樣和 Batch 沒有多大區(qū)別,tcp 層面已經(jīng)是串行的了,tcp 有滑動窗口來做 batch,同時單條連接保證了消息很少會亂序。
- 那么,如果使用多線程連接的話可能存在什么問題?即使因為在多個連接中不能保證有序,但是大部分情況還是先發(fā)送的先到達;即使后發(fā)送的先到達了,由于有 AppendEntries RPC 一致性檢查的存在,后發(fā)送的自然會失敗,失敗后重試即可。
Raft 系統(tǒng)的整體性能在很大程度上取決于如何安排 batch 和 pipeline。如果在高負載的情況下,一個 batch 中積累的請求數(shù)量不夠,整體處理效率就會很低,導(dǎo)致低吞吐量和高延遲。另一方面,如果在一個 batch 中積累了太多的請求,延遲將不必要地變高,因為早期的請求要等待后來的請求到達。
client對raft集群的讀寫
經(jīng)過之前內(nèi)容的闡述,我們已經(jīng)明白了why what how raft,以及各種優(yōu)化。現(xiàn)在讓我們再回到一個最基本的問題上:一個客戶端如何對raft集群進行讀取寫?
- 由于raft協(xié)議的特性,寫請求必須由leader發(fā)起,由leader負責(zé)向整個raft集群寫入,寫成功后返回,
- 只要對該請求執(zhí)行raft協(xié)議成功,那么必然能提供各種保證
- 最簡單可以通過Quorum方式讀
- raft因為有l(wèi)eader,可以從leader上去讀,但是為了防止網(wǎng)絡(luò)分區(qū)導(dǎo)致的假leader對raft一致性的破壞,可以用以下方式優(yōu)化:
- 對讀請求也執(zhí)行raft協(xié)議,會有額外的overhead
- leader通過之前講到的某種優(yōu)化方法,確認自己是真正的leader之后,才提供讀寫請求服務(wù)。
參考鏈接
總結(jié)
以上是生活随笔為你收集整理的一致性协议raft详解(四):raft在工程实践中的优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一致性协议raft详解(三):raft中
- 下一篇: zookeeper客户端库curator