Nacos簡介—2.Nacos的原理簡介

大綱

1.Nacos集群模式的數據寫入存儲與讀取問題

2.基于Distro協議在啟動后的運行規則

3.基于Distro協議在處理服務實例注冊時的寫路由

4.由于寫路由造成的數據分片以及隨機讀問題

5.寫路由 + 數據分區 + 讀路由的CP方案分析

6.基于Distro協議的定時同步機制

7.基于Distro協議的心跳校驗下的數據同步補償機制

8.基于Raft協議實現的弱CP模式

9.Nacos集群模式下的lookup尋址機制

1.Nacos集群模式的數據寫入存儲與讀取問題

使用Nacos進行服務注冊時,需要解決如下問題:

一.應該找集群里的哪個節點來發起服務注冊?

二.服務實例數據應該存儲在集群的哪個節點?

三.應該找集群里的哪個節點來發起服務發現?

2.基于Distro協議在啟動后的運行規則

(1)Nacos集群啟動后會按如下規則運行

(2)Distro協議 + 定時數據同步與AP + 心跳檢驗與網絡分區

(1)Nacos集群啟動后會按如下規則運行

一.Nacos集群的每個節點都可以處理寫請求

Nacos集群節點收到寫請求后:首先根據要注冊的服務實例的IP:端口 + 路由算法,計算出所屬集群節點。然后把服務實例注冊請求轉發到負責該服務實例數據的集群節點中。接著負責該服務實例數據的集群節點就會解析請求,把數據存儲到內存里。同時會定期執行同步任務,把本節點負責的數據同步到其他節點。最終每個節點都會存儲全量的服務實例數據。

二.新加入Nacos集群的節點會拉取全量數據

新加入Nacos集群的節點會輪詢Nacos集群的所有節點,然后發送請求出去拉取各節點的數據,所以Nacos集群的每個節點上都會有所有已注冊的服務實例的數據。

三.每個節點都會定期發送心跳給其他節點

Nacos集群的節點通過心跳請求進行數據校驗,主要是交換數據的校驗值。如果發現其他節點上的數據與自己的不一致,就會全量拉取數據進行補齊。

四.Nacos集群的每個節點都可以處理讀請求

因為每個節點都有全量數據,所以每個節點都可以處理讀請求。

(2)Distro協議 + 定時數據同步與AP + 心跳檢驗與網絡分區

Distro協議兼顧了CAP中的AP。在這個協議下,所有節點通過定期數據同步 + 心跳校驗實現數據最終一致。這個協議能讓每個節點都有全量數據。

如果出現某節點宕機,不影響集群可用性。如果出現網絡分區,同樣不影響集群可用性。因為不同的網絡分區只會讀寫分區中的Nacos節點,此時只是沒辦法同步數據而已。雖然數據會不一致,但一旦分區恢復后,心跳校驗機制運作起來,數據會自動補齊。

3.基于Distro協議在處理服務實例注冊時的寫路由

首先,服務實例會隨機選擇Nacos集群中的一個節點發起注冊請求。

然后,Nacos集群節點收到寫請求后:會根據要注冊的服務實例的IP:端口 + 路由算法,計算出所屬的集群節點。

接著,把服務實例注冊請求轉發到負責該服務實例數據的集群節點中。負責該服務實例數據的節點會解析請求,緩存服務實例數據到內存中。

4.由于寫路由造成的數據分片以及隨機讀問題

由于Nacos集群節點收到寫請求后:會根據要注冊的服務實例的IP:端口 + 路由算法,計算出所屬的集群節點。所以會導致數據分片,即每個節點僅負責管理一部分的服務實例數據。

服務實例進行服務發現時,只能隨機選擇一個Nacos節點來讀取數據。對Nacos集群節點進行隨機讀的時候,由于每個節點只負責處理部分數據,所以可能出現讀取不到剛向集群注冊的數據的隨機讀問題。

5.寫路由 + 數據分區 + 讀路由的CP方案分析

在數據分區 + 隨機讀的情況下,此時為了讀取到數據,有兩種解決方案。

方案一:讓隨機選擇的節點重新進行讀路由

方案二:讓隨機選擇的節點也擁有全部數據

如果采用方案一,也就是寫路由 + 數據分片 + 讀路由的架構設計。那么讀寫某個服務實例的數據,只能由Nacos集群中的其中一個節點處理。如果節點宕機,那么對應的該服務實例數據就不可用。雖然該節點的數據不可用,但也是對所有用戶都不可用,視圖是一致的。視圖是一致的,說明要么都能讀到數據,要么都讀不到數據。所以這種方案會存在可用性的問題,但優點是數據是強一致的。也就是犧牲了CAP中的A,沒有了可用性,但保證了CP。

Nacos的Distro協議則使用了方案二。某個節點宕機后,該節點的數據不會全部不可用,可能會丟失部分數據。也就是犧牲了CAP中的C,不能確保強一致性,但保證了AP。加上Distro協議的同步機制,可以讓各節點的數據實現最終一致性。

6.基于Distro協議的定時同步機制

Nacos集群中的每個節點,雖然通過寫路由只寫入由自己處理的數據,但同時也會定期執行同步任務,把本節點負責的數據同步到其他節點,最終每個節點都會存儲全量的集群數據。

同步機制的存在保證了各節點的數據最終是一致的。

7.基于Distro協議的心跳校驗下的數據同步補償機制

Nacos集群的節點通過心跳請求進行數據校驗,主要是交換數據的校驗值。如果發現其他節點上的數據與自己的不一致,就會全量拉取數據進行補齊。

當出現網絡分區時,兩分區間的節點無法通信,此時自然就無法定時同步。但當分區恢復后,節點之間通過心跳校驗機制,數據可以快速自動補齊。

8.基于Raft協議實現的弱CP模式

Nacos集群節點在啟動時會選舉出一個Leader節點,由Leader節點負責數據的寫入,并將數據同步給其他節點。Leader節點成功寫入數據的判斷依據是,過半節點都成功同步數據了。

9.Nacos集群模式下的lookup尋址機制

(1)單機尋址

(2)文件尋址

(3)地址服務器尋址

尋址就是Nacos各節點啟動時如何找到其他節點。

(1)單機尋址

Nacos通過"-m standalone"模式來啟動時,會讀取自己本機的IP:端口,然后構造對象放入到ServerMemberManager,它是專門負責管理所有節點信息的組件。

(2)文件尋址

cluster.conf里會寫入各個節點地址,節點啟動時會讀取這個文件的內容。同時節點會針對這個文件施加監聽器,如果發現文件有變動,會進行重新讀取。但是需要手工維護每個節點的cluster.conf文件,比較適合常規的、三節點、小規模的生產集群部署。

(3)地址服務器尋址

如果Nacos需要進行大規模的集群部署,一般會采用這個方案。也就是使用一個Web服務器來維護一份cluster.conf,然后所有的Nacos都定時請求這個Web服務器獲取最新的地址列表。

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

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

相關文章

中電金信聯合阿里云推出智能陪練Agent

在金融業加速數智化轉型的今天,提升服務效率與改善用戶體驗已成為行業升級的核心方向。面對這一趨勢,智能體與智能陪練的結合應用,正幫助金融機構突破傳統業務模式,開拓更具競爭力的創新機遇。 在近日召開的阿里云AI勢能大會期間&…

十分鐘恢復服務器攻擊——群聯AI云防護系統實戰

場景描述 服務器遭遇大規模DDoS攻擊,導致服務不可用。通過群聯AI云防護系統的分布式節點和智能調度功能,快速切換流量至安全節點,清洗惡意流量,10分鐘內恢復業務。 技術實現步驟 1. 啟用智能調度API觸發節點切換 群聯系統提供RE…

LLM量化技術全景:GPTQ、QAT、AWQ、GGUF與GGML

01 引言 本文介紹的是在 LLM 討論中經常聽到的各種量化技術。本文的目的是提供一步一步的解釋和代碼,讓大家可以自己使用這些技術來壓縮模型。 閑話少說,我們來研究一下吧! 02 Quantization 量化是指將高精度數字轉換為低精度數字。低精…

IP的基礎知識以及相關機制

IP地址 1.IP地址的概念 IP地址是分配給連接到互聯網或局域網中的每一個設備的唯一標識符 也就是說IP地址是你設備在網絡中的定位~ 2.IP版本~ IP版本分為IPv4和IPv6,目前我們最常用的還是IPv4~~但是IPv4有個缺點就是地址到現在為止,已經接近枯竭~~&…

本地使用Ollama部署DeepSeek

以下是在本地使用Ollama部署DeepSeek的詳細教程,涵蓋安裝、修改安裝目錄、安裝大模型以及刪除大模型的操作步驟。 安裝Ollama 1. 系統要求 確保你的系統滿足以下條件: 操作系統:macOS、Linux或者Windows。足夠的磁盤空間和內存。 2. 安裝…

開源項目實戰學習之YOLO11:ultralytics-cfg-datasets-Objects365、open-images-v7.yaml文件(六)

👉 點擊關注不迷路 👉 點擊關注不迷路 👉 點擊關注不迷路 medical - pills.yaml 通常用于配置與醫學藥丸檢測任務相關的參數和信息 Objects365.yaml 用于配置與 Objects365 數據集相關信息的文件。Objects365 數據集包含 365 個不同的物體類別…

23種設計模式-行為型模式之策略模式(Java版本)

Java 策略模式(Strategy Pattern)詳解 🧠 什么是策略模式? 策略模式是一種行為型設計模式,它定義了一系列算法,把它們一個個封裝起來,并且使它們可以互相替換。策略模式讓算法獨立于使用它的客…

使用 AI Agent 改善師生互動的設計文檔

使用 AI Agent 改善師生互動的設計文檔 一、引言 1.1 研究背景 當前教育領域的師生互動存在諸多挑戰,如教師負擔過重、學生個體差異大導致難以滿足所有人的需求,以及信息傳遞延遲等問題。引入AI-Agent能夠有效緩解這些問題,通過自動化手段協…

2、Ubuntu 環境下安裝RabbitMQ

?. 安裝Erlang RabbitMqRabbitMq需要Erlang語?的?持,在安裝rabbitMq之前需要安裝erlang需要Erlang語?的?持,在安裝rabitMq之前需要安裝erlang。 安裝erlang # 更新軟件包 sudo apt-get update # 安裝 erlang sudo apt-get install erlang 查看er…

Node.js 操作 ElasticSearch 完整指南:從安裝到實戰

本文將手把手教你如何搭建 ElasticSearch 環境,并通過 Node.js 實現高效數據檢索。包含 10 個可直接復用的代碼片段,助你快速掌握搜索、聚合等核心功能! 環境搭建篇 1. ElasticSearch 安裝要點 下載 es下載連接 下載下來后,進…

硬核科普丨2025年安全、高效網絡準入控制系統深度解析

陽途網絡準入控制系統(Network Access Control,簡稱NAC)是當代網絡安全領域的重要工具,有效防止未經授權的訪問和數據泄露,保障網絡資源的安全性和完整性。本文將深入探討陽途網絡準入控制系統的的重要性和作用。 一、…

搜索二叉樹-key的搜索模型

二叉搜索樹(Binary Search Tree, BST)是一種重要的數據結構,它有兩種基本模型:Key模型和Key/Value模型。 一、Key模型 1.基本概念 Key模型是二叉搜索樹中最簡單的形式,每個節點只存儲一個鍵值(key),沒有額外的數據值(value)。這…

安卓四大組件之ContentProvider

目錄 實現步驟 代碼分析 onCreate insert query ContextHolder Cursor 作用與用法 基本步驟: 可能的面試題:為什么使用Cursor? 為什么使用Cursor 使用Cursor的好處 靜態內部類實現單例模式 AnndroidManifest.xml配置信息 注釋的…

【HTML】【Web開發】滑動條挑戰

最近在思考如何開發一些入門級的迷你游戲,于是抽空寫了個HTML的滑動條小游戲。 游戲規則如下: 在[0, 100]區間內隨機生成一個目標值,顯示為:X% 倒計時 3 秒過后,出現 10 秒的挑戰倒計時和【停止】按鈕 挑戰倒計時結…

面試踩過的坑

1、 “”和equals 的區別 “”是運算符,如果是基本數據類型,則比較存儲的值;如果是引用數據類型,則比較所指向對象的地址值。equals是Object的方法,比較的是所指向的對象的地址值,一般情況下,重…

專業軟件開發全流程實踐指南

作為一家擁有十余年行業積淀的專業軟件開發服務提供商,我們見證了太多項目從無到有的全過程。今天,我們就用最樸實的語言,跟大家聊聊一個軟件產品從構思到上線的完整歷程。這些經驗不僅適用于自建技術團隊的企業,對正在尋找軟件外…

聊透多線程編程-線程互斥與同步-12. C# Monitor類實現線程互斥

目錄 一、什么是臨界區? 二、Monitor類的用途 三、Monitor的基本用法 四、Monitor的工作原理 五、使用示例1-保護共享變量 解釋: 六、使用示例2-線程間信號傳遞 解釋: 七、注意事項 八、總結 在多線程編程中,線程之間的…

第R4周:LSTM-火災溫度預測

文章目錄 一、前期準備工作1.導入數據2. 數據集可視化 二、構建數據集1. 數據集預處理2. 設置X, y3. 劃分數據集 三、模型訓練1. 構建模型2. 定義訓練函數3. 定義測試函數4. 正式訓練模型 四、模型評估1. Loss圖片2. 調用模型進行預測3. R2值評估 總結: &#x1f36…

toCharArray作用

toCharArray() 是 Java 中 String 類的一個方法,其作用是將字符串對象轉換為一個字符數組。下面為你詳細介紹其用法、原理和示例。 方法定義 toCharArray() 方法在 java.lang.String 類里被定義,方法簽名如下 public char[] toCharArray() 此方法沒有…

STM32八股【6】-----CortexM3的雙堆棧(MSP、PSP)設計

STM32的線程模式(Thread Mode)和內核模式(Handler Mode)以及其對應的權級和堆棧指針 線程模式: 正常代碼執行時的模式(如 main 函數、FreeRTOS任務) 可以是特權級(使用MSP&#xff…