首页 > 其他分享 >Nacos一致性协议

Nacos一致性协议

时间:2023-10-20 18:45:59浏览次数:40  
标签:协议 Nacos 心跳 注册 一致性 Distro 节点 客户端

一、概要

Nacos是阿里开放的一款中间件,它主要提供三种功能:持久化节点注册,非持久化节点注册和配置管理。

二、一致性协议 - AP/CP

Nacos不是纯粹的AP服务,也不是纯粹的CP服务,而是两者同时支持。

这要从服务注册说起,Provider启动时将自身的信息注册至注册中心,如果注册中心是Zookeeper,在注册时可以选择注册临时节点或者永久节点。如果注册中心是Eureka,服务注册只能注册临时节点。

Nacos同时借鉴了两者的模式,如果在Nacos上注册临时节点,那么Nacos就是AP服务,保证高可用。如果Nacos上注册永久节点,那么Nacos就是CP服务,保证数据一致性。

Nacos对这两者区分实现,通过Distro协议来实现AP,通过Raft来实现CP

2.1 Distro-AP

Distro协议的主要设计思想如下:

  • Nacos每个节点都可以处理写请求,同时把数据同步到其他节点
  • 每个节点只负责部分数据,定时发送自己负责数据的校验值到其他节点来保持数据一致性
  • 每个节点独立处理写请求,及时从本地发出响应

其实和Eureka差不多,多了每个节点独立负责一部分数据这个特性

数据初始化

当新节点加入时,它会轮询所有的Distro节点,只要一个节点正常响应就会拉取全量数据。

数据校验

Distro集群启动后,各台机器之间会定期发送心跳,心跳信息主要为各个机器上的所有数据的元信息,这种数据校验会以心跳的形式进行,即每台机器在固定的时间间隔会向其他机器发起一次数据校验请求,一旦在数据校验过程中,某台机器发现其他机器上的数据与本地数据不一致,则会发起一次全量拉取请求,将数据补齐。

写操作

当客户端写入注册非持久节点的请求时,Distro集群处理的流程图如下:

Distro会计算当前数据所属的节点,如果当前节点不是处理该数据的节点,那Distro会将其转发至责任节点,再由责任节点对其做请求解析,然后跟随定时Sync任务,将数据同步到其他Distro节点上。

2.2 Raft-CP

Nacos通过Raft来实现CP,详细可以看这:分布式一致性算法Raft

不过Nacos已经准备用JRaft来替换Raft了,相关的特性正在开发中,JRaft的详细可以看这里:JRaft RheaKV 用户指南

三、心跳检测

Nacos的心跳检测比较有特色。常规的心跳检测方式有两种,一种是客户端主动上报,服务端一段时间未收到心跳就会将客户端下线。另一种是服务端主动去调客户端的心跳接口,如果没有得到正常响应或者超时就将客户端下线。

在注册中心的场景中,客户端的数量一定是会远多于服务端的,如果让服务端去主动轮询心跳接口,会给服务端比较大的压力,所以目前的主流选择都是让客户端去主动上报。

但是Nacos对临时节点和永久节点分别做了处理,如果是临时节点,那么就需要临时节点主动上报,如果是永久节点,Nacos可以主动发起TCP端口检查或者是HTTP接口检查,用来做健康检查。

Nacos的定义中,临时节点都是弹性扩容之后注册的,随着访问量下来,相关服务是会被回收的,而有的永久节点是无法发起健康检查的,例如一些三方服务,只能提供出一个接口用于心跳检查。

四、配置中心原理

客户端启动后,每30秒给Server发送一个心跳包,Server拿到心跳包之后,先对比一下数据版本,如果版本一样说明数据没有变化,这时Server不会立即将该心跳返回,Server会一直拿着这个心跳,此时和客户端保持长连接的状态,直到数据有变化或者持有超过29.5秒,如果客户端感知到数据版本发生变化,就会主动请求Server拉取数据。

阿里出品的中间件都有个特点,不像一个纯粹的中间件,更像是业务锤炼出来的产物,在RocketMQNacos上这种味道特别明显,它总是会考虑非常多的业务场景,在性能与好用性方面做一个取舍,使用阿里中间件的最大感受就是:它也许不是性能最好的,也许不是纯粹的,但是一定是最适合拿来做业务的。

标签:协议,Nacos,心跳,注册,一致性,Distro,节点,客户端
From: https://www.cnblogs.com/ciel717/p/17769502.html

相关文章

  • 使用Grafana监控Nacos的简单过程
    使用Grafana监控Nacos的简单过程背景与kafka一样,想同期监控一下nacos.发现nacos跟minio等一样都有对应的metrics的暴露接口.所以这边简单使用一下.studyFromhttps://blog.csdn.net/qq_30718137/article/details/117471732https://grafana.com/grafana/dashboards/132......
  • tcp/ip协议和opc协议对比详解
    TCP/IP协议和OPC协议是两种重要的网络协议,它们在不同的网络层级上运行,并为数据传输和通信提供了不同的功能。TCP/IP协议(TransmissionControlProtocol/InternetProtocol,传输控制协议/互联网协议)是互联网通信的基础协议,它定义了互联网中数据传输的基本规则和标准。TCP/IP协议包括......
  • Linux远程管理协议
    (RFB、RDP、Telnet和SSH)是Linux的远程管理协议。提到远程管理,通常指的是远程管理服务器,而非个人计算机。个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式。远程管理,实际上就是计算机(服务器)之间通过网络进行数据传输(信息交换)的过......
  • nacos源码启动
    Nacos2.3.0-SNAPSHOT最新版本源码启动最近研究nacos源码启动,把遇到的问题总结一下,希望可以帮助到大家1.nacos官方源码登陆从github上下载最新源码,github地址为https://github.com/alibaba/nacos.git用idea打开nacos项目找到/confg/src/main/resource/META......
  • celery包结构、celery延迟任务和定时任务、django中使用celery、接口缓存、双写一致性
    celery包结构project├──celery_task #celery包  这个包可以放在任意位置│├──__init__.py#包文件│├──celery.py#celery连接和配置相关文件,且名字必须叫celery.py│└──tasks.py#所有任务函数│├──add_task.p......
  • shein面试:nacos无入侵配置,做过吗,怎么做的?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 设备或平台通过GB28181协议接入上级平台不在线怎么办?
    设备或平台通过GB28181协议接入上级平台不在线可按如下方法排查:检查GB28181参数配置是否有问题摄像机或平台作为下级所配置的上级平台信息是否正确,如SIP服务器IP、端口、域、鉴权密码【注意鉴权密码要根据上级平台提供的秘钥来设置】等关键信息,这些信息一定要OK。以海康为例......
  • 网页文案 -- DDS 协议测试套件介绍
    概述  OMGDDS(Data-DistributionService)协议测试套件是北汇信息与臻容科技合作研发的针对DDS中间件软件的测试套件。该套件用于验证DDS(Data-CentricPublish-Subscribe,DCPS)软件的核心功能与OMGDDS相关标准规范的一致性,包括API(ApplicationProgrammingInterface)......
  • 传输层协议:TCP/IP协议,UDP的协议
    传输层:定义了⼀些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,⽤于传输可靠性要求⾼,数据量⼤的数据),UDP(⽤户数据报协议,与TCP特性恰恰相反,⽤于传输可靠性要求不⾼,数据量⼩的数据,如QQ聊天数据就是通过这种⽅式传输的)。主要是将从下层(应用层)接收......
  • 数据链路层传输协议(点到点):停等协议、GBN、SR协议
    数据链路层的传输协议:停等协议、GBN、SR停止等待协议(单窗口的滑动窗口协议) 滑动窗口协议:GBN、SRGBN协议 GBN发送方需响应的三件事1.上层调用(网络层)上层要发送数据时,发送方先检查发送窗口是否已满。如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据......