![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
nacos
指尖流年999
试试
展开
-
nacos集群脑裂问题解决
脑裂问题通常是发生在节点间不能通信情况下,集群可能会分裂出多个leader的小集群。如何避免脑裂问题,nacos和zookeeper都是在leader选举的时候,需要半数投票通过才能选举成为leader;公式:节点投票数>总节点数/2集群采用奇数节点是因为奇数个最高效和节省资源。...原创 2021-12-11 16:50:42 · 3512 阅读 · 0 评论 -
nacos集群 raft协议下数据同步原理(cp模式)
nacos集群在选举之后,其他节点需要从leader节点同步数据,leader会在心跳间隔时间的时候会给其他节点发送数据,心跳间隔大概几百毫秒。如果客户端发来数据,nacos集群两阶段提交;首先客户端发送的请求需要转交给leader处理,leader第一步将数据写入到log日志中,然后发送数据给从节点,从节点收到数据后,也存入log日志,然后发送ack给leader确认已经写入日志,然后leader再往自己本地缓存写一份,然后发送commit提交请求给从节点,从节点收到leader消息后也会写入缓存然后原创 2021-12-11 16:23:50 · 3038 阅读 · 0 评论 -
nacos集群 raft协议下选举原理(cp模式)
nacos集群节点每个节点都有随机休眠时间,此时每个节点都是follower角色,谁先休眠结束唤醒来,谁先发起选举投票,此时该节点会更改乘candidate(候选者,选举者)角色,发起投票的会先给自己发送一票,然后发送投票给其他节点,其他节点还在如果还在休眠中,则会默认认可发起者为leader,则会返回投票个给发起者,根据选举半数原则,达到投票半数以上,此时发起者会变成leader;如果发起投票的时候,其他节点也休眠唤醒了,也会发起投票给其他节点,相当于两个节点同时在发起投票,这种情况的选举无效,需要重新休原创 2021-12-11 16:05:12 · 1553 阅读 · 0 评论 -
cap原则和base原则
cap原则c: consistency 一致性a: availability 可用性p:partition tolerance 分区容错性base原则:ba:基本可用s: 软可用e:最终一致性cap原则是三选二 ,base原则是cap原则的折中,分布式中优先保证p,然后在c和a中做选择。p是分区容错性,主要是在多节点的部署的系统中,多节点部署在不同的网络分区里,由于网络原因会导致多节点之间无法同步数据,容错是指即使是分区了也要保证系统的可用性。nac...原创 2021-12-11 13:48:00 · 946 阅读 · 0 评论 -
nacos集群服务新增数据同步源码
nacos集群新增了一个节点的时候,会在DistroProtocol构造方法里进行数据同步,执行startDistroTask()方法,在调用startLoadTask方法,调用DistroLoadDataTask任务,run方法调用load方法,在调用loadAllDataSnapshotFromRemote,再到用NamingProxy.getAllData获取某个节点的所有数据一次性同步过来,调用的是nacos服务端的/distro/datums接口获取数据。...原创 2021-12-10 17:40:54 · 543 阅读 · 0 评论 -
nacos心跳机制与服务健康检查原理(源码)
nacos服务注册的时候会调用addBeatInfo创建一个延时定时心跳任务beatTask,调用nacos服务端的/instance/beat接口,nacos服务会每隔5秒会发送一个心跳。nacos服务端收到nacos注册后,会创建一个延时定时的任务(ClientBeatCheckTask),在nacos集群模式下会根据服务数量进行hash取模,得到的服务机器进行处理任务,定时判断nacos实例客户端是否还存活,如果超过15秒还是还没收到客户端的心跳,则会更新实例的healthy属性为false,如果原创 2021-12-10 17:28:46 · 1049 阅读 · 0 评论 -
nacos服务注册原理源码分析
nacos客户端启动的时候发起服务注册,nacos利用NacosDiscoveryAutoConfiguration类中的NacosAutoServiceRegistration的实例,调用该实例的register注册方法,然后该方法调用的是父类AbstractAutoServiceRegistration的register方法,该方法中serviceRegistry.register方法,封装一个NamingService对象,调用该对象的registerInstance方法,传入服务id和组还有注册实例原创 2021-12-10 16:41:05 · 444 阅读 · 0 评论