1 Zookeeper保證CP
當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但不能接受服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。但是zk會出現這樣一種情況,當master節點因為網路故障與其他節點失去聯絡時,剩餘節點會重新進行leader選舉。問題在於,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk叢集都是不可用的,這就導致在選舉期間註冊服務癱瘓。在雲部署的環境下,因網路問題使得zk叢集失去master節點是較大機率會發生的事,雖然服務能夠最終恢復,但是漫長的選舉時間導致的註冊長期不可用是不能容忍的。
zookeeper原理
複製程式碼
zookeeper也可以作為註冊中心,用於服務治理(zookeeper還有其他用途,例如:分散式事務鎖等)
每啟動一個微服務,就會去zk中註冊一個臨時子節點,
例如:5臺訂單服務,4臺商品服務
(5臺訂單服務在zk中的訂單目錄下建立的5個臨時節點)
(4臺商品服務在zk中的商品目錄下建立的4個臨時接點)
(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)
每當有一個新的微服務註冊進來,就會在對應的目錄下建立臨時子節點,並通知訂閱該服務的微服務更新服務列表
每個微服務30s向zk獲取新的服務列表
2 Eureka保證AP
Eureka看明白了這一點,因此在設計時就優先保證可用性。Eureka各個節點都是平等的,幾個節點掛掉不會影響正常節點的工作,剩餘的節點依然可以提供註冊和查詢服務。而Eureka的客戶端在向某個Eureka註冊或時如果發現連線失敗,則會自動切換至其它節點,只要有一臺Eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的資訊可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鐘內超過85%的節點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網路故障,此時會出現以下幾種情況:
1. Eureka不再從註冊列表中移除因為長時間沒收到心跳
1 Zookeeper保證CP
當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但不能接受服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。但是zk會出現這樣一種情況,當master節點因為網路故障與其他節點失去聯絡時,剩餘節點會重新進行leader選舉。問題在於,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk叢集都是不可用的,這就導致在選舉期間註冊服務癱瘓。在雲部署的環境下,因網路問題使得zk叢集失去master節點是較大機率會發生的事,雖然服務能夠最終恢復,但是漫長的選舉時間導致的註冊長期不可用是不能容忍的。
zookeeper原理
複製程式碼
zookeeper也可以作為註冊中心,用於服務治理(zookeeper還有其他用途,例如:分散式事務鎖等)
每啟動一個微服務,就會去zk中註冊一個臨時子節點,
例如:5臺訂單服務,4臺商品服務
(5臺訂單服務在zk中的訂單目錄下建立的5個臨時節點)
(4臺商品服務在zk中的商品目錄下建立的4個臨時接點)
(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)
每當有一個新的微服務註冊進來,就會在對應的目錄下建立臨時子節點,並通知訂閱該服務的微服務更新服務列表
(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)
每個微服務30s向zk獲取新的服務列表
複製程式碼
2 Eureka保證AP
Eureka看明白了這一點,因此在設計時就優先保證可用性。Eureka各個節點都是平等的,幾個節點掛掉不會影響正常節點的工作,剩餘的節點依然可以提供註冊和查詢服務。而Eureka的客戶端在向某個Eureka註冊或時如果發現連線失敗,則會自動切換至其它節點,只要有一臺Eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的資訊可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鐘內超過85%的節點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網路故障,此時會出現以下幾種情況:
1. Eureka不再從註冊列表中移除因為長時間沒收到心跳