Raft之WAL並行性

2021-09-29 19:01:25 字數 961 閱讀 2552

文中思想具有普適性,和raft無關,提到raft主要是考慮到目前raft作為一致性協議的情況比較多,因而就更多的說一下如何和raft結合。

對於熱點一直是難題,雖然有cache層面來緩解熱點,但對於一致性要求高的場景還是需要持久化,較難處理熱點問題,因為熱點有著突發性並且**有著滯後性,也沒辦法通過超細粒度的partition分割做熱點切分,乙個是因為我們總要在時間和空間複雜度上有所控制(考慮meta體量),乙個是有時候也較難**。另外有些partition不太好切分,在邏輯上可能有著親緣性,物理上就盡量要做到locality。partition內並行處理可以提高基礎的處理能力以便應對絕大部分情況下的熱點burst,下面分析下kv儲存模型的並行性。

前面聊了raft之狀態機的並行性,本文聊一聊wal的並行性。

wal之所以誕生我理解有兩個方面的原因:乙個是原子性的需求,由於一條wal日誌是作為乙個原子單元(比如通過checksum進行完整性保證),狀態機的多個變更可以合併到乙個wal日誌條目中實現原子性(中間掛了redo);乙個是效能上的考量,無論是hdd還是ssd,順序寫的吞吐都要高於隨機寫。

基於上面說的,直覺上wal最簡單的設計維護乙個wal檔案,乙個埃乙個緊湊性的寫log entry,同時維護乙個單調遞增的id分配給每乙個log entry方便使用,目前主流的儲存系統基本都是這樣做的。對於kv資料模型,如果不考慮多keys的原子性操作,由於不同keys之間是沒有關係的,那麼完全可以把不同keys的日誌通過hash等方式分散到不同的多個wal檔案之中。對於多keys原子操作的支援,多乙個公共的wal檔案只寫原子操作,另外所有log entries的index共享乙個id generator就能滿足了。如果沒有多keys原子操作,那就更簡單了,所有都分離。

當乙個狀態機所屬的wal並行之後,出現了幾個問題:

原文:

並行性與併發性

verilog語句分為可綜合語句和不可綜合語句,可綜合語句是指語句具有描述組合邏輯和時序邏輯的能力,即為硬體描述語言 不可綜合語句用於對可綜合設計進行 驗證,即搭建testbench等。程式一般指命令處理器執行一系列指令的語句的集合,而硬體描述語言並不是在命令處理器處理指令,其本身描述實際上是乙個數...

併發性和並行性的區別

所有的併發處理都有排隊等候,喚醒,執行至少三個這樣的步驟.所以併發肯定是巨集觀概念,在微觀上他們都是序列被處理的,只不過資源不會在某乙個上被阻塞 一般是通過時間片輪轉 所以在巨集觀上看多個幾乎同時到達的請求同時在被處理。如果是同一時刻到達的請求也會根據優先順序的不同,而先後進入佇列排隊等候執行。併發...

並行性和併發性的區別

前段時間被別人問起關於核心併發性的問題,當時隨便說了一下,但後來細想,我還真不知道什麼是併發性,回想一下當年在學校裡學作業系統這門課程的時候,這兩個概念都是一知半解的,更別說這麼幾年過去了,更加就模糊了。網上搜了一大堆資料,下面來整理一下思路!所謂並行性 parallelism 是指在同一時刻或是同...