偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

微服務架構中的服務注冊與發(fā)現有哪些?Zookeeper、Eureka、Nacos、Consul 都有什么區(qū)別,實現原理是什么?

開發(fā) 架構
今天我們來聊一聊微服務架構中的服務注冊與發(fā)現有哪些?Zookeeper、Eureka、Nacos、Consul都有什么區(qū)別,他們的實現原理是什么?

隨著單體應用的拆分,我們面臨的首要問題就是采用哪種方式實現服務間的調用,像之前單體應用可能直接在配置或數據庫保存調用方的域名 IP 信息等。

但拆分后服務實例信息眾多,且隨著服務動態(tài)擴縮容,服務運行時信息一直變化,那么我們就需引入注冊中心幫助我們解決這類問題了。

今天我們來聊一聊微服務架構中的服務注冊與發(fā)現有哪些?Zookeeper、Eureka、Nacos、Consul都有什么區(qū)別,他們的實現原理是什么?

引入注冊中心后

在微服務架構中,服務注冊與發(fā)現是一個至關重要的功能。它確保了分布式系統(tǒng)中各個微服務之間能夠動態(tài)地相互定位和通信。常見的服務注冊中心有 Eureka、Zookeeper、Consul 和 Nacos

我們來看下實際項目中要如何選擇合適的注冊中心呢?

Eureka

Eureka 是由 Netflix 提供的服務注冊與發(fā)現框架,通常用于大規(guī)模的微服務系統(tǒng)。它的架構分為兩部分:Eureka Server 和 Eureka Client,這是 Eureka 的架構圖。

  • Eureka Server:負責提供注冊中心的服務,所有微服務實例都注冊到 Eureka Server 中,其他微服務通過 Eureka Client 來發(fā)現服務。
  • Eureka Client:微服務實例作為客戶端,定期向 Eureka Server 注冊自己并更新健康狀態(tài)。這里包含了 Application Service(服務提供者)和 Application Client(服務消費者)。

那么,Eureka 是如何保證 AP 的呢?

  • 集群:由上圖可看出 Eureka Server 多個實例之間都是對等的,每個都是其它節(jié)點的副本,是一種去中心化的架構。
  • 心跳:Client 通過發(fā)送心跳到 Server 以維持和更新注冊表中服務實例元數據的有效性。當在一定時長內(默認 90s),Server 沒有收到 Client 的心跳信息,會把服務實例的信息從注冊表中刪除。
  • 自我保護機制:當 Eureka Server 節(jié)點在短時間內丟失過多的心跳時(15 分鐘超過 85%節(jié)點沒有正常返回心跳),那么這個節(jié)點就會進入自我保護模式。

什么是 Eureka 的自我保護機制?

  • Eureka 不再剔除沒有正常返回心跳的服務。
  • Eureka 仍可以接受新服務注冊請求,但是不會同步到其它 Server 節(jié)點。
  • 當網絡恢復穩(wěn)定時,之前新注冊的信息會再次同步到其它節(jié)點上。

所以 Eureka 遵循的是 AP(Availability + Partition tolerance)。它犧牲了數據一致性,尤其是在網絡分區(qū)發(fā)生時。Eureka 實現了 "最終一致性" 的策略,允許系統(tǒng)在出現故障時繼續(xù)提供可用的服務。

Zookeeper

Zookeeper 是如何實現注冊中心的呢?

Zookeeper 的數據模型基于一種叫做 ZNode(Zookeeper 節(jié)點)的概念,在 Zookeeper 中,服務注冊和發(fā)現的核心思想是利用臨時節(jié)點來存儲服務實例的信息。具體過程如下:

  • 創(chuàng)建臨時節(jié)點:當一個服務啟動時,它會向 Zookeeper 注冊自己。通常,服務會在某個目錄(如 /services)下創(chuàng)建一個臨時節(jié)點。每個服務實例會被注冊為一個獨特的臨時節(jié)點。

存儲路徑示例:

/services/payment-service/instance-1
/services/payment-service/instance-2

//payment-service:支付服務名稱
//instance-1:實例唯一標識符,Ip端口信息。
  • watch 機制:Zookeeper 支持客戶端對節(jié)點的監(jiān)視機制(Watch)。當服務上線時,Zookeeper 會通知客戶端,客戶端會更新可用服務列表。當某個服務實例斷開與 Zookeeper 的連接時,Zookeeper 會刪除該臨時節(jié)點,并通知客戶端,客戶端可以去掉失效的服務實例。

ZooKeeper 是基于 CP 來設計的,即任何時刻對 ZooKeeper 的訪問請求能得到一致的數據結果,同時系統(tǒng)對網絡分割具備容錯性,但是它不能保證每次服務請求的可用性。

從實際情況來分析,在使用 ZooKeeper 獲取服務列表時,如果 zookeeper 正在選主,或者 ZooKeeper 集群中半數以上機器不可用,那么將無法獲得數據。所以說,ZooKeeper 不能保證服務可用性。

Nacos

Nacos 的關鍵特性:

  • 服務發(fā)現和服務健康監(jiān)測:Nacos 支持基于 DNS 和基于 RPC 的服務發(fā)現。提供對服務的實時的健康檢查,支持傳輸層(PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。
  • 動態(tài)配置服務:Nacos 支持的動態(tài)配置,提供了配置版本跟蹤、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新狀態(tài)跟蹤在內的一系列開箱即用的配置管理特性。
  • 動態(tài) DNS 服務:Nacos 提供了動態(tài) DNS 服務,支持權重路由,使得中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單 DNS 解析服務。
  • 服務及其元數據管理:Nacos 可以幫助微服務平臺建設的視角管理數據中心的所有服務及元數據。

Nacos 生態(tài)圖

如 Nacos 全景圖所示,Nacos 無縫支持一些主流的開源生態(tài)。

Nacos 作為注冊中心架構圖:

Nacos 作為注冊中心,它是支持戶根據需求選擇 一致性優(yōu)先(CP) 或 可用性優(yōu)先(AP) 模式的。

  • CP 模式:Nacos 集群通過使用 Raft 協議確保一致性,通過 Raft 協議確保集群內的大部分節(jié)點在某一時刻保持一致的數據副保持本。如果發(fā)生網絡分區(qū)時,為了保證數據一致性,Nacos 可能會將某些請求拒絕。
  • AP 模式:Nacos 集群可以容忍部分節(jié)點的失效或者網絡分區(qū),并繼續(xù)提供服務。AP 模式下,Client 會從不同節(jié)點獲取到不同的數據副本,這種模式主要為了提供系統(tǒng)的可用性。

可以通過更改 Nacos 的配置文件 conf/application.properties 切換 AP 或 CP 模式:

nacos.core.protocol.distro.data.sync.mode
Raft表示CP模式,Async表示AP模式

默認情況下,Nacos 會采用 AP 模式,因為大多情況下作為注冊中心,微服務架構更看重它對服務注冊發(fā)現高可用的要求。

Consul

Consul 是 HashiCorp 公司推出的開源工具,Consul 由 Go 語言開發(fā),部署起來非常容易,只需要極少的可執(zhí)行程序和配置文件,具有綠色、輕量級的特點。

Consul 的特點:

  • 服務發(fā)現:Consul 提供了 HTTP 或 DNS 的方式來注冊、發(fā)現服務。
  • 健康檢查:Consul Client 可以提供任意數量的健康檢查,可以根據返回結果比如“200”或者與本地負載(“內存占用是否低于 90%”),來判斷服務是否處于健康狀態(tài)。
  • key/Value 存儲:Consul 數據采用 key/value 結構存儲,非常靈活方便。
  • 安全服務通信:Consul 可以為服務生成和分發(fā) TLS 證書,以建立相互的 TLS 連接。
  • 多數據中心:Consul 天然支持多數據中心。

**Consul 架構圖 **

由上圖可看出,Consul 分為 Client 和 Server 兩種節(jié)點(所有的節(jié)點也被稱為 Agent):

  • Server 節(jié)點保存數據,Server 節(jié)點有一個 Leader 和多個 Follower,Leader 節(jié)點會將數據同步到 Follower,Server 的數量推薦是 3 個或者 5 個,在 Leader 掛掉的時候會啟動選舉機制產生一個新的 Leader。
  • Client 負責健康檢查及轉發(fā)數據請求到 Server。

Consul 采用的 Raft 協議來保證集群內多個節(jié)點的數據一致性,所以是采用的 CP 模式。

最后

最后,我們來看下各注冊中心的對比:


Eureka

Zookeeper

Nacos

Consul

一致性協議

AP

CP

CP、AP

CP

健康檢查

心跳

Keep Alive

TCP/HTTP/MYSQL

TCP/HTTP/gRPC/Cmd

負載均衡策略

Ribbon

--

權重/metadata/Selector

Fabio

訪問協議

HTTP

TCP

HTTP/DNS

HTTP/DNS

多數據中心

支持

不支持

支持

支持

跨注冊中心同步

支持

不支持

支持

支持

SpringCloud 集成

支持

支持

支持

支持

K8S 集成

支持

支持

支持

支持

責任編輯:姜華 來源: 碼哥跳動
相關推薦

2020-06-29 07:58:18

ZooKeeperConsul 注冊中心

2017-06-25 13:33:25

Spring Clou微服務架構

2022-01-16 23:10:40

語言服務注冊

2024-02-19 08:01:59

服務微服務授權

2021-04-20 17:20:59

SpringColud EurekaNetflix開發(fā)

2023-06-02 08:33:43

微服務架構服務注冊

2025-03-31 08:35:00

Eureka微服務架構

2021-01-13 09:27:31

微服務API分布式

2015-12-25 11:00:52

Zookeeper的Python

2021-05-28 06:19:22

ZooKeeperConsulNacos

2023-11-29 16:21:30

Kubernetes服務注冊

2022-02-09 07:03:01

SpringNacos服務注冊

2019-08-23 10:34:05

微服務Eureka架構

2022-02-07 07:10:32

服務注冊功能

2022-01-26 09:36:53

Consul語言微服務

2022-04-26 05:36:42

服務治理模式

2025-01-20 00:10:00

Go語言Kratos

2023-11-27 00:55:43

Eureka服務

2021-04-18 07:33:20

項目Springboot Nacos

2025-04-09 08:15:00

分布式系統(tǒng)微服務架構
點贊
收藏

51CTO技術棧公眾號