五、Nacos集群部署實現原理


前言

本文是根據螞蟻課堂余勝軍老師的課程所做筆記,記錄的要點,部分自己的理解可能有所偏差,不當之處會進行修改。

CAP原則

CPA即一致性(Consistency)、可用性(Availability)、分區容錯性(Partition tolerance)。CAP三個要素不可能全部實現,最多實現兩個。一般的實際都是基於AP和CP。

而Nacos支持CP/AP兩個模式和混合模式,可以進行切換,默認為AP。

Eureka與Zookeeper的區別

都是分布式服務注冊中心。

zookeeper采用CP保證數據一致性,原理采用Zab原子廣播協議,當zk集群的leader宕機后,會自動重新選擇一個新的領導角色,在選舉過程中,zk環境不可使用。zk可運行的節點必須過半才能使用。

Eureka采用AP設計,完全去中心化。各個節點之間相互注冊,只要有一個節點,整個微服務就可以通訊。

Eureka與Nacos的區別

Eureka采用AP模式

Nacos采用AP+CP模式混合實現,默認為AP。

Eureka底層實現集群協議是去中心化對等,Nacos使用Raft協議會產生領導角色。

分布式系統一致性算法

分布式系統一致性算法是用來保證集群節點的數據一致性的問題。

有raft(nacos)、zab(zookeeper)、paxos等。

Zab協議集群模式原理

Zab是中心化思想的集群模式,zookeeper采用的便是此協議。

zookeeper為了保持數據一致性,需要滿足大多數情況,即多數節點可用時集群才能工作,>n/2+1個節點可用。

在zookeeper集群中有領導者和跟隨者,對每個結點有比較其能力的myid值,根據能力值的大小選擇出領導者。不過一旦啟動的可用節點過半后選擇出了領導者后,就不會再選舉領導者了,除非當前領導者宕機。

Zab數據一致性

所有的寫請求統一交給領導角色實現,領導角色寫完數據之后,領導角色再將數據同步給每個節點。

數據同步采用2pc兩階段提交協議

如上圖,先去比較zxid的大小,將zxid大的作為領導角色。如果zxid相同,則比較myid,myid大的作為領導者。

每次寫入數據時,領導角色會攜帶上自己zxid去詢問跟隨者,若有過半的跟隨者回應,則進行寫入操作,並將領導者的zxid寫給同步的跟隨者。

Raft協議選舉實現原理

Raft協議中有三種狀態:跟隨者、競選者、領導者。

默認情況下每個節點都是跟隨者,每個節點會隨機生成一個選舉的超時時間,在這個超時的時間范圍類節點必須要等待。

超時時間過后,當前結點有跟隨者變為競選者,會給其他發出選舉的投票通知,只要該競選者有超過半數以上即可成為領導者。

超時時間短的成為領導者的可能大。

Raft隨機數一樣的處理方式

  1. 如果所有節點的超時隨機數都是一樣的情況下,當前投票全部作廢,重新生成超時時間。
  2. 如果多個節點生成的隨機數一樣,得票高的為領導者。如果票數完全一樣,直接作廢。

集群節點建議為奇數。

Raft故障重新選舉

如果跟隨者節點不能及時收到領導角色的消息,那么跟隨者就會變為競選者,給其他節點發送選舉投票通知,有過半票數則稱為領導者。

Raft采用日志復制形式同步數據

  1. 所有的寫請求都交給領導者,將請求操作寫入日志,標記該狀態為未提交狀態。
  2. 為了提交該日志,領導者就會將日志以心跳形式發送給其他跟隨者,只要滿足過半的跟隨者可以寫入該數據,則直接通知其他節點同步該數據,這個過程稱為日志復制。


免責聲明!

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



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