nacos 概述
官网:https://nacos.io/zh-cn/docs/what-is-nacos.html
概述
nacos可充当服务注册中心、配置中心,整体架构如下:
provider app:服务提供方,向nacos注册服务信息及元数据
consumer app:服务消费方,从nacos获取服务提供方信息,发起服务调用
open api:nacos提供了api与客户端交互,通过api注册删除更新服务信息、配置信息等
config service:配置服务,存储应用的配置信息,实现配置数据的集中管理与动态更新
name service:对象名和其关联的元数据的映射管理,服务发现和 DNS 就是名字服务的2大场景
consistency protocol:一致性协议,nacos可集群部署实现高可用,使用raft协议选主与数据局同步
nacos console:nacos提供了控制台,方便用户查看、修改nacos中的数据
raft 协议
*********
选主
正常情况下,集群节点只有两种状态:leader、follower,当leader故障之后,触发选主过程;
每个follower节点都有一个倒计时器(150-300ms之间的随机数),当收到leader心跳数据,重置倒计时器,此时由于leader故障,follower收不到重置请求,转变为candidate状态,向其他节点发出投票请求;
其他follower节点收到投票请求后,会比较当前节点与投票请求节点的日志数据,如果投票请求节点的日志数据更新,则同意投票,否则拒绝投票;
如果投票请求节点获取超过半数投票,则成为主节点;否则发起新一轮投票(其他follower节点由于收不到leader节点的心跳数据,也会转变成为candidate,也会发出投票请求),直至选出主节点为止
*********
数据同步
正常写入过程:
集群中的任意节点收到数据写入请求,将写入请求转发给leader;
leader先在本地写入,然后将数据发送给follower;
follower将写入状态发送给leader,写入不成功的,leader会不断发送数据进行重试,
半数follower写入成功之后,leader提交数据,并向客户端返回数据写入状态
leader节点故障,恢复后转变为follower数据恢复:
如果数据不一致(旧的leader写入,其余follower都未写入的数据),需要先做日志截断,再做数据同步;
如果旧的主节点数据落后太多,需要先根据新的leader节点的快照数据恢复数据,再做数据同步
注册中心
*********
基本功能
服务提供者在启动时向注册中心注册服务信息,关闭时注销服务信息
服务消费者可从注册中心获取可用的服务提供方信息
注册中心检查服务提供者可用性,下线不可用的服务提供者
*********
nacos 实现原理
服务提供者通过open api注册服务信息,并定时发送心跳数据
服务消费者通过open api获取服务提供方信息,并通过定时任务每隔10s拉取一次数据;
nacos server如果检测到服务提供方出现异常,会将异常信息推送给服务消费者
服务健康检查:服务提供端定时发送心跳、nacos server定时检查
服务提供端(客户端):通过定时任务向nacos server发送心跳数据,并启动线程不断检测nacos server的响应,如果超时没有收到回应,则认为nacos server故障
nacos server(服务端):nacos server会开启定时任务检查服务的最后更新时间,当收到客户端的心跳数据后,会更新服务的最后心跳时间,如果超时没有更新,则将服务标记为不健康状态,同时将服务异常信息推送给服务消费端
消费端服务动态感知:消费端定时拉取数据、nacos server异常推送
服务消费端:消费端拉取数据时会注册事件监听,每隔10s拉取最新数据
nacos server:nacos server与服务提供端有心跳检测机制,会检查服务健康状态,当检测到服务异常之后,会将异常信息推送给消费端;当消费端收到异常推送后,会更新本地存储的服务信息
配置中心
配置数据增删改:客户端通过open api向nacos server添加、更新、删除配置数据
配置数据持久化:默认使用derby文件型数据库在本地存储,可使用mysql存储配置数据
配置数据动态监听:客户端使用长轮询定时从nacos server拉取数据,如果有数据更新立即返回;如果没有数据更新,等待一段时间(默认30s),如果在此期间有数据更新立即返回,如果没有数据更新,等待到期后返回空数据
说明:长轮询返回的数据不是数据内容,而是变更数据的key(dataId、groupId、tenant),然后通过key去nacos server获取数据



