SpringCloudAlibaba Nacos 集群部署实现
- 四、Nacos 集群部署实现原理
- 4.1 分布式一致性的算法 Raft协议
- 4.1.1 分布式系统中一致性协议有哪些
- 4.1.2 ZAB 协议与 Paxos 协议类型的区别
- 4.2 Nacos Raft一致性心跳的实现原理
- 4.2.1 在 Raft 协议算法中分为角色 | 名词
- 4.2.2 选举的过程是如何?
- 4.2.3 分布式一致性算法 Raft 协议
- 4.1 分布式一致性的算法 Raft协议
Author: Gorit
Date:2021年1月
Refer:阿里云大学
2021年发表博文: 9/50
四、Nacos 集群部署实现原理
Nacos 核心帮助我们做的事情
- 注册中心
- 分布式配置中心
注册中心:没有必要将数据持久化到数据库中,可以持久化到本地硬盘。(需要在 注册中心的 server-addr 指定 nacos 的服务,可以指定多个)
分布式配置中心:默认是将数据持久化到本地嵌入式数据库,改为 mysql 数据库
本地搭建伪集群,开启三个不同端口的 nacos 服务,然后在 cluster.conf 中加入三个 nacos 服务的路径 端口
Nacos 在不同版本下运行集群是不一样的。
注意:
- nacos 在 windwos 版本下运行默认是单机版本 需要指定 startup.cmd -m cluster(但是我用的版本默认就是集群开启的)
- nacos 在 linux 版本下运行默认是集群版本 如果连接单机版本 startup.cmd -mstandalone
- 集群的 ip 地址不能采用 127.0.0.1
4.1 分布式一致性的算法 Raft协议
4.1.1 分布式系统中一致性协议有哪些
Raft 到底是什么问题:分布式一致性算法
分布式系统一致性算法 应用于系统软件实现集群保持每个节点数据的同步性
保持我们集群中每个节点数据一致性问题,专业术语分布式一致性的。
场景:
- Redis集群
- Nacos集群
- MangoDB集群
分布式事务一致性算法 与 分布式系统一致性算法有哪些
前者框架:核心解决我们实际系统产生的跨事务导致的分布式事务问题。
核心靠最终一致性:rocketmaq事务消息、rabbitmq补单、lcn、seata等。
后者框架:解决系统之间集群之后每个节点保证数据一致性
raft(nacos)、zab(zookeeper)、paxos等
整个集群为保证数据一致性问题,必须满足大多数情况 > n /2 1,可运行的接地那才可以使用
4.1.2 ZAB 协议与 Paxos 协议类型的区别
ZAB 协议实现原理
ZAB 协议实现原理是通过比较 myidmyid 谁最大谁谁就可能成为领导角色,只要满足过半机制即可成为领导角色,后来启动的节点也不会参与成为领导角色
数据一致性
4.2 Nacos Raft一致性心跳的实现原理
4.2.1 在 Raft 协议算法中分为角色 | 名词
- 状态:分为跟随者、竞选者(候选人)、领导角色
- 大多数: > n/2 1(n 集群的总结点)
- 任期:每次选举一个新的领导角色 任期都会实现增加
注意:任何算法都来源生活
- 经选择谁的票数最多,谁就是为领导角色。
存在的疑问:
多个竞选者:产生的票数都完全一样,这样谁才能成为领导角色
4.2.2 选举的过程是如何?
- 默认的情况下每个节点都是为跟随者
- 每个节点会随机的生成一个选举的超时时间,例如大概是 100 - 300ms,在这个超时的时间范围内必须要等待
- 超时时间过后,当前节点的状态可能由跟随者 变为 竞选者状态,会给其他的节点发出选举投票通知,只要该经选择超过半数以上即可进选
核心设计的原理:谁超时时间最短大概率的为领导角色
那么随机性树有可能出现一样的情况下:
- 如果所有的节点的超时随机数都是一样的情况下,当投票全部作废,重新进入随机生成超时时间
- 如果有多个节点生成的随机都是一样的,比较谁的票数最多,谁就是为领导,如果票数完全一样的情况下,直接作废,重新进入随机生成的超时时间,建议集群节点为奇数
4.2.3 分布式一致性算法 Raft 协议
故障重新实现选举. 如果我们跟随者节点不能及时的收到领导角色的消息的,那么这时候跟随者状态就会变 为竞选者状态,发给其他的节点发出选举投票通知,只要该竞选者有超过半数以上即可 选举为领导角色 数据如何保证一致性 类似 zab 两阶段提交协议
- 所有的写的请求都是统一交给我们的领导角色完成,会写入该对应的日志,标记该状态为提交状态
- 为了提交该日志,领导角色就会将该日志心跳的形式发送到其他跟随者,只要满足过半的跟随者可以写入改数据,则为直接通知其他节点同步数据,这个称之为日志复制
下一节
新一代服务网关 SpringCloud Gateway