zookeeper系統模型之setdata請求, 服務端對於setdata請求的處理,大體可以分4大步驟,分別是請求的預處理、事務處理、事務應用和請求響應,如下圖所示。
??????? zookeeper對於每乙個客戶端請求,都會檢查是否是「會話建立」請求。然而對於setdata請求,因為此時已經完成了會話建立,因此按照正常的事務請求進行處理。
??????? 客戶端會話檢查是指檢查該會話是否有效,即是否已經超時。如果該會話已經超過,那麼服務端就會向客戶端丟擲sessionexpiredexception異常。
??????? 面對客戶端請求,zookeeper首先會將其進行反序列化並生成特定的setdatarequest請求。setdatarequest請求中通常包含了資料節點路徑path、更新的資料內容data和期望的資料節點版本version。同時,根據請求中對應的path、zookeeper會生成乙個changerecord記錄,並放入outstandingchanges佇列中。
??????? outstandingchanges佇列中存放了當前zookeeper伺服器正在進行處理的事務請求,以便zookeeper在處理後續請求的過程中需要針對之前的客戶端請求的相關處理。例如對於「會話關閉」請求來說,其需要根據當前正在處理的事務請求來收集需要清理的臨時節點。
??????? 由於當卡年請求是資料更新請求,因此zookeeper需要檢查該客戶端是否具有資料更新的許可權。如果沒有許可權,那麼會丟擲noauthexception異常。
??????? 如果zookeeper服務端發現當前資料內容的版本號與客戶端預期的版本不匹配的話,那麼將會丟擲異常。
??????? 對於事務請求,zookeeper服務端都會發起事務處理流程。無論對於會話建立請求還是setdata請求,或是其他事務請求,事務處理流程都是一致的,都是由proposalrequestprocessor處理器發起,通過sync、proposal和commit三個子流程相互協作完成的。
??????? zookeeper會將請求事務頭和事務體直接交給記憶體資料庫zkdatabase進行事務應用,同時返回processtxnresult物件,包含了資料節點內容更新後的stat。
??????? setdataresponse是乙個資料更新成功後的響應,主要包含了當前資料節點的最新狀態stat。
??????? 響應頭是每個請求響應的基本資訊,方便客戶端對響應進行快速的解析,包括當前響應對應的事務zxid和請求處理是否成功的標識err。
ZooKeeper系統模型之會話清理
zookeeper系統模型之會話清理。當sessiontracker的會話超時檢查執行緒整理出一些已經過期的會話後,那麼就要開始進行會話清理了。會話清理的步驟大致可以分為以下7步。由於整個會話清理過程需要一段的時間,因此為了保證在此期間不再處理來自該客戶端的新請求,sessiontracker會首先...
ZooKeeper系統模型之會話重連
zookeeper系統模型之會話重連,當客戶端和服務端之間的網路連線斷開時,zookeeper客戶端會自動進行反覆的重連,直到最終成功連線上zookeeper集群中的一台機器。在這種情況下,再次連線上服務端的客戶端有可能會處於以下兩種狀態之一。connected 如果在會話超時時間內重新連線上了zo...
ZooKeeper資料模型
zookeeper中可以建立一些節點,每乙個節點都唯一對應著乙個用斜線分割的絕對路徑,可以稱之為節點路徑。並且可以為節點關聯相應的資料。這些節點構成類似於檔案系統的樹形一樣的層次結構。在zookeeper中,沒有使用相對路徑的節點。除了下面幾種情況,任何unicode字元都可以作為節點路徑的一部分 ...