1. 程式人生 > >讀《從Paxos到Zookeeper 分散式一致性原理與實踐》筆記之會話

讀《從Paxos到Zookeeper 分散式一致性原理與實踐》筆記之會話

1.    Zookeeper技術內幕

1.1. 會話

1.1.1.  sessionID生成

        4個基本屬性:

        sessionlD:會話ID,用來唯一標識一個會話,每次客戶端建立新會話的時候,ZooKeeper都會為其分配一個全域性唯一的sessionID。

        TimeOut:會話超時間。客戶端在構造ZooKeeper例項的時候,會配置一個 sessionTimeout引數用於指定會話的超時時間。ZooKeeper客戶端向伺服器傳送這個超時時間後,伺服器會根據自己的超時時間限制最終確定會話的超時時間。

        TickTime:下次會話超時時間點。為了便於ZooKeeper對會話實行“分桶策略”管理,同時也是為了高效低耗地實現會話的超時檢測與清理,ZooKeeper會為每個會話標記一個下次會話超時時間點。TickTime是一個13位的long型資料,其值接近於當前時間加上TimeOut,但不完全相等。

        isClosing:該屬性用於標記一個會話是否已經被關閉。通常當服務端檢測到一個會話巳經超時失效的時候,會將該會話的isClosing屬性標記為“已關閉”,這樣就能確保不再處理來自該會話的新請求了。

        SessionTrackerImpl初始化的時候,會呼叫initializeNextSession方法來生成一個初始化的sessionid。

public static long initializeNextSession(long id) {
    long nextSid;
    nextSid = (Time.currentElapsedTime() << 24) >>> 8;
    nextSid =  nextSid | (id <<56);
    return nextSid;
}

        上面這個方法就是zookeeper初始化sessionid的演算法,答題分為以下5個步驟:

1.   獲取當前時間的毫秒標識。

我們假設System.currentTimeMillis()取出的值是1380895182327,其64位二進位制表示是:

0000000000000000000000010100000110000011110001000100110111110111

其中明影部分表示高24位,下劃線部分表示低40位。

2.   左移24位

將步驟1中的數值左移24位,得到如下二進位制表示的數值:

0100000110000011110001000100110111110111000000000000000000000000

從上面這個數值中,我們可以看到之前的髙24位已經被移出,同時低24位全部使用0進行了補齊。

3.   無符號右移8位

在將步驟2中的數值無符號右移8位,得到如下二進位制表示的數值:

0000000001000001100000111100010001001101111101110000000000000000

從上面這個數值中,我們可以看到,髙位添加了 8個0。

4.   新增機器標識: SID

在initializeNextSession方法中,出現了一個id變數,該變數就是當前 ZooKeeper伺服器的S1D值。該值通常是一個整數,例如1、2或3,這裡我們為了便於表述,假設該值為2。整數2的64位二進位制表示如下:

0000000000000000000000000000000000000000000000000000000000000010

可以發現其高56位都是0,將其左移56位後,可以得到如下二進位制表示的數值:

0000001000000000000000000000000000000000000000000000000000000000

5.   將步驟3和步驟4得到的兩個64位表示的數值進行“丨”操作

0000000001000001100000111100010001001101111101110000000000000000

|

0000001000000000000000000000000000000000000000000000000000000000

可以得到如下數值:

0000001001000001100000111100010001001101111101110000000000000000

        通過以上的步驟,就完成一個sessionid的初始化,因為ID是一個機器編號,比如1、2或3,因此經過上述演算法計算之後,我們就可以得到一個單機唯一的序列號。高位標識所在的機器,後56位使用當前時間的毫秒數標識進行隨機。

        接下來,我們從幾個演算法細節上再來看看sessionid的初始化演算法。

        為什麼是左移24位?

        以上述步驟1中使用的當前時間為例:

0000000000000000000000010100000110000011110001000100110111110111

        左移24位後是:

0100000110000011110001000100110111110111000000000000000000000000

        我們發現左移24位後,將高位的1移除了,剩下的最高位是0,這樣做的目的就是為了防止負數的出現。如果是左移23位之後,是一個負數,再次基礎上即時進行了右移操作,期數值最高位依然是1,因此之後就無法清晰地從sessionid中分辨出SID的值。

1.1.2.  分桶策略

        Zookeeper採用了一種特殊的會話管理方式,稱之為“分桶策略”,是指將類似的會話放在同一區塊中進行管理,以便於zookeeper對會話進行不同區塊的格里處理以及同一區塊的統一處理,


        在上圖中,我們可以看到,ZooKeeper將所有的會話都分配在了不同的區塊之中,分配的原則是每個會話的“下次超時時間點”(ExpirationTime)。ExpirationTime是指該會話最近一次可能超時的時間點,對於一個新建立的會話而言,其會話建立完畢後, ZooKeeper就會為其計算ExpirationTime,計算方式如下:

                ExpirationTime = CurrentTime + SessionTimeout

        其中CurrentTime指當前時間,單位足毫秒:SessionTimeout指該會話設定的超時時間,單位也是亳秒。那麼上圖中座標所標識的時間,是否就是通過上述公式計算出來的呢?答案是否定的,在ZooKeeper的實際實現中,還做了一個處理。ZooKeeper的Leader伺服器在執行期間會定時地進行會話超時檢査,其時間間隔是ExpirationInterval,單位是毫秒,預設值是tickTime的值,即預設情況下,每隔2000毫秒進行一次會話超時檢查。為了方便對多個會話同時進行超時檢査,完整的ExpirationTime的計算方式如下:

                ExpirationTime_ = CurrentTime + SessionTimeout

                ExpirationTime = (ExpirationTime_ /Expirationlnterval +1)*Expirationlnterval

        也就垃說,上圖中橫座標的ExpirationTime值總是ExpirationInterval的整數倍數。舉個實際例子,假設當前時間的毫秒錶示是1370907000000,客戶端會話設定的超時時間是15000毫秒,ZooKecper伺服器設定的tickTime為2000毫秒,那麼ExpirationInterval 的值同樣為為2000亳秒,於是我們可以計算該會話的ExpirationTime值為1370907016000, 計算過程如下:

                ExpirationTime_ = 1370907000000+15000 = 1370907015000

                ExpirationTime =( 1370907015000/2000 + 1) x 2000 = 137090701600

會話啟用

        為了保持客戶端會話的有效性,在ZooKeeper的執行過程中,客廣端會在會話超時時間過期範圍內向服務端傳送PING請求來保持會話的存效性,我們俗稱“心跳檢測”。同時,服務端需要不斷地接收來自客戶端的這個心跳檢測,並且需要重新啟用對應的客戶端會話,我們將這個重新啟用的過程稱為TouchSession。會話啟用的過程,不僅能夠使服務端檢測到對應客戶端的存活性,同時也能讓客戶端自己保持連線狀態。其主要流程如下圖所示。


        重新計算超時時間之後,將改會話從老的區塊中取出,放到新的超時時間對應的新區塊中,


        通過以上的步驟,就基本完成會話啟用的過程。在上面的會話啟用過程中,我們可以看到,只要客戶端發來心跳檢測,那麼服務端就會進行一次會話啟用。心跳檢測由客戶端主動發起,以PING請求的形式向服務端傳送。但實際上,在ZooKeeper服務端的設計中,只要客戶端有請求傳送到服務端,那麼就會觸發一次會話啟用。因此,總的來講,大體會出現以下兩種情況下的會話啟用。

        •只要客戶端向服務端傳送請求,包括讀或寫請求,那麼就會觸發一次會話啟用。

        •如果客戶端發現在sessionTimeout/3時間內尚未和伺服器進行過任何通訊,即沒有向服務端傳送任何請求,那麼就會主動發起一個PING請求,服務端收到該請求 後,就會觸發上述第一種情況下的會話啟用。

會話超時檢查

        在ZooKeeper中,會話超時檢査由SessionTracker負責的。SessionTracker中有一個單獨的執行緒進行會話超時檢査,這裡我們將其稱為“超時檢査執行緒”,其工作機制的核心思路其實非常簡單:逐個依次地對會話桶中剩下的會話進行清理。

        在上圖中,我們可以看到,如果一個會話被啟用,那麼ZooKeeper會將其從上一個會話桶遷移到下一個會話桶中,例如圖中的session這個會話,由於觸發了會話啟用,因此ZooKeeper會將其從expirationTimel捕遷移到expirationTime n桶中去。於是, expirationTime 1中留下的所有會話都是尚未被啟用的。因此,超時檢査執行緒的任務就是定時檢查出這個會話桶中所有剩下的未被遷移的會話。

        那麼超時檢查執行緒是如何做到定時檢查的呢?這裡就和ZooKeeper會話的分桶策略緊密聯絡起來了。在會話分桶策略中,我們將Expirationlnterval的倍數作為時間點來分佈會話,因此,超時檢測執行緒只要在這些指定的時間點上進行檢査即可,這樣既提髙了會話檢査的效率,而且由於是批量清理,因此效能非常好——這也是為什麼ZooKeeper要通過分桶策略來管理客戶端會話的主要的原因。因為在實際生產環境中,一個ZooKeeper叢集的客戶端會話數能會非常多,逐個依次檢杳會話的方式會非常耗費時間。

相關推薦

Paxos到Zookeeper 分散式一致性原理實踐筆記會話

1.    Zookeeper技術內幕 1.1. 會話 1.1.1.  sessionID生成         4個基本屬性:         sessionlD:會話ID,用來唯一標識一個會話,每次客戶端建立新會話的時候,ZooKeeper都會為其分配一個全域性唯一

Paxos到Zookeeper 分散式一致性原理實踐筆記資料儲存

1.1. 資料與儲存 1.1.1.  記憶體資料         資料結構: ZooKeeper的資料模型是一棵樹,而從使用角度看, Zookeeper就像一個記憶體資料庫一樣。在這個記憶體資料庫中,儲存了整棵樹的內容,包括所有的節點路徑、節點資料及其ACL資訊等,Zookeeper會定時將這個資料儲存到

Paxos到Zookeeper分散式一致性原理實踐 讀書筆記(一) 分散式架構

1.1 從集中式到分散式  1 集中式特點  結構簡單,無需考慮對多個節點的部署和節點之間的協作。  2  分散式特點 分不性:在時間可空間上隨意分佈,機器的分佈情況隨時變動 對等性:計算機之間沒有主從之分,所有計算機之間是對等的。副本是分散式系統對資料

PAXOS 到 ZOOKEEPER:分散式一致性原理實踐》讀書筆記[3]——Zookeeper 技術內幕

1 系統模型 1.1 資料模型 Zookeeper 中,每一個數據節點都被稱為一個 ZNode,所有 ZNode 按層次化結構進行組織,節點路徑標識方式和 Unix 檔案系統路徑相似,由一系列使用 / 進行分割的路徑表示,開發人員可以向這個節點中寫入資料,也可以在節點下面建立子節點 Zo

PAXOS 到 ZOOKEEPER:分散式一致性原理實踐》讀書筆記[2]——初識 Zookeeper

1 Zookeeper 概論 Zookeeper 是一個分散式資料管理與協調框架,它是叢集的管理者,監視著叢集中各個節點的狀態根據節點提交的反饋進行下一步合理操作。分散式應用程式可以基於它實現諸如資料釋出/訂閱,負載均衡,命名服務,分散式協調/通知,叢集管理,Master 選舉,分散式鎖和分散式

PAXOS 到 ZOOKEEPER:分散式一致性原理實踐》讀書筆記[1]——一致性協議

1 分散式 1.1 定義 分散式系統是一個硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統 1.2 特點 分佈性、對等性、併發性、缺乏全域性時鐘、故障總是會發生 2 CAP 和 BASE 2.1 CAP CAP 理論:一個分散式系統不可

讀書筆記-【Paxos到ZooKeeper分散式一致性原理實踐】 第七章 Zk技術內幕

系統模型 資料模型 ZNode是ZK中資料的最小單元,每個ZNode上都可以儲存資料,同時還可以掛載子節點,形成一個層次化的名稱空間——樹. 樹 Zk中每個資料節點都稱為ZNode,所有ZNode形成樹形結構。 事務ID 事務是指ZK改變

Paxos到Zookeeper 分散式一致性原理實踐》pdf附網盤下載連結送給還在迷茫的你

技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

Paxos到Zookeeper分散式一致性原理實踐-------------2.一致性協議

1.2PC 2PC就是二段提交協議,簡單來說就是把過程分為兩個階段來處理: 1.提交事務請求       我們假如有A(協調者),B(參與者),C(參與者)三臺伺服器。首先A(協調者)向所有的參與者B和C傳送一個提交事務的請求。然後所有的參與者B和C向A(協

Paxos到Zookeeper分散式一致性原理實踐-------------1.分散式架構

1.分散式的特點 分散式系統是一個硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調系統。 2.分散式系統的特性: 1.分佈性 2.對等性 3.併發性 3.缺乏全域性時鐘 4.故障總會發生 3.分散式環境的各種問題 1.通訊異常

Paxos到zookeeper分散式一致性原理實踐》理解

zookeeper的來由 最大一個特點就是解決分散式一致性問題。簡單講,資料一致性就是指在對一個副本資料進行更新的同時,必須確保也能更新其他副本(其他副本可能在各個不同的伺服器節點),否則不同副本之間的資料將不再一致。那麼解決這樣的一致性問題,大家肯定想到使用鎖,但使用簡單的使用鎖實在太

PAXOS到Zookeeper分散式一致性原理實踐

   本書從分散式一致性的理論出發,向讀者簡要介紹幾種典型的分散式一致性協議,以及解決分散式一致性問題的思路,其中重點講解了Paxos和ZAB協議。同時,本書深入介紹了分散式一致性問題的工業解決方案——ZooKeeper,並著重向讀者展示這一分散式協調框架的使用方法、內部實

【讀書筆記-Paxos到ZooKeeper分散式一致性原理實踐】第二章 一致性協議

2PC與 3PC 在分散式系統中,每個節點都明確知道自己事務操作的成功或失敗,但無法獲取其他分散式節點的操作結果。因此當一個事務需要跨節點進行事務操作時,需要引入協調者(Coordinator)元件來統一排程所有分散式節點的執行邏輯,這些被排程的節點稱為參與者

PAXOS到ZOOKEEPER分散式一致性原理實踐》pdf

第1章分散式架構 1 1.1 從集中式到分散式 1 1.1.1 集中式的特點 2 1.1.2 分散式的特點 2 1.1.3 分散式環境的各種問題 4 1.2 從ACID到CAP/BASE 5 1.2.1 ACID 5 1.2.2 分散式事務 8 1.2.3 CAP和BASE理論 9 小結 15 第2章一致性

Paxos到Zookeeper:分散式一致性原理實踐》【PDF】下載

內容簡介 Paxos到Zookeeper 分散式一致性原理與實踐從分散式一致性的理論出發,向讀者簡要介紹幾種典型的分散式一致性協議,以及解決分散式一致性問題的思路,其中重點講解了Paxos和ZAB協議。同時,本書深入介紹了分散式一致性問題的工業解決方案——ZooKeeper

Zookeeper Kafka (1) : 分散式一致性原理實踐

http://www.jianshu.com/p/fcc28b195fa9 多執行緒的最大副作用: 併發. 如果多個邏輯控制流在時間上發生了重疊, 就會產生併發.邏輯控制流是指一次程式操作. 如讀取或者更新記憶體變數的值.更新的併發性: 多執行緒同時更新記憶體值而產生的併

[Paxos到ZooKeeper][分布式一致性原理實踐]<二>一致性協議

邏輯 計算機 二階段提交 是否 組成 原子性 per 缺點 兩種 Overview 在<一>有介紹到,一個分布式系統的架構設計,往往會在系統的可用性和數據一致性之間進行反復的權衡,於是產生了一系列的一致性協議。 為解決分布式一致性問題,在長期的探索過程中,湧現

Paxos到Zookeeper:分布式一致性原理實踐》【PDF】下載

如何 目錄 可用 思路 服務器 技巧 計算機 讀者 演變 內容簡介 Paxos到Zookeeper分布式一致性原理與實踐從分布式一致性的理論出發,向讀者簡要介紹幾種典型的分布式一致性協議,以及解決分布式一致性問題的思路,其中重點講解了Paxos和ZAB協議。同時,本書深入

沈洵:分散式事務原理實踐單機事務

tips:容易理解的模型效能往往效能不好,效能好的模型往往不容易理解 什麼事事務? 事務看起來很簡單,就三個命令begin transaction,commit,rollback,但是如果沒有對這個的原理了解的話,就不會取捨。 事務的簡介 事務的核心是鎖與併發,同步控制

《密碼編碼學網路安全》原理實踐筆記(一)

第一章: 安全服務有:同等實體i認證、資料來源認證、訪問控制、保密性、流量保密性、資料完整性、不可否認性、可用性 安全機制有:加密、資料簽名、訪問控制、資料完整性、認證交換、流量填充、路由控制、公證 關鍵術語:訪問控制、拒絕服務、被動威脅、主動威脅、加密、重播、認證、完整