Nacos简介—2.Nacos的原理简介
大纲
1.Nacos集群模式的数据写入存储与读取问题
2.基于Distro协议在启动后的运行规则
3.基于Distro协议在处理服务实例注册时的写路由
4.由于写路由造成的数据分片以及随机读问题
5.写路由 + 数据分区 + 读路由的CP方案分析
6.基于Distro协议的定时同步机制
7.基于Distro协议的心跳校验下的数据同步补偿机制
8.基于Raft协议实现的弱CP模式
9.Nacos集群模式下的lookup寻址机制
1.Nacos集群模式的数据写入存储与读取问题
使用Nacos进行服务注册时,需要解决如下问题:
一.应该找集群里的哪个节点来发起服务注册?
二.服务实例数据应该存储在集群的哪个节点?
三.应该找集群里的哪个节点来发起服务发现?
2.基于Distro协议在启动后的运行规则
(1)Nacos集群启动后会按如下规则运行
(2)Distro协议 + 定时数据同步与AP + 心跳检验与网络分区
(1)Nacos集群启动后会按如下规则运行
一.Nacos集群的每个节点都可以处理写请求
Nacos集群节点收到写请求后:首先根据要注册的服务实例的IP:端口 + 路由算法,计算出所属集群节点。然后把服务实例注册请求转发到负责该服务实例数据的集群节点中。接着负责该服务实例数据的集群节点就会解析请求,把数据存储到内存里。同时会定期执行同步任务,把本节点负责的数据同步到其他节点。最终每个节点都会存储全量的服务实例数据。
二.新加入Nacos集群的节点会拉取全量数据
新加入Nacos集群的节点会轮询Nacos集群的所有节点,然后发送请求出去拉取各节点的数据,所以Nacos集群的每个节点上都会有所有已注册的服务实例的数据。
三.每个节点都会定期发送心跳给其他节点
Nacos集群的节点通过心跳请求进行数据校验,主要是交换数据的校验值。如果发现其他节点上的数据与自己的不一致,就会全量拉取数据进行补齐。
四.Nacos集群的每个节点都可以处理读请求
因为每个节点都有全量数据,所以每个节点都可以处理读请求。
(2)Distro协议 + 定时数据同步与AP + 心跳检验与网络分区
Distro协议兼顾了CAP中的AP。在这个协议下,所有节点通过定期数据同步 + 心跳校验实现数据最终一致。这个协议能让每个节点都有全量数据。
如果出现某节点宕机,不影响集群可用性。如果出现网络分区,同样不影响集群可用性。因为不同的网络分区只会读写分区中的Nacos节点,此时只是没办法同步数据而已。虽然数据会不一致,但一旦分区恢复后,心跳校验机制运作起来,数据会自动补齐。
3.基于Distro协议在处理服务实例注册时的写路由
首先,服务实例会随机选择Nacos集群中的一个节点发起注册请求。
然后,Nacos集群节点收到写请求后:会根据要注册的服务实例的IP:端口 + 路由算法,计算出所属的集群节点。
接着,把服务实例注册请求转发到负责该服务实例数据的集群节点中。负责该服务实例数据的节点会解析请求,缓存服务实例数据到内存中。
4.由于写路由造成的数据分片以及随机读问题
由于Nacos集群节点收到写请求后:会根据要注册的服务实例的IP:端口 + 路由算法,计算出所属的集群节点。所以会导致数据分片,即每个节点仅负责管理一部分的服务实例数据。
服务实例进行服务发现时,只能随机选择一个Nacos节点来读取数据。对Nacos集群节点进行随机读的时候,由于每个节点只负责处理部分数据,所以可能出现读取不到刚向集群注册的数据的随机读问题。
5.写路由 + 数据分区 + 读路由的CP方案分析
在数据分区 + 随机读的情况下,此时为了读取到数据,有两种解决方案。
方案一:让随机选择的节点重新进行读路由
方案二:让随机选择的节点也拥有全部数据
如果采用方案一,也就是写路由 + 数据分片 + 读路由的架构设计。那么读写某个服务实例的数据,只能由Nacos集群中的其中一个节点处理。如果节点宕机,那么对应的该服务实例数据就不可用。虽然该节点的数据不可用,但也是对所有用户都不可用,视图是一致的。视图是一致的,说明要么都能读到数据,要么都读不到数据。所以这种方案会存在可用性的问题,但优点是数据是强一致的。也就是牺牲了CAP中的A,没有了可用性,但保证了CP。
Nacos的Distro协议则使用了方案二。某个节点宕机后,该节点的数据不会全部不可用,可能会丢失部分数据。也就是牺牲了CAP中的C,不能确保强一致性,但保证了AP。加上Distro协议的同步机制,可以让各节点的数据实现最终一致性。
6.基于Distro协议的定时同步机制
Nacos集群中的每个节点,虽然通过写路由只写入由自己处理的数据,但同时也会定期执行同步任务,把本节点负责的数据同步到其他节点,最终每个节点都会存储全量的集群数据。
同步机制的存在保证了各节点的数据最终是一致的。
7.基于Distro协议的心跳校验下的数据同步补偿机制
Nacos集群的节点通过心跳请求进行数据校验,主要是交换数据的校验值。如果发现其他节点上的数据与自己的不一致,就会全量拉取数据进行补齐。
当出现网络分区时,两分区间的节点无法通信,此时自然就无法定时同步。但当分区恢复后,节点之间通过心跳校验机制,数据可以快速自动补齐。
8.基于Raft协议实现的弱CP模式
Nacos集群节点在启动时会选举出一个Leader节点,由Leader节点负责数据的写入,并将数据同步给其他节点。Leader节点成功写入数据的判断依据是,过半节点都成功同步数据了。
9.Nacos集群模式下的lookup寻址机制
(1)单机寻址
(2)文件寻址
(3)地址服务器寻址
寻址就是Nacos各节点启动时如何找到其他节点。
(1)单机寻址
Nacos通过"-m standalone"模式来启动时,会读取自己本机的IP:端口,然后构造对象放入到ServerMemberManager,它是专门负责管理所有节点信息的组件。
(2)文件寻址
cluster.conf里会写入各个节点地址,节点启动时会读取这个文件的内容。同时节点会针对这个文件施加监听器,如果发现文件有变动,会进行重新读取。但是需要手工维护每个节点的cluster.conf文件,比较适合常规的、三节点、小规模的生产集群部署。
(3)地址服务器寻址
如果Nacos需要进行大规模的集群部署,一般会采用这个方案。也就是使用一个Web服务器来维护一份cluster.conf,然后所有的Nacos都定时请求这个Web服务器获取最新的地址列表。
Nacos简介—2.Nacos的原理简介的更多相关文章
- storm 原理简介及单机版安装指南——详细版【转】
storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 p ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
- Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...
- Linux DNS原理简介及配置
Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...
- Oracle Golden Gate原理简介
Oracle Golden Gate原理简介 http://www.askoracle.org/oracle/HighAvailability/20140109953.html#6545406-tsi ...
- Linux SSH基于密钥交换的自动登陆原理简介及配置说明
一.原理简介 SSH证书认证登录的基础是一对唯一匹配密钥: 私钥(private key)和公钥(public key).公钥用于对数据进行加密,而且只能用于加密.而私钥只能对使用所匹配的公钥,所加密 ...
- Socket通信原理简介
Socket通信原理简介 字数1011 阅读1766 评论2 喜欢11 何谓socket 计算机,顾名思义即是用来做计算.因而也需要输入和输出,输入需要计算的条件,输出计算结果.这些输入输出可以抽象为 ...
随机推荐
- 最大流的 Dinic 算法和 ISAP 算法
上期回顾:https://www.cnblogs.com/ofnoname/p/18678895 之前我们已经介绍了最大流问题的基本定义.最大流最小割定理.增广路径与残量网络的构建方法,以及如何利用这 ...
- 从一指禅到无重复字符:最长子串问题的优雅解法|LeetCode 3 无重复字符的最长子串
LeetCode 3 无重复字符的最长子串 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你是否玩过"一指禅"游戏?就是沿 ...
- 服务器通用背板管理(UBM)实现
本文分享自天翼云开发者社区<服务器通用背板管理(UBM)实现>,作者: 乘风 一 UBM概述 通过SGPIO 进行 SAS 和 SATA 背板管理的 SCSI 机箱服务 (SES) 标准于 ...
- AllPairs工具助力正交表测试用例设计
AllPairs工具助力正交表测试用例设计 正交表法是一种高效的测试方法,特别适用于软件测试中需要处理多个控件及其多种取值组合的情况.以下是对正交表法的详细解释: 一.正交表法概述 正交表法是一种利用 ...
- 洛谷B3843 [GESP202306 三级] 密码合规 题解
原题传送门 前言 咳咳,由于本人最近在备考GESP三级,所以可能会有很多水的题解.(见谅--见谅--) 由于今天刚刚重新刷了一遍此题,所以记忆犹新.(太菜了!一个测试点都能 WA ) 题目解析 简单的 ...
- [BZOJ2194] 快速傅立叶之二 题解
看名字,然后准备转化为多项式乘法. \[c_k=\sum_{i=0}^{n-k-1}a_{i+k}b_i \] 将 \(a\) 反转,得: \[c_k=\sum_{i=0}^{n-k-1}a_{n-i ...
- CH340区别
CH340区别 CH340G USB转串⼝,推出时间最早,需外挂晶振,应⽤最⼴SOP16 CH340C USB转串⼝,内置晶振,引脚兼容CH340G SOP16 CH340E USB转串⼝,内置 ...
- el-cascader 最后一级不显示出来
1.业务背景 业务需要做一个父级查询,父级查询的级联组件不显示最后一级,其他层级均显示 2.解决办法 1.页面设计见上文 TypeError: Cannot read properties of nu ...
- PHP测试代码执行时间
https://blog.csdn.net/wyqwclsn/article/details/39930125 非常简单代码开始前加一个$start = microtime(true);代码结束后加一 ...
- MSBuild属性
MSBuild 属性 MSBuild属性是键值对的集合,提前声明好这些属性之后,整个项目的生成都可以引用这些属性. 属性名不区分大小写. 属性都是写在 PropertyGroup 标签中. 1.声明属 ...