zookeeper是乙個開源的分布式應用程式協調伺服器,主要功能包括配置維護,網域名稱服務,分布式同步,集群管理等
分布式系統中,很多服務都是部署在集群中的,就是多型伺服器中部署著完全相同的應用,他們的配置檔案也是必須相同的,下面有乙個場景,就是當我們想要修改乙個配置檔案時,如果我們通過手動修改參與集群的所有機器上的應用配置檔案時不僅麻煩而且極其容易出錯,zookeeper對配置檔案的維護採用的事"發布 / 訂閱模型",發布者將修改號的集群的配置檔案傳送到zookeeper伺服器的檔案系統中,那麼訂閱者馬上就會收到通知,並主動去同步zookeeper裡的配置檔案,zookeeper具有同步操作的原值性,確保參與集群的機器說讀取的配置檔案都能被正確的更新
現在的專案都是包含多個工程這種款式的,而有些工程就是專門為其他工程提供服務的,乙個專案中就會存在很多這種想其他工程提供服務的工程,而乙個服務又可能存在多個提供者,服務的消費者消費起來就比較複雜,zookeeper為每乙個服務起了乙個名稱,將這些名稱和對應提供服務的主機位址註冊到zookeeper中,形成乙個服務對映表,服務消費者通過服務名稱即可消費服務,服務的減少,新增,變更,只需修改zookeeper中的服務對映表即可阿里的dubbo就是使用的zookeeper作為服務網域名稱伺服器的
在分布式系統中,很多運算過程都是有分布式集群中若干伺服器共同計算完成的,並且他們之間的運算還具有邏輯上的先後順序,zookeeper就可以協調這些服務間運算的過程,讓這些服務都同時監聽zookeeper上的同乙個znode,一旦起重工乙個伺服器的znode發生了改變,另乙個相應伺服器就能夠收到通知,並作出相應處理比如上面這張邏輯圖,zookeeper可以協調他們三個的先後順序
集群中最麻煩即使節點故障管理,zookeeper會讓集群選出乙個節點作為master,監控所有的節點的健康狀況,乙個有節點故障,就會通知其他的節點,使集群中的其他節點對於任務的分配作出相應的調整,zookeeper除了發現故障外,還具有對故障進行甄別的功能,如果故障節點是可以修復的,zookeeper可以修復它,如果不能修復則會告訴系統管理元錯誤的原因讓管理員定位故障點,順序一致性:至於master故障的話,zookeeper內有選舉演算法,選取新的節點擔任master的職責對集群進行管理
原子性:
單一檢視:
可靠性:
實時性:
session是指客戶端會話,zookeeper對外的服務埠預設為2181,客戶端啟動時,首先會與zk伺服器建立乙個tcp長連線,從第一次連線建立開始,客戶端會話的生命週期也開始了,通過這個長連線,客戶端能夠通過心跳檢測保持與伺服器的有效回話,也能夠想zk伺服器發起請求並接受響應,同時還能通過該連線接受來自伺服器的watcher時間通知session的sessiontimeout值用來設定乙個客戶端會話的超時時間,當由於伺服器壓力過大、網路延遲、客戶端主動斷開連線等各種原因導致的福護短連線斷開時,只要在sessiontimeout規定的有效時間內重新連線上集群中的任意乙個伺服器,那麼之前建立的會話仍然有效
zk的檔案系統採用屬性層次化的目錄結構,每個目錄都在zk中都叫做乙個znode,每個znode都擁有乙個唯一的路徑標識,znode可以包含資料和子znode(零時節點不能有子znode),znode中的資料可以有多個版本,所以查詢某路徑下的資料需要帶上版本號,客戶端應用可以在znode上設定監視器(watcher)
zk通過watcher機制實現發布訂閱模式,zk提供了分布式資料的發布訂閱功能,乙個發布者能夠讓多個訂閱者同時監聽某乙個主題物件,當這個主題物件狀態發生改變是,會通知所有訂閱者,是他們能夠作出相應的處理,zk允許哭護短想伺服器註冊乙個watcher監聽,當服務端的一些指定事件觸發這個watcher時,那麼就會向指定的客戶端傳送乙個事件通知,而這個事件通知則是通過tcp長連線的session完成的
acl全稱為access control list,用於控制資源的訪問許可權,是zk資料安全的保障,zk利用acl策略控制znode節點的訪問許可權,如果節點建立,節點資料讀寫,節點刪除,讀取子節點列表,設定節點許可權等在傳統的檔案系統中,acl分為兩個維度,組與許可權,乙個組可以包含多個許可權,乙個檔案或者目錄擁有了某個租的許可權即又有了組裡所有的許可權,檔案或子目錄缺省會繼承父目錄的acl
在zk中,znode的acl是沒有繼承關係的,每乙個znode的許可權都是獨立控制的,只有哭護短滿足znode設定的許可權要求時,才能完成相應的操作,zk的acl分為三個維度,分別為: 授權策略scheme、使用者id、使用者許可權permission。
判斷兩個節點是否是表兄弟
注意啦,是 表兄弟 不是乙個爸爸的那種哦!由於我比較笨,我想不出來乙個用前序遍歷或者後序遍歷的做法。好不容易才想到了,用層序遍歷。但是有很多細節很囉嗦!顯然,我們在同一層中,要是找到了指定的兩個值,只要這兩個值不是親兄弟,那麼就可以return true了。之前沒有這樣子寫過層序遍歷,哎,還是我太水...
Zookeeper和Eureka的區別!
著名的cap理論指出,乙個分布式系統不可能同時滿足c 一致性 a 可用性 和p 分割槽容錯性 由於分割槽容錯性p在分布式系統中必須要保證的,因此我們只能在a和c之間進行權衡。因此 zookeeper保證的是cp,eureka則是ap。zoopkeeper保證cp 當向註冊中心查詢服務列表時,我們可以...
Zookeeper 與 eureka的區別
1.cap定理 從圖中我們可以看到,zk為cp,erreka為ap 2.可用性.zk主從設計,如果zk節點有一半吧節點宕機或者有節點正在選舉,此時zk集群不可用.eureka,p2p點對點設計,每個點的資訊都可以使用者接入,每個點如果資訊變化,它內部會自動同步所有資料,eureka即使所有節點都宕機...