面試連環炮系列(六):Dubbo應用為什么要部署Zookeeper


  1. Dubbo應用為什么要部署Zookeeper?
    Zookeeper用來注冊和發現服務,簡單說就是提供端注冊接口信息到Zookeeper,調用端在Zookeeper上查找接口對應的服務IP和端口。由於Zookeeper集群的高可用性,Dubbo推薦采用Zookeeper作為服務治理的基礎組件。

  2. Zookeeper怎么做到高可用的?
    ZooKeeper集群解決了單點和容災的問題,滿足CAP理論中的CP特性,即一致性和分區容錯性。ZooKeeper集群基於過半設計原則,至少有過半的機器保存了最新的數據,只要超過半數的機器正常工作,整個集群就能夠對外提供服務。集群有leader、follower、observer三種角色,當leader宕機時,follower選舉出新的leader繼續提供服務。

  3. 解釋一下Zookeeper過半原則?
    集群中半數以上的機器處於可用狀態,它就能夠提供服務。例如在一個有5個節點的集群中,每個Follower節點的數據都是Leader節點數據的副本,每個節點的數據視圖都是一樣的。任意2台機器出現故障,都可以保證繼續服務,剩下的3台機器超過了半數。6個節點的集群也只能夠容忍2台機器出現故障,如果3台機器出現故障,剩下的3台沒有超過集群的半數。所以建議集群里搭建奇數個節點。

  4. 那你說說leader的選舉機制

    1. 選舉階段 Leader election
      最大ZXID也就是節點本地的最新事務編號,包含epoch和計數兩部分。epoch是紀元的意思,相當於Raft算法選主時候的term,標識當前leader周期,每次選舉一個新的Leader服務器后,會生成一個新的epoch。
      所有節點處於Looking狀態,各自依次發起投票,投票包含自己的服務器ID和最新事務ID(ZXID)。
      如果發現別人的 ZXID比自己大,也就是數據比自己新,那么就重新發起投票,投票給目前已知最大的 ZXID所屬節點。
      每次投票后,服務器都會統計投票數量,判斷是否有某個節點得到半數以上的投票。如果存在這樣的節點,該節點將會成為准Leader,狀態變為 Leading,其他節點的狀態變為Following。
    2. 發現階段 Discovery
      為了防止某些意外情況,比如因網絡原因在上一階段產生多個Leader的情況。Leader集思廣益,接收所有 Follower發來各自的最新 epoch值。Leader從中選出最大的 epoch,基於此值加1,生成新的 epoch分發給各個 Follower。
      各個 Follower收到全新的epoch后,返回ACK給Leader,帶上各自最大的ZXID和歷史事務日志。 Leader選出最大的ZXID,並更新自身歷史日志。
    3. 同步階段 Synchronization
      Leader剛才收集得到的最新歷史事務日志,同步給集群中所有的Follower。只有當半數Follower同步成功,這個准Leader才能成為正式的Leader。
  5. 什么情況下觸發選舉呢?

    • 集群剛剛啟動的時候
    • 服務器處於尋找Leader狀態
    • 當服務器處於LOOKING狀態時,表示當前沒有Leader,需要進入選舉流程
    • Leader宕機
    • 網絡原因導致過半節點與Leader心跳中斷
  6. Zookeeper有什么缺點?

    • zookeeper的選舉流程通常耗時30到120秒,由於沒有master,選舉期間都是不可用的。
    • zookeeper的性能是有限的,典型的zookeeper的TPS大概是一萬多。
    • zookeeper的權限控制非常薄弱。

參考(部分摘抄的文字版權屬於原作者):

https://www.cnblogs.com/shuaiandjun/p/9383655.html
https://blog.csdn.net/liuhaiabc/article/details/70771322
https://blog.51cto.com/13550113/2318147
https://blog.csdn.net/qqqq0199181/article/details/80865828
https://www.cnblogs.com/AndyAo/p/8299317.html
https://www.jianshu.com/p/57fecbe70540
https://www.jianshu.com/p/26f73fe23b79
https://blog.51cto.com/welcomeweb/2103292?utm_source=oschina-app

毒雞湯:日子一天一天的過去,是不是離夢想更遠了?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM