ZooKeeper系統模型之會話清理。
當SessionTracker的會話超時檢查執行緒整理出一些已經過期的會話後,那麼就要開始進行會話清理了。會話清理的步驟大致可以分為以下7步。
標記會話狀態為“已關閉”
由於整個會話清理過程需要一段的時間,因此為了保證在此期間不再處理來自該客戶端的新請求,SessionTracker會首先將該會話的isClosing屬性標記為true。這樣,即使在會話清理期間接收到該客戶端的新請求,也無法繼續處理了。
發起“會話關閉”請求
為了使對該會話的關閉操作在整個服務端叢集中都生效,ZooKeeper使用了提交“會話關閉”請求的方式,並立即交付給PrepRequestProcessor處理器進行處理。
收集需要清理的臨時節點
在ZooKeeper中,一旦某個會話失效後,那麼和該會話相關的臨時(EPHEMERAL)節點都需要被一併清除掉。因此,在清理臨時節點之前,首先需要將伺服器上所有和該會話相關的臨時節點都整理出來。
在ZooKeeper的記憶體資料庫中,為每個會話都單獨儲存了一份由該會話維護的所有臨時節點集合,因此在會話清理階段,只需要根據當前即將關閉的會話的sessionID從記憶體資料庫中獲取到這份臨時節點列表即可。
但是,在實際應用場景中,情況並沒有那麼簡單,有如下的細節需要處理:在ZooKeeper處理會話關閉請求之前,正好有以下兩類請求到達了服務端並正在處理中。
- 節點刪除請求,刪除的目標節點正好是上述臨時節點中的一個。
- 臨時節點建立請求,建立的目標節點正好是上述臨時節點中的一個。
對於這兩類請求,其共同點都是事務處理尚未完成,因此還沒有應用到記憶體資料庫中,所以上述獲取到的臨時節點列表在遇上這兩類事務請求的時候,會存在不一致的情況。
假定我們當前獲取的臨時節點列表是ephemerals,那麼針對第一類請求,我們需要將所有這些請求對應的資料節點路徑從ephemerals中移除以避免重複刪除。針對第二類請求,我們需要將所有這些請求對應的資料節點路徑新增到ephemerals中去,以刪除這些即將會被建立但是尚未儲存到記憶體資料庫中去的臨時節點。
新增“節點刪除”事務變更
完成該會話相關的臨時節點收集後,ZooKeeper會逐個將這些臨時節點轉換成“節點刪除”請求,並放入事務變更佇列outstandingChanges中去。
刪除臨時節點
在上面的步驟中,我們已經收集了所有需要刪除的臨時節點,並建立了對應的“節點刪除”請求,FinalRequestProcessor處理器會觸發記憶體資料庫,刪除該會話對應的所有臨時節點。
移除會話
完成節點刪除後,需要將會話從SessionTracker中移除。主要就是從上面提到的三個資料結構(sessionById、sessionsWithTimeout和sessionSets)中將該會話移除掉。
關閉NIOServerCnxn
最後,從NIOServerCnxnFactory找到該會話對應的NIOServerCnxn,將其關閉。
相關推薦
ZooKeeper系統模型之會話清理。
當SessionTracker的會話超時檢查執行緒整理出一些已經過期的會話後,那麼就要開始進行會話清理了。會話清理的步驟大致可以分為以下7步。 標記會話狀態為“已關閉” 由於整個會話清理過程需要一段的時間,因此為了保證在此期間不再處理來自該客戶端的新請求,
ZooKeeper系統模型之Watcher——資料變更的通知(介面、事件、回撥方法)。
ZooKeeper提供了分散式資料的釋出/訂閱功能。一個典型的釋出/訂閱模型系統定義了一種一對多的訂閱關係,能夠讓多個訂閱者同時監聽某一個主題物件,當這個主題物件自身狀態變化時,會通知所有訂閱者,使他們能夠做出相應的處理。在ZooKeeper中,引入了Wat
Apache-Shiro+Zookeeper系統叢集安全解決方案之會話管理
如今的系統多不是孤軍奮戰,在多結點會話共享管理方面有著各自的解決辦法,比如Session粘連,基於Web容器的各種處理等或者類似本文說的完全接管Web容器的Session管理,只是做法不盡相同。 而本文說的是Apache-Shiro+Zookeeper來解決多結點會話管理,Shiro一個優秀的許可權框架,有
ProxmoxVE 之 系統重灌磁碟清理
上面左邊是我的個人 微 信,如需進一步溝通,請加 微 信。 右邊是我的公眾號“Openstack私有云”,如有興趣,請關注。 上次有一臺物理機裝了PVE,由於當初規劃沒有規劃好
ZooKeeper技術內幕-系統模型
系統模型 資料模型 ZooKeeper檢視機構和標準Unix 檔案系統非常相似,使用了資料節點(ZNode) ZNode是ZooKeeper資料的最小單元 ZNode可以掛在子節點,儲存資料資訊 ZNode層次化,樹結構儲存
zookeeper的使用(五)--系統模型
一、前言 前面已經講解了Zookeeper的一些應用場景,但是並沒有深入到Zookeeper內部進行分析,本篇將講解其系統模型。 二、系統模型 2.1 資料模型 Zookeeper的資料節點稱為ZNode,ZNode是Zookeeper中資料的最小單元,每個ZNode都可
讀《從Paxos到Zookeeper 分散式一致性原理與實踐》筆記之會話
1. Zookeeper技術內幕 1.1. 會話 1.1.1. sessionID生成 4個基本屬性: sessionlD:會話ID,用來唯一標識一個會話,每次客戶端建立新會話的時候,ZooKeeper都會為其分配一個全域性唯一
【ZooKeeper】會話清理
在會話機制一文中,我們對會話的超時檢查機制進行了簡單的說明。主要包括: 誰負責進行超時檢查 超時檢查的策略是什麼 最後在超時檢查的”會話清理“過程沒有詳細的說明,那麼本文將對這一過程進行詳細的說明。 涉及到的類 SessionTracker
ZooKeeper的典型應用場景之Master選舉。
Master選舉是一個分散式系統中非常常見的應用場景。分散式最核心的特性就是能夠將具有獨立計算能力的系統單元部署在不同的機器上,構成一個完整的分散式系統。而與此同時,實際場景中往往也需要在這些分佈在不同機器上的獨立系統單元中選出一個所謂的“老大”,在電腦科學
《常識題題庫系統》,公務員必備,博學廣識之士必備。從程式設計師變成詩人
個人獨立完成的一個小程式。考公務員必備!博學多才的男人必備! 包含4萬6000道常識題,可以隨機篩選出題,定義難度等級,可以新增備註,隱藏某題。 對資料進行加密,儲存學習記錄。 使用C#製作。使用加密演算法對資料加密。 如果有時間。我會繼續更新程式,新增更多功能。 或者移
ZooKeeper的典型應用場景之名稱空間。
命名服務(Name Service)也是分散式系統中比較常見的一類場景,在《Java網路高階程式設計》一書中提到,命名服務是分散式系統最基本的公共服務之一。在分散式系統中,被命名的實體通常可以是叢集中的機器、提供的服務地址或遠端物件等——這些我們都可以統稱他
ZooKeeper系列之二:ZooKeeper資料模型、名稱空間以及節點的概念
ZooKeeper資料模型和層次名稱空間 提供的名稱空間與標準的檔案系統非常相似。一個名稱是由通過斜線分隔開的路徑名序列所組成的。ZooKeeper中的每一個節點是都通過路徑來識別。 下圖是Zookeeper中節點的資料模型,這種樹形結構的名稱空間操作方便且易於理解。
Zookeeper的角色及系統模型(四)
上篇部落格中筆者介紹了《Zookeeper叢集部署與配置》,那麼這篇部落格主要介紹一下在叢集環境中Zookeeper存在的角色及系統模型。 角色 zookeeper主要有以下角色: 角色
帝國cms之自定義系統模型
new 新建 修改字段 file jpg 列表顯示 div 如果 我們 系統模型就是通常所說的系統模塊,如:新聞系統,下載系統,商城系統等。而自定義系統模型就是用戶可以根據需要自由擴展各種系統模塊。 自定義系統模型一般步驟: 1、系統分析; 2、建立數據表; 3
ZooKeeper系統之(四):跟隨者工作模式
當ZooKeeper叢集啟動之後,需要完成leader和follower之間的資料同步。 首先leader和observer有一
容器編排系統K8s之flannel網路模型
前文我們聊到了k8s上webui的安裝和相關使用者授權,回顧請參考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html;今天我們來聊一聊k8s上的網路相關話題; 在說k8s網路之前,我們先來回顧下docker中的網路是怎麼實現的,在docker中,容
linux系統管理之存儲管理
加利福尼亞 software university linux 控制器 存儲管理:這裏我們要學介紹兩種磁盤陣列:磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。一
推薦系統學習之評測指標
又能 根據 ima 商品 .net 一般來說 解釋 image 推薦系統 轉自 http://blog.csdn.net/sinat_33741547/article/details/52704986 最近開始學習推薦系統,特記錄一下學習過程並做個分享。推薦系統是什麽不用多
linux設備驅動模型之平臺總線實踐環節(一)
linux設備驅動模型1、首先回顧下之前寫的驅動和數據在一起的led驅動代碼,代碼如下:#include <linux/module.h> #include <linux/init.h> #include <linux/leds.h> #include <asm/io
系統開發之設計模式
系統開發 系統設計 設計模式 系統設計模式Control plane和data plane別離這兩個概念簡直是networks 101的入門概念。Juniper上世紀末興起的主要原因之一即是嚴厲區別界定control plane和data plane,然後用ASIC完結data plane。Data plan