微服務架構:注冊中心 Eureka、ZooKeeper、Consul、Nacos的選型對比詳解

??微服務架構(Microservices Architecture)是一種基于服務拆分的分布式架構模式,旨在將復雜的單體應用程序拆分為一組更小、更獨立的服務單元。這些服務單元可以獨立開發、測試、部署,并使用不同的技術棧和編程語言。它們通過輕量級通信機制(如HTTP/REST、消息隊列等)相互協作,從而構建出一個靈活、可擴展的系統。

??本文將針對微服務架構中,幾種常見的注冊中心 Eureka、ZooKeeper、Consul、Nacos的選型進行對比詳解。

一、什么是注冊中心?

??注冊中心(Service Registry)是微服務架構中的核心組件之一,主要用于服務的管理和發現。在微服務架構中,服務注冊中心是一個中央存儲庫,用于存儲服務實例的注冊信息,包括服務的地址、端口、名稱、版本號等元數據信息。服務注冊中心的主要功能包括:

1.服務注冊:服務提供者(Provider)在啟動時,會將自己的元數據信息注冊到服務注冊中心。這樣,服務消費者(Consumer)就可以通過服務注冊中心來查找和調用所需的服務。

2.服務發現:服務消費者通過服務注冊中心提供的接口或API,可以查詢并獲取到所需服務的地址和元數據信息,從而進行遠程調用。

3.負載均衡:服務注冊中心可以根據一定的策略(如隨機、輪詢、最少活躍調用數等),將服務消費者的請求分發到合適的服務提供者上,以實現負載均衡,提高系統的可用性和性能。

4.健康檢查:服務注冊中心會定期或實時地檢查服務提供者的健康狀態,如服務是否可用、響應是否及時等。如果服務提供者出現故障或異常,服務注冊中心會將其從服務列表中剔除,以保證服務調用的可靠性。

5.服務治理:服務注冊中心還可以提供一系列的服務治理功能,如服務路由、限流降級、熔斷等,以實現對微服務架構的精細化管理和控制。

??常見的服務注冊中心實現有Eureka、ZooKeeper、Consul、Nacos等。這些工具各有特點,可以根據具體需求進行選擇和配置。在選擇服務注冊中心時,需要考慮其穩定性、可擴展性、易用性、安全性等因素。

在這里插入圖片描述

??再說Eureka、ZooKeeper、Consul、Nacos之前,我們先了解一下分布式架構中重要理論CAP理論是什么。

二、CAP理論

??CAP理論是指在分布式系統中,一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)三個核心特性無法同時成立的理論。該理論由Eric Brewer提出,主要用于指導分布式系統中數據一致性模型的設計和實現。

具體來說,CAP理論中的三個特性定義如下:

1.一致性(Consistency):在分布式系統中,所有節點看到的數據都是相同的,即系統的狀態在任何時刻都是一致的。這要求系統在對數據進行更新后,能夠確保所有節點中的數據都保持一致。

2.可用性(Availability):系統必須在任何時候都能夠響應客戶端請求。這要求系統能夠在規定的時間內對客戶端的請求進行響應,不會出現無法訪問或響應時間過長的情況。

3.分區容錯性(Partition Tolerance):系統必須能夠容忍分布式系統中的某些節點或網絡分區出現故障或延遲。這要求系統能夠在出現網絡分區或節點故障時,仍然能夠繼續提供服務并保持數據的一致性。

??在CAP理論中,由于網絡分區和節點故障是不可避免的,因此分布式系統最多只能同時滿足其中的兩個特性。具體來說,系統可以選擇滿足CA(一致性和可用性)或CP(一致性和分區容錯性)或AP(可用性和分區容錯性)中的任意兩個特性。不同的選擇會對應不同的系統設計和實現方式,以滿足不同的業務需求和應用場景。

CAP 不可能都取,只能取其中2個的原因如下:
1.如果C是第一需求的話,那么會影響A的性能,因為要數據同步,不然請求結果會有差異,但是數據同步會消耗時間,期間可用性就會降低。

2.如果A是第一需求,那么只要有一個服務在,就能正常接受請求,但是對于返回結果變不能保證,原因是,在分布式部署的時候,數據一致的過程不可能想切線路那么快。

3.再如果,同時滿足一致性和可用性,那么分區容錯就很難保證了,也就是單點,也是分布式的基本核心。

??需要注意的是,CAP理論并不是要求系統必須嚴格滿足其中的兩個特性,而是提供了一種權衡和選擇的思路。在實際應用中,系統可以根據具體的業務需求和場景來選擇合適的特性組合,并在實現過程中進行一定的折衷和優化。

三、Eureka、ZooKeeper、Consul、Nacos原理說明以及優缺點分析。

1. ZooKeeper:

??ZooKeeper是一個分布式的、開放源碼的分布式應用程序協調服務,是Google的Chubby的一個開源實現,并且是Hadoop和Hbase等分布式系統的重要組件。

CAP理論保證:ZooKeeper注重CP(一致性與容錯性),但在選舉期間若注冊服務癱瘓,雖然服務最終會恢復,但選舉期間是不可用的。

健康檢查:ZooKeeper使用TCP的KeepAlive保持客戶端和服務端的連接,如果客戶端在一段時間內沒有向注冊中心發送心跳,則會被摘除。

負載均衡:ZooKeeper本身不支持負載均衡。

安全性:支持ACL。

1.1 優缺點

優勢
①.一致性:ZooKeeper使用ZAB協議保證了數據的一致性,所有寫操作都由Leader處理,并通過復制機制傳播給Followers,確保數據的一致性。

②.可靠性:ZooKeeper使用持久化日志來記錄所有的寫操作,保證數據的可靠性和可恢復性。即使Leader節點宕機,新的Leader也可以從日志中恢復數據。

③.高性能:ZooKeeper使用內存數據庫存儲數據,快速地響應讀操作,并通過Leader-Follower模式進行并行處理,提高寫操作的吞吐量。

④.分布式協調:ZooKeeper提供了豐富的原語,如鎖、隊列、通知等,支持復雜的分布式協調和通信操作。

⑤.靈活性:ZooKeeper允許在集群運行時動態添加或刪除節點,靈活地適應不同規模和需求的系統。

劣勢
①.短暫的不可用性:盡管選舉會盡快選出新的Leader,但仍然存在短暫的不可用性。

②.配置相對復雜:與一些更現代的服務發現工具相比,ZooKeeper的配置可能相對復雜。
在這里插入圖片描述

2. Eureka:
??Eureka是Netflix開發的一個服務發現和注冊中心,它基于REST(Representational State Transfer)風格,主要用于微服務架構中的服務注冊與發現。Eureka通過提供高可用性、動態服務發現和負載均衡等功能,幫助開發者在分布式系統中更輕松地管理微服務。

CAP理論保證:Eureka注重AP(可用性與容錯性),各個節點是平等的,只要有一臺Eureka就可以保證服務可用,但查詢到的數據并不是最新的。

健康檢查:Eureka通過客戶端心跳來確定客戶端是否啟動,需要顯式配置健康檢查支持。

負載均衡:Eureka本身不支持負載均衡,但可以通過Ribbon等第三方庫實現。

安全性:Eureka在安全性方面沒有特別的支持。

2.1 優缺點

優勢
①.高可用性:Eureka具有集群和負載均衡的能力,能夠提供高可用性的服務注冊和發現機制。

②.易于使用:Eureka提供了簡單的API和UI界面,使得開發人員可以方便地進行服務注冊和發現。

③.擴展性強:Eureka的設計原則是可擴展性,可以方便地添加新的服務節點或新增服務實例。

④.配置靈活:Eureka提供了各種配置選項,可以根據實際需求進行自定義配置,滿足不同場景的需求。

⑤.自我保護機制:Eureka具有自我保護機制,即使在網絡異常或部分節點故障的情況下,也能保持服務的可用性。

劣勢
①客戶端負載均衡:Eureka本身不支持負載均衡,需要通過第三方庫(如Ribbon)實現。

在這里插入圖片描述

3.Consul:
??Consul是一個開源的分布式服務發現和配置管理工具,由HashiCorp公司開發。它具備服務發現、健康檢查、鍵值存儲和分布式一致性等核心功能,支持多數據中心,是構建分布式系統的重要工具之一。

健康檢查:Consul的健康檢查相對更為詳細,可以檢查內存使用情況、文件系統空間等。

負載均衡:Consul本身不支持負載均衡,但可以通過Fabio等第三方工具實現。

安全性:支持ACL和HTTPS安全通道。

Consul在CAP理論中更偏向于CP,但也會根據實際情況進行調整以保證可用性。

3.1 優缺點

優勢
①.服務注冊與發現:Consul的客戶端可以作為一個服務注冊到Consul,也可以通過Consul來查找特定的服務提供者,并進行調用。

②.健康檢查:Consul客戶端會定期發送健康檢查數據和服務端進行通訊,判斷客戶端的狀態、內存使用情況是否正常,用來監控整個集群的狀態。

③.KV Store:Consul還提供了一個容易使用的鍵值存儲,可以用來保持動態配置,協助服務協調、建立Leader選舉,以及開發者想構造的其它一些事務。

④.安全性:Consul支持ACL和HTTPS安全通道。

劣勢
①.負載均衡:Consul本身不支持負載均衡,需要通過第三方工具(如Fabio)實現。

在這里插入圖片描述

4.Nacos:
??Nacos是Dynamic Naming and Configuration Service的首字母簡稱,是阿里巴巴開源的一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。Nacos主要提供三種功能:持久化節點注冊、非持久化節點注冊和配置管理。

CAP理論保證:Nacos可以根據需求配置為CP或AP。服務注冊功能對可用性的要求要高于一致性。

負載均衡:Nacos本身具備負載均衡能力,可以提供服務端負載均衡與客戶端負載均衡。

配置管理:Nacos不僅提供服務注冊和發現,還提供了配置管理功能,使用起來相對簡潔,適合對性能要求比較高的大規模場景。

安全性:Nacos在安全性方面也有考慮,但具體的支持程度可能因版本而異。

4.1 優缺點

優勢
①.一體化管理:Nacos不僅提供了服務注冊和發現,還提供了配置管理功能,使用起來相對簡潔,適合對性能要求比較高的大規模場景。

②.負載均衡:Nacos本身具備負載均衡能力,可以提供服務端負載均衡與客戶端負載均衡。

③.簡單易用:內置數據庫可以讓用戶在使用Nacos時無需額外配置和安裝數據庫,簡化了部署和管理的流程。

劣勢
①.擴展性限制:內置數據庫通常具有固定的存儲能力和性能限制,難以滿足大規模系統的擴展需求。

請注意,這些工具的優劣勢可能因版本和具體的使用場景而有所不同,因此在選擇時需要根據實際情況進行權衡。

在這里插入圖片描述
??總結而言,選擇注冊中心組件應充分考慮項目所需的特定功能、系統性能需求、團隊技術棧和長期發展戰略。Nacos和Consul在現代化微服務架構中展現出卓越的優勢,而Eureka和ZooKeeper在特定條件下依然不失為可靠的選擇。切記,因地制宜,才能讓選擇成為推動項目成功的關鍵動力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11087.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[華為OD] C卷 dfs 特殊加密算法 100

題目: 有一種特殊的加密算法,明文為一段數字串,經過密碼本查找轉換,生成另一段密文數字串。 規則如下 1?明文為一段數字串由0-9組成 2.密碼本為數字0-9組成的二維數組 3?需要按明文串的數字順序在密碼本里找到同樣的數字串…

PUBG非升級實用槍皮-部分盤點

藏匿處的黑貨箱武器需要耗費高額成本才能升級 對于像我這樣的日常休閑玩家來說是一筆不小的(巨大的!)負擔 其實有許多普通非升級槍皮也是不錯的選擇 今天就來盤點一下我自己日常在用的普通皮 來看看你是不是也在用一樣的 (僅是盤點…

【OceanBase診斷調優】—— 租戶資源統計項及其查詢方法

本文主要介紹 OceanBase 數據庫中租戶資源統計項及其查詢方法。 適用版本 OceanBase 數據庫 V4.1.x、V4.2.x 版本。 CPU 資源統計項 邏輯 CPU 使用率(線程處理請求的時間占比)。 通過虛擬表 __all_virtual_sysstat 在 SYS 系統租戶下,查看…

AtCoder Beginner Contest 308 A題 New Scheme

A題:New Scheme 標簽:模擬 題意:給定 8 8 8個數的序列,詢問這些數是否滿足以下條件: 在 100 100 100到 675 675 675之間且能被 25 25 25整除序列是單調非遞減的 題解:按題意模擬判斷就好了。 代碼&#…

09.zabbix自定義模塊并使用

zabbix自定義模塊并使用 根據tcp的11中狀態獲取值,進行批量配置監控項 [rootyunlong66 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf UserParameterESTABLISHED,netstat -antp |grep -c ESTABLISHED UserParameterSYN_SENT,netstat -antp |grep -c SYN_SENT Use…

Obsidian/Typora設置圖床

在obsidian中默認圖片是保存在本地的,但是在要導出文檔上傳到網上時,由于圖片保存在本地,會出現無法加載圖片的問題。 這里引用的一段話: 這里使用picgo-core和gitee實現圖床功能, 參考1: Ubuntu下PicGO配…

Github學習

1.Git與Github 區別: Git是一個分布式版本控制系統,簡單的說就是一個軟件,用于記錄一個或若干個文件內容變化,以便將來查閱特點版本修訂情況的軟件。 Github是一個為用戶提高Git服務的網站,簡單說就是一個可以放代碼的地方。Gi…

C語言 | Leetcode C語言題解之第85題最大矩形

題目&#xff1a; 題解&#xff1a; int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;if (m 0) {return 0;}int n matrixColSize[0];int left[m][n];memset(left, 0, sizeof(left));for (int i 0; i < m; i) {for (int j …

SeetaFace6人臉活體檢測C++代碼實現Demo

SeetaFace6包含人臉識別的基本能力&#xff1a;人臉檢測、關鍵點定位、人臉識別&#xff0c;同時增加了活體檢測、質量評估、年齡性別估計&#xff0c;并且順應實際應用需求&#xff0c;開放口罩檢測以及口罩佩戴場景下的人臉識別模型。 官網地址&#xff1a;https://github.co…

【補充】圖神經網絡前傳——DeepWalk

論文閱讀 論文&#xff1a;https://arxiv.org/pdf/1403.6652 參考&#xff1a;【論文逐句精讀】DeepWalk&#xff0c;隨機游走實現圖向量嵌入&#xff0c;自然語言處理與圖的首次融合_隨機游走圖嵌入-CSDN博客 abstract DeepWalk是干什么的&#xff1a;在一個網絡中學習頂點…

【Mac】Ghost Buster Pro(蘋果電腦內存清理專家) v3.2.5安裝教程

軟件介紹 Ghost Buster pro是一款針對Mac系統的電腦清理和優化工具&#xff0c;可以幫助用戶清理系統垃圾、修復注冊表錯誤、卸載不需要的軟件、管理啟動項等&#xff0c;從而提高系統性能和穩定性。 安裝教程 1.打開鏡像包&#xff0c;拖動「Ghost Buster Pro」到應用程序中…

GIT SSL certificate problem

簡單來說&#xff0c;SSL 協議可以為你的 Web 瀏覽器或其他進程提供一種安全的通道&#xff0c;使服務器和客戶端之間的數據傳輸過程不被第三方竊取或篡改。這非常重要&#xff0c;特別是在處理敏感數據&#xff0c;比如信用卡信息、用戶名和密碼等情況下。 現在&#xff0c;S…

Flutter 中的 Row 小部件:全面指南

Flutter 中的 Row 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Row 是一個水平布局的小部件&#xff0c;用于將子控件沿著水平軸排列。Row 類似于 HTML 中的 div 標簽&#xff0c;但僅限于水平布局。它非常適合用來創建行式布局&#xff0c;如表單輸入、按鈕組、標簽…

【linux軟件基礎知識】完全公平調度

完全公平調度&#xff08;CFS&#xff09; CFS根據每個進程相對于所有可運行線程總權重的權重為每個進程分配一個“時間片”。 CFS 的目標是近似“無限小”的調度持續時間&#xff0c;稱為目標延遲。 較小的目標延遲可以提高交互性并接近完美的多任務處理&#xff0c;但其代價…

【Linux網絡】Https【下】{CA認證/證書的簽發與認證/安全性/總結}

文章目錄 1.引入證書【為方案五鋪墊】1.1再談https1.2SSL/TLS1.3CA機構1.4理解數字簽名1.4繼續鋪墊1.5方案五服務端申請證書回顧一二三回顧方案四方案五過程尋找方案五的漏洞客?端對證書進?認證 2.查看證書2.1查看瀏覽器的受信任證書發布機構2.2中間?有沒有可能篡改該證書2.…

差分約束 C++ 算法例題

差分約束 差分約束 是一種特殊的 n 元一次不等式組&#xff0c;m 個約束條件&#xff0c;可以組成形如下的格式&#xff1a; { x 1 ? x 1 ′ ≤ y 1 x 2 ? x 2 ′ ≤ y 2 ? x m ? x m ′ ≤ y m \begin{cases} x_1-x_1^{} \le y_1 \\ x_2-x_2^{} \le y_2 \\ \cdots \\ x_…

數據庫的要求

本來我是不準備寫數據庫的。而且是準備從零開始&#xff0c;學習python&#xff0c;學完語言學&#xff0c;會c和寫作技法&#xff0c;再來學習數據庫 那樣做的復雜度是天量的&#xff0c;按部就班什么的具備&#xff0c;因為你完全不清楚什么時候就有這個基礎和條件&#xff0…

【53】Camunda8-Zeebe核心引擎-Partitions分區與Internal processing內部處理

Partitions分區 在Zeebe中,所有數據都是基于分區的。(一個)分區本質上是一個關于流程事件的持久化流。在broker集群中,分區分布在節點之間,因此可以將其視為分片。啟動/初始化Zeebe 集群時,用戶可以配置所需的分區數。如果使用過Kafka,這部分內容是比較相似的。 每當部…

SpringBoot集成jxls2實現復雜(多表格)excel導出

核心依賴 需求 導出多個表格&#xff0c;包含圖片&#xff0c;類似商品標簽 1.配置模板 創建一個xlsx的模板文件&#xff0c;配置如下 該模板進行遍歷了兩次&#xff0c;因為我想要導出的數據分為兩列展示&#xff0c;左右布局&#xff0c;一個循環實現不了&#xff0c;所以采…

【ARM64 常見匯編指令學習 20.1 -- ARM 偽指令 .include】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 ARM 編譯指令 .include 使用介紹a.s 文件b.s 文件小結 ARM 編譯指令 .include 使用介紹 在UEFI&#xff08;統一可擴展固件接口&#xff09;開發中&#xff0c;通常會用到匯編語言文件&#xff08;.s 或 .S 文件&#xff09;。如果…