【Java面試-分佈式】Consul和Eurka區別

【2019 Java面試】Consul和Eureka區別

1. 前言

Consul 和 Eureka 在微服務架構中都是作爲 服務註冊和服務發現 組件。

在微服務應用中,服務的實例數量和網絡地址都是動態變化的,這對運維提出來了巨大的挑戰,因此動態的服務註冊和服務發現尤爲重要

2. 解決問題

在一個分佈式系統中,服務註冊與發現組件主要解決兩個問題:服務註冊和服務發現。

  • 服務註冊:服務實例將自身服務信息註冊到註冊中心。這部分服務信息包括服務所在主機IP和提供服務的Port,以及暴露服務自身狀態以及訪問協議等信息。

  • 服務發現:服務實例請求註冊中心獲取所依賴服務信息。服務實例通過註冊中心,獲取到註冊到其中的服務實例的信息,通過這些信息去請求它們提供的服務。

除此之外,服務註冊與發現需要關注監控服務實例運行狀態、負載均衡等問題。

  • 監控:微服務應用中,服務處於動態變化的情況,需要一定機制處理無效的服務實例。一般來講,服務實例與註冊中心在註冊後通過心跳的方式維繫聯繫,一旦心跳缺少,對應的服務實例會被註冊中心剔除。
  • 負載均衡:同一服務可能同時存在多個實例,需要正確處理對該服務的負載均衡。

3. 分佈式系統的CAP原理

CAP原則,指的是在一個分佈式系統中,Consistency(一致性)Availability(可用性)Partition Tolerance(分區容錯性),不能同時成立。

  • 一致性:它要求在同一時刻點,分佈式系統中的所有數據備份都處於同一狀態。
  • 可用性:在系統集羣的一部分節點宕機後,系統依然能夠響應用戶的請求。
  • 分區容錯性:在網絡區間通信出現失敗,系統能夠容忍。

一般來講,基於網絡的不穩定性,分佈容錯是不可避免的,所以我們默認CAP中的P總是成立的。

一致性的強制數據統一要求,必然會導致在更新數據時部分節點處於被鎖定狀態,此時不可對外提供服務,影響了服務的可用性,反之亦然。因此一致性和可用性不能同時滿足。

我們接下來介紹的服務註冊和發現組件中,Eureka滿足了其中的 AP(可用性和分區容錯性),Consul和Zookeeper滿足了其中的CP(一致性和分區容錯性)

4. Eureka和Consul的區別

最大的區別是:
Eureka保證AP,Consul保證CP。

Consul強一致性©:
1. 服務註冊相對Eureka會稍慢一些。因爲Consul的raft協議要求必須過半的節點寫入數據成功才認爲註冊成功。
2. Leader 掛掉之後,重新選舉期間,整個Consul不可用,Consul保證一致性的前提下犧牲了可用性。

Eureka保證高可用性和最終一致性:
1. 服務註冊相對較快,因爲不需要等註冊信息 replicate 到其他節點,也不保證註冊信息能否 replicate 成功。
2. 當數據出現不一致的時候,雖然A,B上的註冊信息不一致,但每個 Eureka節點依然能夠正常提供服務,這會出現查詢服務時,如果A查不到,但請求B可以查到。如此保證了可用性但是犧牲了一致性

組件名 語言 CAP 一致性算法 服務健康檢查 對外暴露接口 Spring Cloud集成
Eureka Java AP 可配支持
Consul Go CP Raft 支持 HTTP/DNS 已集成
Zookeeper Java CP Paxos 支持 客戶端 已集成

參考:

服務發現的基本原理與比較:Eureka vs Consul vs Zookeeper

Spring Cloud Eureka Consul使用和對比

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章