Nacos-8--分析一下nacos中的AP和CP模式

Nacos支持兩種模式來滿足不同場景下的需求:AP模式(強調可用性)和CP模式(強調一致性)
這兩種模式的選擇主要基于CAP理論,該理論指出在一個分布式系統中,無法同時保證一致性(Consistency)、可用性(Availability)和分區容忍性(Partition Tolerance),只能在三者之間做出權衡。

1、AP模式(Available and Partition Tolerant)

核心原理:
AP模式強調高可用性(Availability)和分區容錯性(Partition Tolerance),采用Distro協議實現最終一致性(Eventual Consistency),適用于臨時實例(如微服務實例)

特點:

  • 可用性優先:在AP模式下,Nacos側重于保證系統的高可用性和響應速度。這意味著即使在網絡分區的情況下,系統仍然能夠提供服務。
  • 最終一致性:雖然犧牲了一部分即時的一致性,但通過異步復制或事件驅動的方式,確保所有節點的數據最終會達到一致狀態。
  • 數據同步:Nacos在AP模式下通常采用異步復制策略,即一個節點上的更新不會立即同步到其他所有節點,而是經過一段時間后才完成全網同步。

Nacos的實現細節:

  • 注冊中心功能:當作為服務注冊中心使用時,AP模式非常適合,因為它能確保即使某個區域的服務實例不可達,其余區域的服務仍可正常運行,并且可以發現并訪問最近的服務實例。
  • 健康檢查機制:為了維護服務列表的準確性,Nacos使用了客戶端的心跳檢測機制來判斷服務實例是否存活。如果某個實例長時間未發送心跳,則會被標記為不健康并從服務列表中移除。

實現機制:
(1)、數據分片與責任機制

  • 每個Nacos節點負責一部分數據(基于服務名或實例IP的哈希計算)
  • 寫請求會被路由到負責該數據的節點(稱為責任節點),處理完成后異步同步給其他節點。
  • 示例:假設服務名為order- service,其哈希值決定由節點A負責。所有對該服務的寫操作(如注冊實例)都會由節點A處理。

(2)、異步數據同步

  • 責任節點處理寫請求后,通過增量同步方式廣播給其他節點
  • 若同步失敗,會進行重試,但不阻塞主流程,保證高可用性
  • 最終一致性:數據同步可能存在短暫延遲,但最終所有節點數據會達成一致

(3)、臨時實例管理

  • 臨時實例數據僅存儲在內存,不會持久化到磁盤
  • 客戶端通過心跳機制(HTTP/gRPC)保活,超時(默認15s不健康,30s剔除)后自動清理。
  • 示例:微服務實例每隔5秒向Nacos發送心跳,若15秒未收到心跳,則標記為不健康;若30秒未收到,則從注冊表中剔除。

(4)、健康檢查

  • 客戶端主動上報心跳(HTTP或gRPC長連接)。
  • 服務端定時檢查心跳,超時則標記為不健康或剔除。

適用場景:

  • 服務發現:微服務注冊與發現(如Spring Cloud應用),允許短暫數據不一致。
  • 高可用性要求高:電商大促時,服務注冊的輕微延遲不影響整體功能。
  • 容忍臨時錯誤:例如,服務實例短暫不可用時,AP模式仍能提供服務列表。

優勢:

  • 高可用性:即使部分節點故障,仍能響應請求。
  • 適合動態環境:適用于實例頻繁變動的場景(如彈性伸縮)。

局限性:

  • 最終一致性:數據同步存在延遲,可能讀取到舊數據。
  • 無法保證強一致性:不適合對數據一致性要求極高的場景(如金融交易配置)。

2、CP模式(Consistent and Partition Tolerant)

核心原理:
CP模式強調一致性(Consistency)和分區容錯性(Partition Tolerance),采用Raft協議保證強一致性(Strong Consistency),適用于持久實例(如數據庫、Redis等)。

特點:

  • 一致性優先:在CP模式下,Nacos更加注重數據的一致性。這意味著在網絡分區發生時,系統可能會暫時拒絕某些請求以保持數據的一致性。
  • 強一致性模型:采用類似于Raft算法的共識協議來實現強一致性,確保所有操作都是原子性的,并且每個操作的結果都會被正確地傳播到集群中的每一個節點。
  • 讀寫性能影響:由于需要等待多個副本確認,因此在寫入操作上會有一定的延遲,這可能會影響整體的讀寫性能。

Nacos實現細節:

  • 配置管理功能:對于配置管理而言,CP模式是非常重要的,因為任何配置的變化都需要確保在整個集群范圍內立即生效,避免因配置不一致導致的問題。
  • 選舉機制:在CP模式下,Nacos集群中的節點會進行領導者選舉,只有當前領導者才能處理寫請求,而其他跟隨者則負責復制數據并響應讀請求。

實現機制:
(1)、Leader選舉

  • 集群通過Raft協議選舉Leader,只有Leader能處理寫請求
  • Follower節點轉發寫請求到Leader
  • 示例:Nacos集群啟動時,節點間通過投票選舉Leader,確保集群中只有一個Leader。

(2)、日志復制

  • Leader將寫操作記錄到日志,并同步給Follower。
  • 半數以上節點ACK才算成功,確保數據強一致性。
  • 示例:當客戶端更新配置時,Leader將更新操作寫入日志,同步給Follower,收到超過半數節點確認后,才返回成功。

(3)、持久化存儲

  • 數據會持久化到磁盤,即使節點重啟也能恢復
  • 適用于永久實例(如MySQL 注冊信息)。

(4)、健康檢查

  • 服務端主動探測(TCP/HTTP/MySQL檢查)。
  • 不依賴客戶端心跳,適合無法主動上報的服務。

適用場景:

  • 配置管理:如數據庫連接串、關鍵參數配置,要求數據絕對一致。
  • 元數據管理:如服務注冊中心的元數據(服務列表、權重等)。
  • 強一致性需求金融系統中的交易配置,不允許出現配置不一致導致的資金錯誤。

優勢:

  • 強一致性:所有節點在同一時間看到相同的數據
  • 數據持久化防止節點重啟導致數據丟失
  • 適合靜態資源:適用于數據變更較少的場景(如數據庫實例)。

局限性:

  • 可用性妥協:當發生網絡分區或Leader選舉時,可能暫時不可用
  • 高延遲:日志復制和半數確認機制可能增加請求延遲。

3、AP模式與CP模式的對比

在這里插入圖片描述

4、Nacos的行為和建議

1、配置同步和通知(推薦使用CP模式)

(1)、配置同步的核心需求
  • 強一致性加粗樣式:配置中心的核心目標是確保所有客戶端獲取的配置數據完全一致。例如,數據庫連接、限流規則等配置如果存在不一致,可能導致業務邏輯錯誤或系統異常。
  • 持久化:配置通常需要持久化存儲(如數據庫或磁盤),以防止節點重啟后數據丟失。
(2)、CP模式下的配置同步
  • Raft協議:在CP模式下,Nacos通過Raft協議保證配置的強一致性。所有配置的寫操作必須經過Raft日志復制,確保半數以上節點確認后才提交。
  • 數據同步機制:
    • 長輪詢(Long Polling):客戶端定期向服務端發起請求,攜帶本地配置的 MD5 值。服務端檢測到配置變更后,立即返回新配置。
    • 事件監聽(Event Listener):客戶端注冊監聽器,當配置變更時,服務端主動推送更新。
  • 容錯與緩存:
    • 客戶端本地緩存配置,即使服務端不可用也能降級使用舊配置。
    • 服務端通過Raft協議確保配置數據的持久化和一致性。
(3)、AP模式下的配置同步
  • 最終一致性:AP模式下,配置同步依賴Distro協議的異步復制機制,可能存在短暫延遲。
  • 適用場景:對配置一致性要求不高的場景(如非核心功能的動態參數),但通常不建議在AP模式下使用配置中心。

結論:

  • 配置同步推薦使用CP模式保證強一致性,避免因配置不一致導致業務異常
  • AP模式下的配置同步:僅適用于容忍短暫不一致的非關鍵場景。

2、節點狀態同步和通知(默認使用AP模式)

(1)、節點狀態的核心需求
  • 高可用性:服務注冊與發現需要保證在節點故障或網絡分區時仍能正常提供服務。
  • 動態性:服務實例頻繁變動(如彈性擴縮容、實例重啟),需要快速響應。
(2)、AP模式下的節點狀態同步
  • Distro協議:每個節點負責一部分服務實例的注冊和同步,寫操作本地提交后異步同步到其他節點
  • 心跳機制:客戶端通過心跳(HTTP/gRPC)保活,服務端檢測心跳超時后標記實例為不健康或剔除。
  • 最終一致性:節點間數據同步可能存在延遲,但最終達成一致。
(3)、CP模式下的節點狀態同步
  • Raft協議:CP模式下注冊的持久化實例(ephemeral=false)需要通過Raft協議保證強一致性,但會犧牲部分可用性。
  • 適用場景:需要強一致性的關鍵服務注冊(如數據庫、Redis等靜態資源)。

結論:

  • 節點狀態同步默認使用AP模式:適用于臨時實例(ephemeral=true),保證高可用性和動態性。
  • CP模式下的節點狀態同步:僅適用于持久化實例(ephemeral=false),需顯式啟用。

5、如何選擇AP模式或CP模式?

Nacos允許用戶根據自己的需求選擇使用AP(可用性優先)或CP(一致性優先)模式,這主要體現在服務發現和配置管理的不同場景中。這種靈活性使得Nacos能夠適應不同的業務需求。

(1)、選擇依據

1、數據一致性要求

  • CP模式:需要數據絕對一致(如金融、配置管理)。
  • AP模式:允許短暫不一致(如微服務注冊發現)。

2、實例類型

  • CP模式:持久實例(persistent),如數據庫實例。
  • AP模式:臨時實例(ephemeral),如微服務實例。

3、可用性需求

  • CP模式:可容忍短暫不可用(如配置更新)。
  • AP模式:需要高可用性(如電商大促)。

(2)、切換方式

AP模式(默認):
代碼示例:

// 默認使用AP模式
NacosNamingService naming = NamingFactory.createNamingService(serverAddr);
Naming.registerInstance("serviceName", "192.168.1.1", 8080);

CP模式:
代碼示例:

// 注冊服務時指定使用CP模式
NacosNamingService naming = NamingFactory.createNamingService(serverAddr);
naming.registerInstance("serviceName", "192.168.1.1", 8080, "DEFAULT", true); // 最后參數為true表示CP模式

切換模式:
方式1:修改配置文件

  • 配置文件路徑:conf/application.properties
  • 修改參數:
# 切換為AP模式(Distro協議)
nacos.core.protocol=distro# 切換為 CP 模式(Raft 協議)
nacos.core.protocol=raft

注意:
修改后需重啟 Nacos 服務生效。

方式2:通過API動態切換

  • API調用:
    bash示例:
# 切換為CP模式
curl - X PUT "http://<nacos- server>:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP"# 切換為AP模式
curl - X PUT "http://<nacos- server>:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=AP"
- 無需重啟:API切換是動態的,無需重啟服務,但需注意切換時的集群狀態。

(3)、實際建議

配置中心需要使用強一致性CP模式
服務注冊,通常配置AP模式。
彈性部署應用建議AP模式。

6、總結

  • AP模式:適合高可用性、容忍短暫不一致的場景,如微服務注冊與發現。
  • CP模式:適合強一致性、數據持久化的場景,如配置管理和金融系統。
  • 核心區別:AP模式通過Distro協議實現最終一致性,CP模式通過Raft協議實現強一致性

通過合理選擇模式,Nacos能夠滿足不同業務場景的需求,在一致性和可用性之間取得平衡。

向陽前行,Dare To Be!!!

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

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

相關文章

水閘安全監測的主要核心內容

水閘安全監測是指通過一系列技術手段和管理措施&#xff0c;對水閘的結構狀態、運行性能及環境條件進行實時或定期的觀測與評估&#xff0c;以確保水閘在設計壽命期內的安全性和可靠性。其核心目標是及時發現潛在的安全隱患&#xff0c;防止事故發生&#xff0c;保障水利工程的…

嵌入式系統學習Day19(數據結構)

數據結構的概念&#xff1a; 相互之間存在一種或多種特定關系的數據元素的集合。數據之間關系&#xff1a;邏輯關系&#xff1a;集合&#xff0c;線性&#xff08;1對1&#xff0c;中間位置的值有且僅有一個前驅&#xff0c;一個后繼&#xff09;&#xff0c;樹&#xff08;1對…

Pandas中數據清理、連接數據以及合并多個數據集的方法

一、簡介1.數據清理的重要性&#xff1a;在進行數據分析前&#xff0c;需進行數據清理&#xff0c;使每個觀測值成一行、每個變量成一列、每種觀測單元構成一張表格。2.數據組合的必要性&#xff1a;數據整理好后&#xff0c;可能需要將多張表格組合才能進行某些分析&#xff0…

JavaSSM框架從入門到精通!第二天(MyBatis(一))!

一、 Mybatis 框架1. Mybatis 框架簡介Mybatis 是 apache 的一個開源項目&#xff0c;名叫 iBatis &#xff0c;2010 年這個項目由 apache 遷移到了 google&#xff0c;并命名為 Mybatis&#xff0c;2013 年遷移到了 GitHub&#xff0c;可以在 GitHub 下載源碼。2. Mybatis 的下…

Linux下Mysql命令,創建mysql,刪除mysql

在 Linux 系統下&#xff0c;您可以通過命令行來創建和刪除 MySQL 數據庫。以下是詳細的操作步驟&#xff0c;包括創建和刪除數據庫、用戶&#xff0c;以及常見的相關管理命令。1. 登錄 MySQL在執行任何 MySQL 操作之前&#xff0c;需要先登錄 MySQL。1.1 使用 root 用戶登錄 M…

假設檢驗的原理

假設檢驗是統計學中用于判斷樣本數據是否支持某個特定假設的方法。其核心思想是通過樣本數據對總體參數或分布提出假設&#xff0c;并利用統計量來判斷這些假設的合理性。假設檢驗的基本步驟如下&#xff1a;1. 假設&#xff08;Hypothesis&#xff09;在統計學中&#xff0c;假…

信號、內存共享等實現

信號&#xff08;signal&#xff09;#include <signal.h> #include <stdio.h> #include <unistd.h>void handler(int sig) {printf("收到信號: %d\n", sig); }int main() {signal(SIGUSR1, handler); // 注冊用戶自定義信號printf("進程 PI…

《從日常到前沿:AI 在教育、醫療、制造業的真實落地案例》文章提綱

引言&#xff1a;AI 落地的多元圖景?簡述 AI 從實驗室走向實際應用的發展趨勢?說明選擇教育、醫療、制造業的原因 —— 覆蓋民生與基礎產業&#xff0c;落地場景具有代表性?AI 在教育領域的落地案例?個性化學習&#xff1a;如某在線教育平臺利用 AI 分析學生學習數據&#…

決策樹(1)

一、樹模型與決策樹基礎決策樹概念&#xff1a;從根節點開始一步步走到葉子節點得出決策&#xff0c;所有數據最終都會落到葉子節點&#xff0c;既可用于分類&#xff0c;也可用于回歸。樹的組成根節點&#xff1a;第一個選擇點。非葉子節點與分支&#xff1a;中間決策過程。葉…

電視系統:開啟視聽新時代

在當今數字化浪潮席卷的時代&#xff0c;電視領域正經歷著一場深刻的變革&#xff0c;而電視系統無疑是這場變革中的耀眼明星。簡單來講&#xff0c;電視系統就是互聯網協議電視&#xff0c;它宛如一座橋梁&#xff0c;巧妙地利用寬帶有線電視網&#xff0c;將多媒體、互聯網、…

字節開源了一款具備長期記憶能力的多模態智能體:M3-Agent

貓頭虎AI分享&#xff5c;字節開源了一款具備長期記憶能力的多模態智能體&#xff1a;M3-Agent 近年來&#xff0c;多模態大模型的發展迅猛&#xff0c;但如何賦予智能體類似人類的長期記憶能力&#xff0c;一直是研究中的核心挑戰。字節跳動開源的 M3-Agent&#xff0c;正是面…

第十六屆藍橋杯青少組C++省賽[2025.8.10]第二部分編程題(6、魔術撲克牌排列)

參考程序&#xff1a;#include<bits/stdc.h> using namespace std; long long dp[105]; long long c(int n) {dp[0] 1;for(int i1; i< n; i){for(int j0; j<i; j){dp[i] dp[j] * dp[i -1-j];}}return dp[n]; } int main() {int n;cin >> n;cout <<c(n…

【實時Linux實戰系列】實時平臺下的圖像識別技術

在當今數字化時代&#xff0c;圖像識別技術已經廣泛應用于各個領域&#xff0c;如自動駕駛、安防監控、智能醫療等。它通過計算機對圖像進行分析和處理&#xff0c;從而實現對物體、場景或人的識別。實時Linux作為一種高效的實時操作系統&#xff0c;為圖像識別技術提供了強大的…

IPD流程執行檢查表

IPD流程執行檢查表 稽查

Jmeter的安裝與使用教程

基于jdk1.8版本的Jmeter的下載與安裝和使用教程。 一.安裝jmeter 官網下載就行下載壓縮包解壓就行 Jmeter下載官網&#xff1a;http://jmeter.apache.org/download_jmeter.cgi找到安裝包的下載位置&#xff0c;解壓進入文件夾的bin文件夾下jmeter.bat。二.配置環境變量 1、“此…

docker 數據卷、自定義鏡像操作演示分享(第二期)

數據卷1.1、背景前面有個docker go web demo應用示例&#xff0c;每次為了部署go_web_demo工程&#xff0c; 需要將使用到的cp的命令將宿主主機內的go_web_demo目錄下的代碼文件&#xff08;一般是編譯后的二進制執行文件&#xff09;復制到容器內部。 數據卷&#xff1a;將宿主…

Pandas 入門到實踐:核心數據結構與基礎操作全解析(Day1 學習筆記)

目錄 一、Pandas 概述 1. 什么是 Pandas 二、核心數據結構 1. Series 索引 顯示索引 隱式索引 創建方式 屬性與方法 數據訪問 索引訪問 切片訪問 布爾索引 2. DataFrame 創建方式 屬性與數據訪問 數據修改 三、索引操作 1. 索引類型 2. 核心索引方法 3. 切…

hadoop技術棧(九)Hbase替代方案

一、 核心替代方向 ?云原生托管NoSQL服務&#xff1a;? ?Google Cloud Bigtable&#xff1a;? 這是HBase在云端的“官方”替代品&#xff0c;兼容HBase API&#xff0c;底層存儲和架構高度優化&#xff0c;提供高吞吐、低延遲、無縫擴展、完全托管的服務。?如果追求兼容性…

深度解析 DDoS 攻擊:運作機制與防御體系構建?

在網絡安全領域&#xff0c;DDoS&#xff08;分布式拒絕服務&#xff09;攻擊始終是企業與機構的 “心腹大患”。它通過操控大量 “傀儡主機” 發起海量請求&#xff0c;直接癱瘓目標服務器或網絡鏈路&#xff0c;導致業務中斷、用戶流失甚至品牌聲譽受損。今天&#xff0c;我們…

在linux系統中下載Andconda

下載前的準備工作 在開始下載 Anaconda 之前&#xff0c;做好充分的準備工作能避免后續出現不必要的麻煩&#xff0c;讓整個過程更加順暢。 確認系統架構 Linux 系統有 32 位和 64 位之分&#xff0c;不同架構對應的 Anaconda 安裝包不同。你可以通過以下命令查看系統架構&a…