1.4.1 版本:
服务被Client端发现:
Nacos端定时拉取,udp主动推送
服务注册,服务发现(没有则进行查询).
udp丢了就丢了,再发一次./
- 心跳检测机制和服务发现机制 心跳机制和服务健康检查源码剖析
服务变动事件发布
- 定时心跳检查任务,集群数据间同步任务
eureka rw缓存,r 只读缓存和读写缓存, 30s的感知时间 为什么慢?: 因为有多级缓存需要同步.
启动三台机器,设置不同的端口号
比如有三台机器,按照名称进行取模运算,然后取到ip地址.
- 集群节点同步:
服务端其实就是http请求相互调用.
健康状态的同步:
健康实例数: 1->0 ,集群下的机器也会感知到.
一个服务实例下线后。http 直接发送请求,修改status状态。
image.png同步给其他节点用异步来做,不用同步去做.
oldMap和newMap 修改的只是某个特定区域的Map实例。
CP架构:
如何防止多节点读写并发冲突:
CopyOnWrite思想,Provider向注册中心注册,oldMap
[图片上传失败...(image-41cfd6-1656255684920)]
写时复制,缓存同步,http请求,心跳heartBeat task, 内存队列+异步,
根据name找服务器,iphash寻找机器,sync同步节点信息,
发送http请求进行上线下线,删除操作等.
Nacos配置中心源码分析.jpgNacos读写:
读的时候不加锁,只有更新的时候才会复制一份副本出来,这样原先的读还是不受影响.
写完把数据复制回去即可。 因为每个线程都有自己的一个副本变量,更新时候的可见性不能实时保证,加锁的话效率太低,针对这种读多写少的场景。用CopyOnWrite的思想去做非常合适.
网友评论