Nacos源碼 (2) 核心模塊

来源:https://www.cnblogs.com/xugf/archive/2023/08/07/17610722.html
-Advertisement-
Play Games

# 整體架構 ![](https://img2023.cnblogs.com/blog/1258602/202308/1258602-20230807095950782-1096148976.jpg) ![](https://img2023.cnblogs.com/blog/1258602/2023 ...


整體架構

  • 服務管理:實現服務CRUD,功能變數名稱CRUD,服務健康狀態檢查,服務權重管理等功能
  • 配置管理:實現配置管CRUD,版本管理,灰度管理,監聽管理,推送軌跡,聚合數據等功能
  • 元數據管理:提供元數據CURD和打標能力
  • 插件機制:實現三個模塊可分可合能力,實現擴展點SPI機制
  • 事件機制:實現非同步化事件通知,sdk數據變化非同步通知等邏輯
  • 日誌模塊:管理日誌分類,日誌級別,日誌可移植性(尤其避免衝突),日誌格式,異常碼+幫助文檔
  • 回調機制:sdk通知數據,通過統一的模式回調用戶處理。介面和數據結構需要具備可擴展性
  • 定址模式:解決ip,功能變數名稱,nameserver、廣播等多種定址模式,需要可擴展
  • 推送通道:解決server與存儲、server間、server與sdk間推送性能問題
  • 容量管理:管理每個租戶,分組下的容量,防止存儲被寫爆,影響服務可用性
  • 流量管理:按照租戶,分組等多個維度對請求頻率,長鏈接個數,報文大小,請求流控進行控制
  • 緩存機制:容災目錄,本地緩存,server緩存機制。容災目錄使用需要工具
  • 啟動模式:按照單機模式,配置模式,服務模式,dns模式,或者all模式,啟動不同的程式+UI
  • 一致性協議:解決不同數據,不同一致性要求情況下,不同一致性機制
  • 存儲模塊:解決數據持久化、非持久化存儲,解決數據分片問題
  • Nameserver:解決namespace到clusterid的路由問題,解決用戶環境與nacos物理環境映射問題
  • CMDB:解決元數據存儲,與三方cmdb系統對接問題,解決應用,人,資源關係
  • Metrics:暴露標準metrics數據,方便與三方監控系統打通
  • Trace:暴露標準trace,方便與SLA系統打通,日誌白平化,推送軌跡等能力,並且可以和計量計費系統打通
  • 接入管理:相當於阿裡雲開通服務,分配身份、容量、許可權過程
  • 用戶管理:解決用戶管理,登錄,sso等問題
  • 許可權管理:解決身份識別,訪問控制,角色管理等問題
  • 審計系統:擴展介面方便與不同公司審計系統打通
  • 通知系統:核心數據變更,或者操作,方便通過SMS系統打通,通知到對應人數據變更
  • OpenAPI:暴露標準Rest風格HTTP介面,簡單易用,方便多語言集成
  • Console:易用控制台,做服務管理、配置管理等操作
  • SDK:多語言sdk
  • Agent:dns-f類似模式,或者與mesh等方案集成
  • CLI:命令行對產品進行輕量化管理,像git一樣好用

console模塊

console模塊是一個springboot工程,整合了管理控制台、註冊中心和配置中心功能。

啟動類

啟動類是com.alibaba.nacos.Nacos類:

@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public class Nacos {
    public static void main(String[] args) {
        SpringApplication.run(Nacos.class, args);
    }
}

依賴的模塊

  • nacos-config - 配置中心
  • nacos-naming - 註冊中心

ConsoleConfig配置類

  • 載入application.properties配置文件
  • 掃描各個模塊controller包,緩存RequestMappingInfo -> Method
  • EnableScheduling開啟定時任務功能

管理端介面

  • HealthController - 健康檢查介面
  • NamespaceController - 命名空間管理
  • PermissionController - 許可權管理
  • RoleController - 角色管理
  • ServerStateController - 查詢服務運行狀態信息
  • UserController - 登錄和用戶管理

config模塊

配置中心。

aspect切麵

  • CapacityManagementAspect - 配置容量判斷切麵
  • RequestLogAspect - 請求日誌切麵

auth認證

許可權相關介面及實現類:

  • PermissionPersistService - Permission CRUD service
  • RolePersistService - Role CRUD service
  • UserPersistService - User CRUD service

configuration配置類

  • Filter配置:
    • NacosWebFilter - Web encode filter
    • CurcuitFilter - 熔斷降級判斷過濾器
  • StorageCondition配置:用於判斷存儲類型
    • ConditionDistributedEmbedStorage -
    • ConditionOnEmbeddedStorage -
    • ConditionOnExternalStorage -
    • ConditionStandaloneEmbedStorage -

controller配置中心介面

  • CapacityController - 配置容量管理介面
  • ClientMetricsController - 客戶端統計信息查詢介面
  • CommunicationController - 集群節點通信介面
  • ConfigController - 配置管理介面
    • 配置推送介面
    • 配置查詢、刪除介面
    • 導入、導出配置介面
    • 配置變化監聽介面
  • HealthController - 健康檢查介面
  • HistoryController - 配置歷史管理介面
  • ListenerController - 從客戶端側查詢訂閱信息介面

monitor監視器

  • MemoryMonitor
  • MetricsMonitor
  • ResponseMonitor

remote遠程調用處理器

遠程rpc處理器:

  • ConfigChangeBatchListenRequestHandler - 客戶端監聽器新增/移除處理器
  • ConfigChangeClusterSyncRequestHandler - 集群同步配置處理器
  • ConfigPublishRequestHandler - 推送配置處理器
  • ConfigQueryRequestHandler - 配置查詢處理器
  • ConfigRemoveRequestHandler - 配置刪除處理器

naming模塊

註冊中心。

consistency一致性服務

維護數據一致性的相關服務。

controller註冊中心介面

  • CatalogController - 服務及實例相關信息查詢介面
  • ClusterController - 服務集群管理介面
  • DistroController - 分區容錯相關介面
  • HealthController - 健康檢查相關介面
  • InstanceController - 服務實例管理介面
  • OperatorController - 操作數據查詢介面
  • ServiceController - 服務管理介面

remote遠程調用處理器

遠程rpc處理器。

client模塊

config配置中心客戶端

NacosConfigService類封裝了操作配置中心的API。

naming註冊中心客戶端

NacosNamingService類封裝了操作註冊中心的API。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本篇是《quarkus依賴註入》系列的第 ...
  • ## Mybatis ### 舉個小慄子 mybatis配置文件(XML配置文件) ```java ``` user.xml(實現增刪改查的sql語句) ```xml insert into user values (#{userId},#{username},#{password}) delete ...
  • [toc] > 技術和工具「!喜新厭舊」 # 一、背景 最近在一個輕量級的服務中,嘗試了最新的技術和工具選型; 即`SpringBoot3`,`JDK17`,`IDEA2023`,`Navicat16`,雖然新的技術和工具都更加強大和高效,但是適應採坑的過程總是枯燥的; 【環境一覽】 ![](htt ...
  • 多態是Java語言極為重要的一個特性,可以說是Java語言動態性的根本,那麼線程執行一個方法時到底在記憶體中經歷了什麼,JVM又是如何確定方法執行版本的呢? ...
  • ## 教程簡介 Ext JS是一個流行的JavaScript框架,它為使用跨瀏覽器功能構建Web應用程式提供了豐富的UI。 Ext JS基本上用於創建桌面應用程式它支持所有現代瀏覽器,如IE6 +,FF,Chrome,safari 6+ 等。Ext JS基於MVC / MVVM架構。 最新版本的Ex ...
  • 本文翻譯自國外論壇 medium,原文地址:https://medium.com/@raviyasas/spring-boot-best-practices-for-developers-3f3bdffa0090 Spring Boot 是一種廣泛使用且非常流行的企業級高性能框架。以下是一些最佳實踐 ...
  • 對於個人建站來說,WordPress相信很多讀者都知道了。但WordPress很多時候我們還是用來建立自主發佈內容的站點為主,適用於個人博客、企業主站等。雖然有的主題可以把WordPress變為論壇,但效果並不是很好。 所以,今天給大家推薦一個開源的論壇項目: [**vanilla**](https ...
  • 在開始主題前,先看一個 C++ 例子: #include <iostream> struct Data { int a; int b; }; // 註意這裡 struct Data *s; void doSome() { Data k; k.a = 100; k.b = 300; // 註意這裡,會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...