1. 程式人生 > >【ZooKeeper】會話清理

【ZooKeeper】會話清理

在會話機制一文中,我們對會話的超時檢查機制進行了簡單的說明。主要包括:

  • 誰負責進行超時檢查
  • 超時檢查的策略是什麼

最後在超時檢查的”會話清理“過程沒有詳細的說明,那麼本文將對這一過程進行詳細的說明。

涉及到的類

  • SessionTracker.SessionExpirer,一個介面類
  • SessionTrackerImpl中的變數:private final SessionExpirer expirer
  • ZooKeeperServer,是SessionExpirer的實現類

會話清理過程

會話清理的工作主要是由實現類ZooKeeperServer中的expire(Session session)方法來完成的。程式碼如下:

public void expire(Session session) {
    long sessionId = session.getSessionId();
    close(sessionId);
}

可以看出整個會話清理的過程由close方法負責執行,該方法的程式碼為:

private void close(long sessionId) {
        Request si = new Request(null, sessionId, 0, OpCode.closeSession, null, null);
        setLocalSessionFlag(si);
        submitRequest(si);
    }

可以看出,在ZooKeeper中使用的是提交一個請求的方式來進行會話清理工作的。這個請求會經過RequestProcessor(請求處理器)進行處理。

執行流程如下:

  • 找到需要清理的臨時節點。臨時節點的生命週期與會話息息相關,一旦繫結的會話失效,那麼臨時節點也將會被刪除。會話->臨時節點集合,這份資料是維護在ZooKeeper的記憶體資料庫中的。可以根據會話的sessionId獲取到與之相關聯的臨時節點列表。
  • 為每個臨時節點建立一個”節點刪除“的請求,每個請求都是一個事務操作,並且放入到事務變更佇列中去
  • 由RequestProccessor觸發資料庫操作,刪除會話對應的臨時節點
  • 移除會話。主要是從SessionTracker中的sessionsById和sessionsWithTimeout中將會話移除
  • 關閉NIOServerCnxn,從NIOServerCnxnFactory中找到對應的NIOServerCnxn,將其關閉。

在上面的過程2中,獲取一份待刪除的臨時節點的列表sets。這在分散式併發環境下,可能會出現問題。比如在處理會話清理的過程中,出現一下情況:

  • 刪除sets中的一個節點,出現這種請求
  • 建立與該會話相關的節點

上述的兩種請求都是事務操作,事務處理尚未完成,還沒有持久化到資料庫中,因此,在獲取待刪除的臨時節點的時候,就可能會出現不一致的情況。解決辦法:

  • 針對第一種情況,將該節點在sets中移除,避免重複刪除
  • 針對第二種情況,將該節點add到sets中

相關推薦

ZooKeeper會話清理

在會話機制一文中,我們對會話的超時檢查機制進行了簡單的說明。主要包括: 誰負責進行超時檢查 超時檢查的策略是什麼 最後在超時檢查的”會話清理“過程沒有詳細的說明,那麼本文將對這一過程進行詳細的說明。 涉及到的類 SessionTracker

手機管理應用研究3—— 垃圾清理

dma 系統垃圾 存在 分析 獲得 /dev/ 進行 指定 相互 歡迎轉載。轉載請註明:http://blog.csdn.net/zhgxhuaa 說明 在總篇中提到過垃圾清理,本篇將著重介紹針對緩存、卸載殘留、無用數據等“靜態內容”的清理,有關於系統進程的清理以

zookeeper簡單安裝

zookeeper1.安裝java#!/bin/bash # rpm -ivh jdk-8u144-linux-x64.rpm # java -version java version "1.8.0_144"2.安裝zookeeper下載地址 : http://zookeeper.apac

zookeeper集群安裝

zookeeper cluster zoo.cfg 1.解壓(按照簡單安裝操作)2.修改配置文件vim zoo.cfg ----------- # The number of milliseconds of each tick tickTime=2000 # The number of ticks

zookeeperApache curator的使用及zk分布式鎖實現

sets finally tac -- ont zkcli 單節點 基本操作 新建 上篇,本篇主要講Apache開源的curator的使用,有了curator,利用Java對zookeeper的操作變得極度便捷. 其實在學之前我也有個疑慮,我為啥要學curator,撇開漲薪

zookeeperzookeeper的基本命令及通過Java操作zk

接上講,這節主要講一下zookeeper的常用命令和如何使用java操作zk. 首先連線zookeeper 客戶端: #進入zookeeper安裝目錄下bin目錄,啟動zk客戶端 cd /usr/local/zookeeper/bin ./zkCli.sh 然後不知道zk的常用命令?沒

zookeeperApache curator的使用及zk分散式鎖實現

接上篇,本篇主要講Apache開源的curator的使用,有了curator,利用Java對zookeeper的操作變得極度便捷. 其實在學之前我也有個疑慮,我為啥要學curator,撇開漲薪這些外在的東西,就單技術層面來講,學curator能幫我做些什麼?這就不得不從zookeeper說起,上

zookeeperzookeeper介紹及安裝和叢集配置

1.什麼是zookeeper ?     zookeeper 英文直譯是動物管理員,試想下,動物園裡有很多動物,如果沒有動物管理員去做管理的話,各種動物混在一起很可能出現打架問題,疾病,髒,等等一系列問題,這個時候就需要有個主人去把這些動物統一管理起來,zookeeper其實

zookeeperzookeeper 在windows下進行偽叢集

原文:https://www.cnblogs.com/yangzhenlong/p/8270835.html 1.下載zookeeper http://mirror.bit.edu.cn/apache/zookeeper/ 2、解壓後,目錄重新命名為zookeeper1,進入 con

記錄垃圾清理軟體 便攜版CleanMyPC破解版

摘要 使用CleanMyPC保持您的PC清潔並像新的一樣執行。它掃描整個計算機以清理垃圾檔案,加速您的PC並提高其效能。CleanMyPC不僅僅是一臺PC清潔工 - 它是關注計算機的必備工具。【有能力請支援正版 官網:https://macpaw.com/】 一個好的PC清理

zookeeperzookeeper/zookeeper-3.4.13/zookeeper_server.pid: 沒有此檔案目錄 FAILED TO WRITE PID 報錯

出現的問題 今天第一次部署zookeeper的偽分散式,跟著網上大多數的教程走,但仍然遇到了問題。問題如下:其中顯示無法建立目錄/zookeeper,但是本人修改了目錄的許可權仍然不行。 然後再看zookeeper_server.pid沒有那個檔案和目錄。查詢了

ZooKeeper單機偽叢集搭建(適用於mac)

1.配置 可以選擇需要的版本,我下載的是zookeeper-3.4.6.tar.gz,解壓得到資料夾zookeeper-3.4.3 由於手頭機器不足,所以在一臺機器上部署了3個server,如果你手頭也比較緊,也可以這麼做。 在主資料夾下建立一個zoo

zookeeper-單機zookeeper安裝

前言:之前根據資料搭建過zk的叢集(),現在想想很多基礎的設定都不熟悉了,這次針對基礎的在linux環境下單機zk安裝做簡單記錄。主要步驟:一、jdk安裝:這裡不重點闡述,大致步驟如下:下載:下載linux的jdk1.8.0.tar,上傳至linux伺服器解壓: tar -z

zookeeperACL super 超級管理員

zk的許可權管理表有一種ACL的模式叫做super,該模式的作用是方便管理節點。一旦我們為某一個節點設定了acl,那麼其餘的未授權的節點是無法訪問或者操作該節點的,那麼系統用久了以後,假如忘記了某一個節點的密碼,那麼就無法再操作這個節點了,所以需要這個super超級管理員使

Zookeeper——Why should we use zookeeper?

Table of content When we learn something ,we should ask ourselves some questions,such as what is it ? why should we use it ?how

ZooKeeperZooKeeper安裝及簡單操作

centos task spa val jdk8 dir mini dmi 高效 ZooKeeper介紹   ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布

Zookeeper程式設計實戰之Zookeeper分散式鎖實現秒殺

1. Zookeeper簡述    我們要了解一樣技術,首先應該要到它的官網,因為官網的資訊一般都是最準確的,如下圖是Zookeeper官網對它的介紹。    從官網的介紹中,可以總結出,Zookeeper是一個集中式服務,它能夠實現高度可靠的分散式協調,可用於開發和維護開源

ZookeeperLeader選舉機制示例

本文介紹下zookeeper中leader選舉機制的基本用法和關鍵知識點。 一、 選項設定 提到Leader選舉,先需要重點介紹下建立znode時的Flag選項。 ZOO_EPHEMERAL ZOO_EPHEMERAL,用來標記當建立這個znode的節點和Zookeepe

Zookeeper——客戶端簡介

        本篇部落格介紹客戶端,客戶端是開發人員使用Zookeeper最主要的途徑,包括Zookeeper的客戶端和第三方提供的客戶端。 Zookeeper的客戶端 對Zookeeper的客戶端

ZookeeperZookeeper原始碼環境搭建出現的問題

一、ant eclipse 時提示Connection reset    從GitHub下載下來的壓縮包不是eclipse版本的工程,我們需要使用ant eclipse命令編譯成eclipse版本的專案,執行過程提示Connection reset 是編譯檔案build.xm