請問你知道分布式系統設計模式的分割日誌思想麼?

2021-10-19 09:04:47 字數 1492 閱讀 2118

將大檔案切分為更容易處理的多個更小的檔案。

單一的日誌檔案可能會增長到很大,並且在程式啟動時讀取從而成為效能瓶頸。老的日誌需要定時清理,但是對於乙個大檔案進行清理操作很費勁。

將單一日誌切分為多個,日誌在達到一定大小時,會切換到新檔案繼續寫。

//寫入日誌

public long writeentry(walentry entry)

private void mayberoll()

}

如果日誌做了切分,那麼需要快速以某個日誌位置(或者日誌序列號)定位到某個檔案的機制。可以通過兩種方式實現:

//建立檔名稱

public static string createfilename(long startindex)

//從檔名稱中提取日誌偏移量

public static long getbaseoffsetfromfilename(string filename)

在檔名包含這種資訊之後,讀操作就分為兩步:

給定乙個偏移(或者 transaction id),獲取到大於這個偏移日誌所在檔案

從檔案中讀取所有大於這個偏移的日誌

//給定偏移量,讀取所有日誌

public listreadfrom(long startindex)

//給定偏移量,獲取所有包含大於這個偏移量的日誌檔案

private listgetallsegmentscontainingloggreaterthan(long startindex)

}if (opensegment.getbaseoffset() <= startindex)

return segments;

}

基本所有主流 mq 的儲存,例如 rocketmq,kafka 還有 pulsar 的底層儲存 bookkeeper,都運用了分段日誌。

pulsar儲存實現bookkeeper:

另外,基於一致性協議 paxos 或者 raft 的儲存,一般會採用分段日誌,例如 zookeeper 以及 tidb。

每日一刷,輕鬆提公升技術,斬獲各種offer:

請問你知道分布式系統設計模式的最低水位線思想麼?

最低水位線是指在 wal write ahead log 預寫日誌這種設計模式中,標記在這個位置之前的日誌可以被丟棄。wal write ahead log 預寫日誌維護了對於儲存的每次更新,隨著時間不斷增長,這個日誌檔案會變得無限大。segmented log 分割日誌這種設計模式可以讓我們每次只...

分布式 分布式系統的設計

在計算機領域,當單機效能達到瓶頸時,一般有兩種方式解決效能問題 而分布式系統的設計說白了就是 如何合理將乙個系統拆分成多個子系統部署到不同機器上。講設計方法前,先介紹分布式系統的特性 1 分布性 空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。2 對等性 分布式系統中的計...

分布式系統設計準則

該文章需要整理 2015.3.13修改 分布式系統通常服務大請求 維護著大資料 快速響應 長時間可用。設計分布式後台服務需要考慮的東西很多,本文給出一些常用的設計準則,以備檢視。效能 快速響應 低延遲 可靠性 系統可靠就是同樣的請求返回同樣的資料 更新能夠持久化 資料不會丟失 可管理性 便於運維,整...