Nacos架构与原理 - 自研 Distro 协议 (AP分布式协议)

news2024/11/30 6:36:53

文章目录

  • 背景
  • 设计思想
  • Distro 协议工作原理
    • 数据初始化
    • 数据校验
    • 写操作
    • 读操作
  • 小结

在这里插入图片描述


背景

Distro 协议是 Nacos 社区自研的⼀种 AP 分布式协议,是面向临时实例设计的⼀种分布式协议,其保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。

作为⼀种有状态的中间件应用的内嵌协议,Distro 保证了各个 Nacos 节点对于海量注册请求的统⼀协调和存储。


设计思想

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

  • 每个节点是平等的都可以处理写请求,同时把新数据同步到其他节点。

  • 每个节点只负责部分数据,定时发送自己负责数据的校验值到其他节点来保持数据⼀致性。

  • 每个节点独立处理读请求,及时从本地发出响应。


在这里插入图片描述

Distro 协议工作原理

下面几节将分为几个场景进行 Distro 协议工作原理的介绍。

数据初始化

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

在这里插入图片描述

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


数据校验

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

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


写操作

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

在这里插入图片描述

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

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

读操作

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

在这里插入图片描述

这种机制保证了 Distro 协议可以作为⼀种 AP 协议,对于读操作都进行及时的响应。

在网络分区的情况下,对于所有的读操作也能够正常返回;当网络恢复时,各个 Distro 节点会把各数据分片的数据进行合并恢复。


小结

Distro 协议是 Nacos 对于临时实例数据开发的⼀致性协议。其数据存储在缓存中,并且会在启动时进行全量数据同步,并定期进行数据校验

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

  1. 当该节点接收到属于该节点负责的实例的写请求时,直接写入。

  2. 当该节点接收到不属于该节点负责的实例的写请求时,将在集群内部路由,转发给对应的节点,从而完成读写。

  3. 当该节点接收到任何读请求时,都直接在本机查询并返回(因为所有实例都被同步到了每台机器上)。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware Workstation 17 安装教程

哈喽,大家好。今天一起学习的是VMware Workstation 17的安装,vm虚拟机是小编非常喜欢的生产力软件,小编之前发布的测试教程钧在vm上进行的实验。 VMware Workstation是一款功能强大的桌面虚拟计算机软件,它能够让用户在宿主机操作…

mac 电脑CPU温度怎么看?怎么可以监控Mac CPU温度,为什么我的 MacBook Air 这么热?

众所周知,电脑温度太高会直接影响到系统运行速度,对硬盘伤害也是很大的。特别是夏天,Mac 笔记本有时候运行起来会比较烫。关于 Mac 笔记本的散热,见仁见智。但是我们也比较好奇 CPU、电池的温度。怎么查看Mac CPU温度呢&#xff1…

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用(1编译器)

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用(1) 目录 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用(1)Linux编译器-gcc/g使用gcc的编译过程预处理(进行宏替换)编译&a…

2023/6/8总结

MySQL必知必会 commit 和 rollback 的差异是commit会提交,而rollback不会,就好像是撤回。 使用保留点: 简单的rollback和commit语句就可以写入或者撤销整个事务处理,但是,只是对简单的事务处理才能这样做&#xff0…

chatgpt赋能python:Pythontypedef:介绍及使用方法

Python typedef: 介绍及使用方法 Python作为一种高级编程语言,支持定义类型别名,可以给现有类型起一个新的名字,从而提高代码的可读性和可维护性。在本文中,我们将介绍Python中的typedef概念及其使用方法。 什么是Python typede…

BiFormer实战:使用BiFormer实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试热力图可视化展示…

【新申请】新SRRC容易Fail点分享 2.4G和5.8G的干扰规避判定方法

新SRRC容易Fail点分享 一、2.4G 产品针对于高信道边带变严格了,在之前带外杂散limit为-80dBm/Hz的基础上增加了一段2483.5MHz-2500MHz限值为-40dBm/MHz, 计算可得-100dBm/Hz, 限值严格了20dB。 二、2.4G和5.8G低频发射杂散变严,新规2.4G和5.8G限值变为…

三相PWM整流器有限集模型预测电流控制MATLAB仿真模型

三相PWM整流器有限集模型预测电流控制MATLAB仿真模型-Matlab文档类资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87881809模型简介: 整流器交流侧为三相对称电压,220V/50Hz,直流侧为760V,且电压可调。其中模…

Java 八股文-基础篇

Java 基础 一、Java 概述 1.什么是 Java? Java 是一门面向对象的编程语言,不仅吸收了 C语言的各种优点,还摒弃了 C里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编…

树莓派安装 VScode 与卸载 VScode

0. 实验准备 一个带有系统的树莓派(有屏幕更好) 一台联网的电脑,且可以使用 VNC 登录树莓派(与屏幕二选一) 一个可以与树莓派交互文件的软件、如:MobaXterm(推荐)、WinSCP 1. 获取…

ch7_1指令系统

计算机硬件与软件之间的接口, 指令系统。 1.机器指令 1.1 指令的格式 指令的格式是什么? 操作码,地址码,寻址方式; 指令的字长,可以分为固定字长,可变字长; 操作码的长度可以是…

chatgpt赋能python:Python下Maskout

Python下Maskout Python下Maskout是一种图像处理技术,用于去除图像中的特定区域或对象。Maskout通常用于图像分割,图像合成,深度学习等方面,在许多应用程序中都有很高的需求。本文将向您介绍Python下如何实现Maskout,…

读改变未来的九大算法笔记07_搜索引擎

1. 车库轶事 1.1. 1939年 1.1.1. 戴夫休利特(Dave Hewlett) 1.1.1.1. 惠普(Hewlett-Packard) 1.2. 1976年 1.2.1. 蒂夫乔布斯(Steve Jobs)和史蒂夫沃兹尼亚克(Steve Wozniak) …

chatgpt赋能python:PythonPip(包管理器):即插即用的方式

Python Pip(包管理器): 即插即用的方式 Python Pip是Python的包管理器,目的是为了简化Python包的安装和管理。Python Pip让用户可以轻松地添加、更新和删除Python包。 安装Pip 在安装Python的时候,一般情况下,Pip就…

遗留的 AppSec 工具迷失在云端

随着应用程序开发步伐的加快,IT 和安全团队正在对旧的应用程序安全(AppSec) 工具失去信心。 根据 Backslash 对 300 名 CISO、AppSec 经理和工程师的调查,遗留工具无法跟上并陷入永远的追赶游戏。 影响是深远的,大多数组织都看到云原生 App…

2023中兴捧月图像赛道-任意尺度盲超分初赛第三方案

任意尺度盲超分-初赛第三方案 吐槽篇方案篇一、左脚踩右脚二、梯度攻击 建议篇 吐槽篇 正文内容.正式讲述方案之前,容我先吐槽两句,真tm的是比赛,纯纯ex人。学历厂就别打着以赛招聘的口号,要985计算机的直接去他们学校里宣讲嘛&am…

限制docker日志

为啥要清理服务器上docker容器的日志? 因为是服务器的磁盘空间资源有限,由于docker容器在启动的时候没有限制,导致运行的docker容器随着时间的推移产生的日志越来越多,最后把服务磁盘资源耗尽,服务器的磁盘满了会导致…

MySQL实战:如何设计一个常用的后台管理系统的数据库结构

部分数据来源:ChatGPT 什么是后台管理系统? 后台管理系统是指用于管理和维护网站或应用程序的后台界面系统,通常包含用户管理、权限管理、数据管理等功能,能够方便快捷地管理网站或应用程序。常见的后台管理系统有Cms、OA等&am…

元素的alt和title属性相关细节知识

文章目录 I. 引言alt和title属性的作用和原理元素的alt和title属性的区别 II. 元素的alt属性元素的alt属性alt属性的作用alt属性的使用场景引用实例说明alt属性的应用 III. 元素的title属性元素的title属性title属性的作用title属性的使用场景引用实例说明title属性的应用 IV. …

chatgpt赋能python:Python新手必备:如何下载Jupyter

Python新手必备:如何下载Jupyter 如果你正在寻找一个强大而简单的Python编程环境,那么Jupyter可能是你需要的软件。Jupyter是一种交互式的编程环境,让你可以在浏览器中创建和共享笔记本,适合编写数据分析、机器学习、人工智能等方…