article cover

Nacos源码学习计划-Day13-集群-Nacos中Raft协议的具体实现 技术文档

这里我们尝试走进Nacos底层对这Raft协议的实现和使用进行进一步的学习和了解,内容很多,但是考虑到Nacos在后期版本中转而使用JRaft了,这里大家尽量看,实在看不下去了解即可。
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day12-集群-CAP原则和Raft协议和Distro协议理论前提 技术文档

Nacos的内核设计中,一开始的目标就是尽可能减少用户部署和运维的成本,即用户只需要一个程序包就能迅速的部署和使用Nacos单机服务和集群服务(来自阿里官方电子书《Nacos架构与原理》)。但是我们知道,Nacos本身是一个需要数据存储的一个组件,也就是说Nacos内部实现数据存储。如果是单机服务还好说,在Nacos内部内嵌关系型数据即可,但是在集群环境下,...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day11-集群-集群新增节点进行已有数据的同步 技术文档

当我们为Nacos集群中新增一个Nacos节点,以及某个Nacos节点宕机后需要重启,这两个情况下都会需要同步其他节点的数据,所以这次我们围绕这个需求,来看看Nacos中如何实现的 找到主线 从这个需求来看,肯定是服务启动的时候就需要去进行同步,所以肯定关键点肯定在于一些初始化,init,构造方法中,所以这次的找主线任务是比较难的,只能通过大量阅读源码或者搜...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day10-集群-集群节点健康状态变更数据同步 技术文档

当我们搭起Nacos集群的时候,我们在Nacos的Web管理页面可以看到“集群管理”栏目,在这里面,列出集群内节点的IP,状态,以及元数据 // 元数据结构如下 {    // 最后刷新时间    "lastRefreshTime": 1674093895774,    //...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day09-集群-新增微服务实例 技术文档

今天,我们来学习Nacos集群环境下,如果某个微服务注册到了某个Nacos节点上,即新增了一个服务实例的时候,是如何在集群内进行同步的。 这一段的实现逻辑在Nacos1.4中设计比较麻烦,所以本次的内容可能会比较绕。这里采用总分的方式,也就是我们先直接上一个总结设计描述,然后再查看每个部分的源码 新增实例整体逻辑描述 Nacos 是利用了双层内存队列 + 异...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day08-集群-心跳健康检查 技术文档

我们前面已经就Nacos单机部署情况下,服务上线,服务下线,心跳健康检测三个最主要的方面,从服务端和客户端两个方面都进行了学习,接下来我们要学习Nacos集群相关的部分。我们首先来想想,Nacos集群和单机下,某些策略/逻辑/实现一定一样的么?会遇到哪些新的问题?例如 Nacos单机下,服务端会开启心跳健康检查的定时任务,集群状态下,有没有必要所有的集群节点...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day07-服务下线+第一阶段总结 技术文档

当我们在关闭Nacos客户端的时候,就会同之服务端进行服务下线操作,并且在服务下线的时候,我们知道其他客户端中存在缓存的,所以其实也是需要通知其余客户端更新缓存信息的(当然,前面我们有分析过,在新版本的Nacos中,客户端的缓存已经不再是首查,而是作为兜底的存在,所以这个情况下相对而言就没那么需要通知客户端进行缓存更新操作) 这一章主要就是来看Nacos服务...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day06-服务端检测不健康实例 技术文档

在Nacos的管理界面中,我们可以看到会展示健康实例的个数,这个数据是怎么获取的?Nacos服务端是如何知道对应的客户端状态是否可用的呢? 其实我们在《02-客户端如何发其注册》这一章节中,我们提到和分析过客户端发送心跳的逻辑,也就是通过这个心跳,让服务端知道客户端的状态,这个BeatInfo最终也还是落到了一个HTTP请求,转门发送到了Nacos服务端的心...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day05-服务调用时的调用链路(如何获取服务信息) 技术文档

前面的内容中,我们已经了解到了服务是如何触发自动注册到Nacos中,以及对应的Nacos中是如何处理这个注册请求的(如何保存服务到内存中的) 当我们的服务注册后,我们就可以通过Nacos对于已经注册的所有的服务进行Feign的方式进行服务之间的调用,那么这个过程是如何实现的呢?今天就来探索这个问题 首先我们来理一下整个服务调用的流程: 每个客户端(服务调用者...
ZealSinger 发布于 
article cover

Nacos源码学习计划-Day04-服务端如何处理客户端的注册请求(下) 技术文档

上一篇文章中,我们整体分析了服务端接收到请求,到了哪个Controller,以及这个Controller的后续处理逻辑,我们能知道最终这个Controller的操作结果是:将信息封装为了Instance对象,创建一个对应的Key,将其封装保存在了DataStore这个对象中,并且将key和action封装为一个Pair二元组且使用addTask方法将其放入到...
ZealSinger 发布于