好程式設計師Java教程之ZooKeeper面試題梳理彙總

好程式設計師發表於2020-04-21

   好程式設計師 Java 教程 ZooKeeper 面試題梳理彙總 隨著疫情的好轉,各大企業開始以遠端面試的形式進行人才招聘,而Java 行業依舊是需求量最大的人群,但招聘要求卻有很大提高。有學員擔心無法透過企業面試,其實只要你技能過關、表現良好,高薪就不是問題。接下來的 好程式設計師 Java 就業指導小編就給大家分享 ZooKeeper 相關的面試題。

  ZooKeeper 是什麼 ?

  ZooKeeper 是一個開放原始碼的分散式協調服務,它是叢集的管理者,監視著叢集中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

  分散式應用程式可以基於Zookeeper 實現諸如資料釋出 / 訂閱、負載均衡、命名服務、分散式協調 / 通知、叢集管理、 Master 選舉、分散式鎖和分散式佇列等功能。 Zookeeper 保證分散式一致性特性:順序一致性、原子性、單一檢視、可靠性、實時性 ( 最終一致性 )

  ZooKeeper 負載均衡和 nginx 負載均衡區別

  ZooKeeper

  1) 不存在單點問題, zab 機制保證單點故障可重新選舉一個 leader;

  2) 只負責服務的註冊與發現,不負責轉發,減少一次資料交換 ( 消費方與服務方直接通訊 );

  3) 需要自己實現相應的負載均衡演算法。

  nginx

  1)) 存在單點問題,單點負載高資料量大 , 需要透過 KeepAlived+LVS 備機實現高可用 ;

  2) 每次負載,都充當一次中間人轉發角色,增加網路負載量 ( 消費方與服務方間接通訊 );

  3) 自帶負載均衡演算法。

  Zookeeper Watcher 機制 -- 資料變更通知

  Zookeeper 允許客戶端向服務端的某個 Znode 註冊一個 Watcher 監聽,當服務端的一些指定事件觸發了這個 Watcher ,服務端會向指定客戶端傳送一個事件通知來實現分散式的通知功能,然後客戶端根據 Watcher 通知狀態和事件型別做出業務上的改變。

  工作機制:

  客戶端註冊watcher

  服務端處理watcher

  客戶端回撥watcher

  ZooKeeper 是如何保證事務的順序一致性的 ?

  ZooKeeper 採用了全域性遞增的事務 Id 來標識,所有的 proposal( 提議 ) 都在被提出的時候加上了 zxid zxid 實際上是一個 64 位的數字,高 32 位是 epoch( 時期 ; 紀元 ; ; 新時代 ) 用來標識 leader 週期,如果有新的 leader 產生出來, epoch 會自增,低 32 位用來遞增計數。當新產生 proposal 的時候,會依據資料庫的兩階段過程,首先會向其他的 server 發出事務執行請求,如果超過半數的機器都能執行並且能夠成功,那麼就會開始執行。

  Zookeeper 對節點的 watch 監聽通知是永久的嗎 ?

  不是。官方宣告:一個Watch 事件是一個一次性的觸發器,當被設定了 Watch 的資料發生了改變的時候,則伺服器將這個改變傳送給設定了 Watch 的客戶端,以便通知它們。

  為什麼不是永久的,舉個例子,如果服務端變動頻繁,而監聽的客戶端很多情況下,每次變動都要通知到所有的客戶端,給網路和伺服器造成很大壓力。

  一般是客戶端執行getData(“/ 節點 A”,true) ,如果節點 A 發生了變更或刪除,客戶端會得到它的 watch 事件,但是在之後節點 A 又發生了變更,而客戶端又沒有設定 watch 事件,就不再給客戶端傳送。

  在實際應用中,很多情況下,我們的客戶端不需要知道服務端的每一次變動,我只要最新的資料即可。

  ZK 節點當機如何處理 ?

  Zookeeper 本身也是叢集,推薦配置不少於 3 個伺服器。 Zookeeper 自身也要保證當一個節點當機時,其他節點會繼續提供服務。

  如果是一個Follower 當機,還有 2 臺伺服器提供訪問,因為 Zookeeper 上的資料是有多個副本的,資料並不會丟失 ;

  如果是一個Leader 當機, Zookeeper 會選舉出新的 Leader

  ZK 叢集的機制是隻要超過半數的節點正常,叢集就能正常提供服務。只有在 ZK 節點掛得太多,只剩一半或不到一半節點能工作,叢集才失效。

  所以:

  3 個節點的 cluster 可以掛掉 1 個節點 (leader 可以得到 2 >1.5);

  2 個節點的 cluster 就不能掛掉任何 1 個節點了 (leader 可以得到 1 <=1)

  瞭解更多ZooKeeper 面試題,你可以關注 好程式設計師 微信公眾號,定期釋出技術熱點和求職趨勢分析。你也可以來 好程式設計師 Java 培訓班進行系統的學習提升,跟隨大牛講師迅速掌握紮實技術、積累專案經驗 !


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2687209/,如需轉載,請註明出處,否則將追究法律責任。

相關文章