# 整體架構 ![](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。