关于 Nacos 任务执行引擎的设计 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_read关于 Nacos 任务执行引擎的设计// 任务的抽象.public interface NacosTask {/** * Judge Whether this nacos task should do. * * @return true means
一致性协议的抽象 一致性,即多个副本之间是否能保持一致的特性. 而副本的本质就是数据,对数据的操作,不是获取就是修改. 同时,一致性协议其实是针对分布式情况的,所以必然会涉及多个节点. 因此,需要有相应的接口能够调整一致性协议的协同工作节点.所以,一致性协议其实更加关注的是读、写在集群间的一致性.ConsistencyProtocolpublic interface ConsistencyProtocol<T extends Config, P extends RequestProcessor> exten
Nacos NamingServer 再分析 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_readNacos NamingServer 再分析NamingServer 先从 @CanDistro 这个注解说起吧.1.按服务名选择 nacos 节点,即一个服务的实例增删改,只由特定的 nacos 节点负责.上面的描述如何理解了?先看下如下的注解:/
Nacos 事件模型补充 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_readNacos 事件模型补充:在 Nacos 中,事件模型模块,出镜最高的是 NotifyCenter. 我们先从这个入手,看下其是如何设计的.NotifyCenter 代码注释第一行:统一事件通知中心.其中有一个很重要的属性:private static
Client-NacosConfigService 再分析 先看下 Client 端 NacosConfigService 的核心组件:两大核心组件:ServerHttpAgent 和 ClientWorker.需要注意的是,在 ServerHttpAgent 中,有一个 ServerListManager 成员变量. 这个类就是为了获取 nacos server 服务列表.现在支持两种方式,一种是固定 ip 的,另一种是从服务器获取 nacos server 列表.需要注意的是,在 ServerHttpAgent 中,有一个 ServerListMana
nacos-client源码分析 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_readnacos-client 源码分析IConfigRequest 的作用,我理解是配置请求.void putParameter(String key, Object value);Object getParameter(String key);IConf
EventDispatcher 的原理 先说下 EventDispatcher 的原理:EventDispatcher 核心功能:1.管理 listener2.触发事件Entry 是说将 event 分组,因为每个 event 可能有多个不同的 listener 关注.AbstractEventListener 表征感兴趣的事件,子类需要重写 interest 和 onEvent 方法.再说下 listener 在 nacos 中的实现类:1.LongPollingService1.1ClientLongPolling 对客户端长
NacosConfigServer 初始化流程 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_readNacosConfigServer 初始化流程.1.NacosConfigService 的构造1.1初始化 namespace1.2初始化 HttpAgent(一个关于发起 http 请求的代理,httpAgent 有关于 token 续期的处理)1
NACOS 设计 说明:本篇文章部分内容参考了网上的文章(在下文已给出原文链接),由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!该项目的地址:https://github.com/xiaoheng1/nacos_readNACOS 设计1.首先明白如下概念:namespace 命名空间 —— 环境group 分组 —— 项目dataId 配置集 —— 工程首先 Nacos 数据是存储在数据库的,不管是内置数据库,还是外置的.参考:com.alibaba.nacos
Nacos Auth 模块分析 关于安全如何设计:@Retention(RetentionPolicy.RUNTIME)public @interface Secured {/** * The action type of the request. * * @return action type, default READ */ActionTypes action() default ActionTypes.READ;/** * The name of resource related to the request.
Kafka 索引设计 先看下索引的类图设计:abstract class AbstractIndex(@volatile private var _file: File, val baseOffset: Long, val maxIndexSize: Int = -1,val writable: Boolean) extends Closeable {import AbstractIndex._// Length ...
Dubbo Monitor 分析 DubboRCP调用次数和调用时间的监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor、MonitorService.MonitorService 主要提供两个接口,收集和查找监控数据./*** Collect monitor data* 1. support invocation count: count://host/interface?application=foo&method=foo&...
JVM参数优化及OOM故障分析步骤 关于 JVM 参数优化步骤1.上线前:先合理评估自己系统的压力,合理设置参数2.上线后:通过 jstat 命令监控显示系统的 eden 区增长速度,ygc 频率和耗时,老年代增长频率,耗时,然后优化参数关于 GC 问题定位排查1.通过 jstat 分析新生代、老年代对象增速,耗时和频率2.分析代码逻辑,也可以转存堆内存快照,使用 MAT 工具进行分析.OOM 分析解决1.看是那块内存抛出异常,比如堆、栈、Metaspace 区域2.如果是栈内存溢出的话,通过日志,定位栈内存溢出的地方,然后分
一次 gc 日志分析 /*** -XX:NewSize=5242880* -XX:MaxNewSize=5242880* -XX:InitialHeapSize=10485760* -XX:MaxInitialHeapSize=10485760* -XX:SurvivorRatio=8* -XX:PretenureSizeThreshold=10485760* -XX:+UseParNewGC* -XX:+UseConcMarkSweepGC* -XX:+PrintGCDetails* -XX:+PrintG
Mybatis PagerHelper 实现原理 首先说下使用.@Overridepublic PageInfo selectDocByPage1(int currentPage, int pageSize) {PageHelper.startPage(currentPage, pageSize);List docs = docMapper.selectByPageAndSelections();PageInfo pageInfo = ...
Mybatis # 和 $ 的区别及参数如何对应 调试 ParamNameResolver.final Annotation[][] paramAnnotations = method.getParameterAnnotations();二维数组,第一维是参数长度,第二维是注解个数.1.看参数上是否有 @Param 注解,有就读取该注解中的值.2.如果第1步不成立,则看能否获取实际参数名.3.如果还不行,则是第几个参数(排除特殊参数,例...
SpringMVC工作流程 DispatcherServlet 为 SpringMVC 处理 servlet 的入口.在 doService 方法中调用 doDispatcher 方法,也就是说业务逻辑主要是在 doDispatcher 中实现.HandlerMapping 抽象了请求 URL 到请求处理器之间的映射. 当一个请求过来时,DispatcherServlet 会轮询 HandlerMapping 那个请求...
Mybatis 插件原理 MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setPa...
Mybatis启动流程分析 1.解析配置文件,包括 mybatis-config.xml、mapper.xml 文件.2.获取 xxxMapper.直接定位到 RegisterMapper 类中.public T getMapper(Class type, SqlSession sqlSession) {final MapperProxyFactory mapperProxyFactory = (MapperPr...