整体架构

  • 服务管理:实现服务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。

Nacos源码 (2) 核心模块的更多相关文章

  1. Nacos源码结构和AP模式注册中心实现介绍

    前言 NacosAP模式源码分析目录 微服务下的注册中心如何选择 Nacos使用和注册部分源码介绍 Nacos服务心跳和健康检查源码介绍 Nacos服务发现 Nacos源码结构介绍 Nacos版本基于 ...

  2. Nacos源码系列—关于服务注册的那些事

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 nacos,即可免费获取源码 简介 首先我们在看Nacos源码之前,要 ...

  3. 读Zepto源码之Event模块

    Event 模块是 Zepto 必备的模块之一,由于对 Event Api 不太熟,Event 对象也比较复杂,所以乍一看 Event 模块的源码,有点懵,细看下去,其实也不太复杂. 读Zepto源码 ...

  4. 读Zepto源码之Callbacks模块

    Callbacks 模块并不是必备的模块,其作用是管理回调函数,为 Defferred 模块提供支持,Defferred 模块又为 Ajax 模块的 promise 风格提供支持,接下来很快就会分析到 ...

  5. 读Zepto源码之Ajax模块

    Ajax 模块也是经常会用到的模块,Ajax 模块中包含了 jsonp 的现实,和 XMLHttpRequest 的封装. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

  6. 读Zepto源码之Selector模块

    Selector 模块是对 Zepto 选择器的扩展,使得 Zepto 选择器也可以支持部分 CSS3 选择器和 eq 等 Zepto 定义的选择器. 在阅读本篇文章之前,最好先阅读<读Zept ...

  7. 读Zepto源码之Form模块

    Form 模块处理的是表单提交.表单提交包含两部分,一部分是格式化表单数据,另一部分是触发 submit 事件,提交表单. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

  8. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  9. 读Zepto源码之Deferred模块

    Deferred 模块也不是必备的模块,但是 ajax 模块中,要用到 promise 风格,必需引入 Deferred 模块.Deferred 也用到了上一篇文章<读Zepto源码之Callb ...

  10. 读Zepto源码之Touch模块

    大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件. 读 Zepto 源码系 ...

随机推荐

  1. 【笔记整理】忽略https证书校验

    import requests url = "https://sam.huat.edu.cn:8443/selfservice/" # 默认不忽略ssl证书,如果有证书问题的网站会 ...

  2. Springboot快速集成阿里云RocketMq

    前言 随着互联网的兴起,越来越多的用户开始享受科技带来的便利,对于服务的压力也日益增大,随即便有了高并发.高性能.高可用等各种解决方案,这里主要介绍RocketMq的集成方法.(文末附源码地址) 正文 ...

  3. Windows系统激活工具HK

    下载:https://wwsi.lanzoum.com/iyUNn10e7foh 密码:g05d GitHub开源 .无毒 原文链接:https://github.com/zbezj/HEU_KMS_ ...

  4. ElasticSearch之Node query cache settings

    对于filter查询,ElasticSearch提供了缓存查询结果的特性,当缓存中存在满足查询条件要求的数据时,直接从缓存中提取查询结果. 对于ElasticSearch节点,该节点上的所有shard ...

  5. linux rz/sz 拖动文件上传

    不需要第三方上传文件直接 rz上传 拖动.以及 sz下载文件 多舒服 那么 他来了 安装与使用 yum安装 yum -y install lrzsz 使用上传文件,执行命令rz,会跳出文件选择窗口,选 ...

  6. wasm+pygbag让你在网页上也能运行Python代码:【贪吃蛇游戏】

    引言 最近小伙伴告诉我一种新的方法,可以使用wasm来使浏览器网页能够运行Python代码.这一下子激起了我的兴趣,因为这意味着用户无需安装Python环境就能直接运行我的demo,这真是太方便了.所 ...

  7. javascript中的标识符(JS)

    1.在javascript(JS)中所有的可以由我们自主命名的都可以称为是标识符. 例如:变量名.函数名.属性名都属于标识符. 2.标识符命名一个标识符时需要遵守如下的规则: 1.标识符中可以含有字母 ...

  8. Programming Abstractions in C阅读笔记:p242-p245

    <Programming Abstractions in C>学习第67天,p242-p245总结,总计4页. 一.技术总结 6.2小结主要讲回溯算法及递归算法在迷宫求解中应用,当然,理解 ...

  9. 2023-06-01:讲一讲Redis常见数据结构以及使用场景。

    2023-06-01:讲一讲Redis常见数据结构以及使用场景. 答案2023-06-01: 字符串(String) 适合场景 缓存功能 Redis 作为缓存层,MySQL 作为存储层,在大部分请求中 ...

  10. PLG SaaS 案例:如何实践外链自动增长策略?

    首先任何的商业逻辑,光流量增长,没法变现是没用的. 就像博客群发提效工具,得有对应的用户,更得有对应付费用户群体的画像.剩下的就是靠增长,被动让他们找到你的产品,用产品解决他们痛点,他们自然而然会付费 ...