Nacos内核设计之一致性协议(上)

2023-09-21 17:00:34

Nacos一致性协议


Nacos技术架构

image.png

先简单介绍下Nacos的技术架构 从而对nacos有一个整体的认识 如图Nacos架构分为四层 用户层、应用层、核心层、各种插件 再深入分析下nacos一致性协议的发展过程及原理实现

为什么nacos需要一致性协议

Nacos是一个需要存储数据的一个组件 为了实现这个目标,就需要在Nacos内部实现数据存储 单机下其实问题不大,简单的内嵌关系型数据库即可 但是集群模式下 就需要考虑如何保障各个节点之间的数据一致性以及数据同步 而要解决这个问题 就不得不引入共识算法 通过算法来保障各个节点之间的数据的一致性

为什么Nacos会在单个集群中同时运行CP协议以及AP协议呢

  • 从服务注册来看

服务之间感知对方服务的当前可正常提供服务的实例信息,必须从服务发现注册中心进行获取,因此对于服务注册发现中心组件的可用性,提出了很高的要求,需要在任何场景下,尽最大可能保证服务注册发现能力可以对外提供服务

image.png

服务A和服务B往注册中心注册 服务A从注册中心获取服务B的信息 访问服务B 服务B从注册中心获取服务A的信息 访问服务A

image.png

如果数据丢失的话,是可以通过心跳机制快速弥补数据丢失

  • 对于非持久化数据(即需要客户端上报心跳进行服务实例续约)

不可以使用强一致性共识算法

image.png

必须要求集群内超过半数的节点正常 整个集群才可以正常对外提供服务

最终一致共识算法

最终一致共识算法的话,更多保障服务的可用性,并且能够保证在一定的时间内各个节点之间的数据能够达成一致

  • 对于持久化数据

强一致性

因为所有的数据都是直接使用调用Nacos服务端直接创建,因此需要由Nacos保障数据在各个节点之间的强一致性,故而针对此类型的服务数据,选择了强一致性共识算法来保障数据的一致性

image.png

nacos集群包括3个节点 分别位于不同的网络分区 服务A往节点1上注册 然后持久化到节点1对应的本地存储上 此时要保证节点1对应的持久化数据必须同步到节点2和节点3上

  • 从配置管理来看
    强一致性

image.png

在nacos服务端修改了配置 必须同步到集群中的大部分节点即必须要求集群中的大部分节点是强一致性的

强制一致性算法的选择

image.png

Nacos选择了JRaft 是因为JRaft支持多RaftGroup,为Nacos后面的多数据分片带来了可能

最终一致性算法的选择

image.png

最终一致性协议算法 例如Gossip和Eureka内的数据同步算法 而Nacos使用的是阿里自研的Distro算法 该算法集中了Gossip和Eureka同步算法的优势

Gossip缺点

image.png

对于原生的Gossip,由于随机选取发送消息的节点,也就不可避免的存在消息重复发送给同一节点的情况,增加了网络的传输的压力,也给消息节点带来额外的处理负载

Distro

image.png

引入了Server的概念 每个节点负责一部分数据以及将自己的数据同步给其他节点,有效的降低了消息冗余的问题

更多推荐

类加载器 - 双亲委派模型

文章目录回顾一下类加载过程类加载器类加载器介绍类加载器加载规则类加载器总结自定义类加载器双亲委派模型双亲委派模型介绍双亲委派模型的执行流程双亲委派模型的好处打破双亲委派模型方法本文参考:类加载器详解(重点)|JavaGuide(Java面试+学习指南)回顾一下类加载过程开始介绍类加载器和双亲委派模型之前,简单回顾一下类

怎样提高服务器安全性?45.248.10.x

服务器被攻击一般有两种比较常见的方式:一是恶意的攻击行为,如拒绝服务攻击,网络病毒等等,这种方式就是消耗服务器资源,影响服务器的正常运作,甚至服务器所在网络的瘫痪;另外一个就是恶意的入侵行为,这种行为更是会导致服务器敏感信息泄露,入侵者更是可以为所欲为,肆意破坏服务器。所以我们要保证网络服务器的安全可以说就是尽量减少网

vite + vue3 的项目中使用 vitest 做单元测试(仅供参考)

一、配置文件//vitest.config.tsimport{fileURLToPath}from'node:url'import{mergeConfig,defineConfig}from'vite'import{configDefaults}from'vitest/config'//importviteConfig

探索工业路由器如何助力无人驾驶方案的突破性解析

随着无人驾驶技术的发展,越来越多的企业和组织开始部署无人驾驶车辆来提高运输效率和安全性。在这些方案中,工业路由器被广泛应用于建立稳定、安全和高效的通信网络。在本篇文章中,我们将分享一个真实的无人驾驶方案部署案例,其中工业路由器使用了星创易联的SR800-d,它如何助力无人驾驶方案的实现。案例背景:某物流公司是一家专注于

【Node.js】模块化:

文章目录1、模块化的基本概念2、Node.js中模块化【1】Node.js中模块的分类【2】加载模块【3】模块作用域【4】向外共享模块作用域中的成员【5】模块化规范3、npm与包(包/依赖/插件)【1】包的基本知识:【2】开发属于自己的包【3】发布包4、模块的加载机制【1】优先从缓存中加载【2】内置模块的加载机制【3】

在Ubuntu系统上实现免费电脑IP更改

大家好!今天我要为大家分享一个关于如何在Ubuntu系统上免费实现电脑IP更改的知识。IP地址更改在某些情况下非常有用,可以帮助我们解决网络连接问题、绕过限制以及加强网络安全等。而在Ubuntu系统上,我们可以采用一些简单的方法来免费更改电脑的IP地址。现在让我们一起来了解一下吧!方法一:使用命令行工具Ubuntu系统

打开泰坦陨落提示msvcp120.dll丢失怎么办?三个解决方法快速解决

首先,我们来了解一下msvcr120.dll是什么文件。msvcr120.dll是一个动态链接库文件,它是MicrosoftVisualC++2013Redistributable中的一个组件。这个文件对于一些软件的运行是非常重要的,如果缺失或损坏,就会导致软件无法正常运行。那么,msvcr120.dll为什么会丢失呢

VL 模型 Open-Set Domain Adaptation with Visual-Language Foundation Models 论文阅读笔记

Open-SetDomainAdaptationwithVisual-LanguageFoundationModels论文阅读笔记一、Abstract二、引言三、相关工作3.1开放域适应3.2源域无关的开放域适应3.3视觉-语言基础模型VLFM四、方法4.1问题陈述4.2采用CLIP的Zero-shot预测4.3ODA

【CVPR2021】MVDNet论文阅读分析与总结

Challenge:现有的目标检测器主要融合激光雷达和相机,通常提供丰富和冗余的视觉信息利用最先进的成像雷达,其分辨率比RadarNet和LiRaNet中使用的分辨率要细得多,提出了一种有效的深度后期融合方法来结合雷达和激光雷达信号。MVDNet本质是将雷达强度图与激光雷达点云深度融合,以利用它们的互补能力。Contr

Socks5代理与网络安全:保护您的隐私与数据

在今天数字化的世界中,隐私和网络安全已经成为至关重要的话题。Socks5代理作为一种强大的工具,不仅为用户提供了隐私保护,还在网络安全和爬虫领域发挥着关键作用。本文将深入探讨Socks5代理的工作原理、其在网络安全中的应用,以及如何在爬虫开发中充分利用它。1.Socks5代理简介Socks5代理是一种网络协议,允许数据

代理IP和Socks5代理在跨界电商中的关键作用

随着跨界电商的兴起,代理IP和Socks5代理成为了技术领域的关键工具。本文将深入探讨它们在跨界电商、爬虫技术和出海战略中的关键作用,以及如何最大程度地利用它们来支持企业的全球扩张。引言简要介绍跨界电商的崛起和全球化趋势。提出代理IP和Socks5代理在这一背景下的重要性。代理IP:跨界电商的智能数据引擎多地区数据采集

热文推荐