原创 分佈式系統的Quorum策略

分佈式系統要做到數據一致性是不同於單點系統的,列入寫入數據,客戶端需要等待直到寫入成功。因此分佈式系統的設計中會運用一些“聰明”的協議、機制用以解決數據一致性、可靠性等問題,Quorum 機制就是其中的一種。 1、分佈式系統中的

原创 Raft算法賞析

1 leader選舉 1.1 剛開始所有server啓動都是follower狀態 然後等待leader或者candidate的RPC請求、或者超時。 上述3種情況處理如下: leader的AppendEntries RPC請求

原创 全局內存分配器:tcmalloc_sys_alloc

[TCMalloc] 全局內存分配器   TCMalloc 的全局分配器,處於 TCMalloc 的最底層,負責向操作系統申請和釋放內存,接口有兩個,定義在 src/system-alloc.h|.cc: extern void*

原创 向操作系統申請內存的兩種方式:brk和mmap

先來熟悉下linux 的虛擬內存管理有幾個關鍵概念:  1、每個進程都有獨立的虛擬地址空間,進程訪問的虛擬地址並不是真正的物理地址;  2、虛擬地址可通過每個進程上的頁表(在每個進程的內核虛擬地址空間)與物理地址進行映射,獲得真正物理

原创 ZooKeeper的一致性算法賞析

1 ZAB介紹 ZAB協議全稱就是ZooKeeper Atomic Broadcast protocol,是ZooKeeper用來實現一致性的算法,分成如下4個階段。 先來解釋下部分名詞 electionEpoch:每執行一次le

原创 GDB調試命令小結

1.啓動調試 前置條件:編譯生成執行碼時帶上 -g,如果使用Makefile,通過給CFLAGS指定-g選項,否則調試時沒有符號信息。gdb program //最常用的用gdb啓動程序,開始調試的方式gdb program core

原创 Raft對比ZAB協議

Raft的實現copycat,由於Raft算法本身已經介紹的相當清晰,copycat基本上和Raft算法保持一致ZAB的實現ZooKeeper,由於ZooKeeper裏面的很多實現細節並沒有在ZAB裏體現(ZAB裏面只是一個大概,沒有像R

原创 leveldb:TableCache以及BlockCache

概述 前面分析了leveldb中cache機制的實現,下面來分析下leveldb基於cache機制實現的兩個不同功能的cache,分別是table cache和block cache。table cache緩存的是sstable的

原创 PageHeap

作用 PageHeap在TCMalloc中主要作用: 作爲Central Cache和操作系統之間的內存緩存,PageHeap對內存的管理是通過Span來管理的,而Central Cache向pageheap申請內存的基本單位就

原创 C++11 右值引用和轉移語義

新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新標準 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它實現了轉移語義 (Move Sementics) 和精確傳遞 (Perfect For

原创 leveldb:write(如何處理併發寫操作)

Put與Delete操作 Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { WriteBatch batch;

原创 leveldb:DB::Open創建一個新數據庫或者打開一個已存在的數據庫

leveldb文件類型 上面的log文件,sst文件,臨時文件,清單文件末尾都帶着序列號,序號是單調遞增的(隨着next_file_number從1開始遞增),以保證不會和之前的文件名重複。另外,注意區分db log與info

原创 MySQL索引原理(b+樹)

MySQL索引原理 ##索引目的 索引的目的在於提高查詢效率,可以類比字典,如果要查“mysql”這個單詞,我們肯定需要定位到m字母,然後從下往下找到y字母,再找到剩下的sql。如果沒有索引,那麼你可能需要把所有單詞看一遍才能找到你想

原创 分佈式系統的數據結構

常用的數據結構包括:數組,隊列,堆棧,鏈表,樹(平衡二叉樹,B樹,Trie樹,堆),哈希表,圖,後綴數組,等等。其中,堆,圖結構,Trie樹及後綴數組解決特定問題,其它數據結構解決通用的查找,更新,刪除操作。 查找,更新和刪除操作一般

原创 分佈式入門:副本控制

按某特定流程控制副本數據的讀寫行爲,使副本滿足一定的可用性及一致性的分佈式協議。 中心化副本控制協議: primary-secondary協議 只有一個副本作爲主副本,其餘都是從副本。主副本作爲中心節點負責數據更新、控制協調一致性。