首页 > 其他分享 >Nacos 之 Distro 协议

Nacos 之 Distro 协议

时间:2022-11-21 00:45:34浏览次数:42  
标签:协议 请求 Nacos 实例 数据 节点 Distro

1. 概述

Distro协议是阿里自研的一个最终一致性协议,继承了 Gossip 以及 Eureka 通信(PeerEurekaNodes)的优点并做进一步优化而出来的:

对于原生的Gossip,由于随机选取发送消息的节点,也就不可避免存在消息重复发送给同一节点的问题,这白白浪费了网络的传输带宽,也给消息节点带来额外的处理负载,Distro算法引入了权威Server的概念,每个节点负责一部分数据以及将自己的数据同步给其他节点,有效降低了消息冗余的问题。

Distro协议保证了在某些Nacos节点宕机后,整个临时实例处理系统依旧可以正常工作,保证了各个Nacos节点对于海量注册请求的统一协调和存储。

 

2. 设计思想

  • Nacos 每个节点是平等的都可以处理写请求, 同时把新数据同步到其他节点。
  • 每个节点只负责部分数据, 定时发送自己负责数据的校验值到其他节点来保持数据⼀致性。
  • 每个节点独立处理读请求, 及时从本地发出响应。
  • 数据存储在缓存中,并且会在启动时进行全量数据同步,并定期进行数据校验。

3. 原理说明

在 Distro 协议的设计思想下, 每个 Distro 节点都可以接收到读写请求。 所有的 Distro 协议的请求场景主要分为三种情况:

1)数据初始化:

新加入的 Distro 节点会进行全量数据拉取。 具体操作是轮询所有的 Distro 节点, 通过向其他的机器发送请求拉取全量数据。

 在全量拉取操作完成之后, Nacos 的每台机器上都维护了当前的所有注册上来的非持久化实例数据。

2)数据校验

在Distro集群启动之后,各台机器之间会定期的发送心跳。心跳信息主要为各个机器上的所有数据的元信息(之所以使用元信息,是因为需要保证网络中数据传输的量级维持在⼀个较低水平)。这种数据校验会以心跳的形式进行,即每台机器在固定时间间隔会向其他机器发起⼀次数据校验请求。

⼀旦在数据校验过程中,某台机器发现其他机器上的数据与本地数据不⼀致,则会发起⼀次全量拉取请求,将数据补齐。

 

3)写操作

对于⼀个已经启动完成的Distro集群,在⼀次客户端发起写操作的流程中,当注册非持久化的实例的写请求打到某台Nacos服务器时,Distro集群处理的流程图如下。

 整个步骤包括几个部分(图中从上到下顺序):

① 前置的Filter拦截请求,并根据请求中包含的IP和port信息计算其所属的Distro责任节点,并将该请求转发到所属的Distro责任节点上。
② 责任节点上的Controller将写请求进行解析。
③ Distro协议定期执行Sync任务,将本机所负责的所有的实例信息同步到其他节点上。

4)读操作

由于每台机器上都存放了全量数据,因此在每⼀次读操作中,Distro机器会直接从本地拉取数据,快速响应。

这种机制保证了Distro协议可以作为⼀种AP协议,对于读操作都进行及时的响应。在网络分区的情况下,对于所有的读操作也能够正常返回;当网络恢复时,各个Distro节点会把各数据分片的数据进行合并恢复。

 

4. 应用场景

1)当该节点接收到属于该节点负责的实例的写请求时, 直接写入。
2)当该节点接收到不属于该节点负责的实例的写请求时, 将在集群内部路由, 转发给对应的节点,从而完成读写。
3)当该节点接收到任何读请求时, 都直接在本机查询并返回(因为所有实例都被同步到了每台机器上) 。

 

5. 小总结

Distro 协议作为 Nacos 的内嵌临时实例⼀致性协议, 保证了在分布式环境下每个节点上面的服务信息的状态都能够及时地通知其他节点, 可以维持数十万量级服务实例的存储和⼀致性。

 

标签:协议,请求,Nacos,实例,数据,节点,Distro
From: https://www.cnblogs.com/sinoknots/p/16910134.html

相关文章

  • IIC协议master可以和master 通信吗
    协议介绍I2C(Inter-IntegratedCircuit)是一种通用的【总线协议】,一种简单的双向两线制总线协议标准;实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输......
  • K8s---【KubeSphere部署nacos集群】
    KubeSphere部署nacos集群1.准备nacos配置文件下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3注意:下载的是nacos-server-2.0.3.zip,而不是nacos。解压后......
  • QEMU调试Linux系统的USB协议栈
    QEMU调试Linux系统的USB协议栈通过使用QEMU调试Linux系统的USB协议栈来学习USB协议栈。mingdu.zhengatgmaildotcom安装QEMUsudoapt-getinstallqemu-system-i386启动......
  • lwIP协议栈timeouts->next->time赋值导致BusFault异常的解决办法
    所有调用了lwIPAPI的线程都应该使用lwIP的sys_thread_new来创建。mingdu.zhengatgmaildotcom解决办法所有调用了lwIPAPI的线程都应该使用lwIP的sys_thread_new来创建......
  • 应用层协议之DNS、DHCP
    运输层为应用进程提供了端对端的通信服务,但不同的网络应用的应用进程之间,还需要有不同的通信规则。因此在运输层协议之上,还需要有应用层协议。应用层中有这些常见的协议......
  • 网络变成前戏和OSI七层协议
    目录一、软件开发架构1.什么是软件开发架构2.软件开发架构架构方式一:c/s架构架构方式二:b/s架构架构优劣势二、架构总结三、网络编程前戏1.什么是网络编程2.学习网络编程的......
  • mac安装nacos方式二
    1、去gitlub上拉取nacos的文件包以命令行的形式去启动2、用户docker安装nacos进行启动下面方式存在一个问题mac出现xxx.alibaba.xx包notfound可以使用 https://blog.......
  • 理解TCP/IP、HTTP、FTP、 NTP、 SNMP、VRRP等常用协议(VRRP)
    VRRP(VirtualRouterRedundancyProtocol)------虚拟路由器冗余协议,其最新技术标准是RFC3768。1  概述1.1  产生背景随着​​Internet​​​的发展,人们对网络可靠性的要......
  • 腾讯开源的 Fermas ,开源协议有毒
    从Fermas的开源协议来看,商业应用是需要获得商业许可的。https://github.com/polarismesh/femas/blob/develop/LICENSE ......
  • 理解TCP/IP、HTTP、FTP、 NTP、 SNMP、VRRP等常用协议(FTP)
    FTP概述文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在传输文件时,FTP客户端程序先与......