SpringCloud Alibaba学习笔记 ——(四、Nacos 集群部署实现)

x33g5p2x  于2021-12-30 转载在 Spring  
字(1.6k)|赞(0)|评价(0)|浏览(411)

Author: Gorit

Date:2021年1月

Refer:阿里云大学

2021年发表博文: 9/50

四、Nacos 集群部署实现原理

Nacos 核心帮助我们做的事情

  • 注册中心
  • 分布式配置中心

注册中心:没有必要将数据持久化到数据库中,可以持久化到本地硬盘。(需要在 注册中心的 server-addr 指定 nacos 的服务,可以指定多个)

分布式配置中心:默认是将数据持久化到本地嵌入式数据库,改为 mysql 数据库

本地搭建伪集群,开启三个不同端口的 nacos 服务,然后在 cluster.conf 中加入三个 nacos 服务的路径 + 端口

Nacos 在不同版本下运行集群是不一样的。

注意:

  1. nacos 在 windwos 版本下运行默认是单机版本 需要指定 startup.cmd -m cluster(但是我用的版本默认就是集群开启的)
  2. nacos 在 linux 版本下运行默认是集群版本 如果连接单机版本 startup.cmd -mstandalone
  3. 集群的 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 协议算法中分为角色 | 名词

  1. 状态:分为跟随者、竞选者(候选人)、领导角色
  2. 大多数: > n/2+1(n 集群的总结点)
  3. 任期:每次选举一个新的领导角色 任期都会实现增加

注意:任何算法都来源生活

  1. 经选择谁的票数最多,谁就是为领导角色。

存在的疑问:

多个竞选者:产生的票数都完全一样,这样谁才能成为领导角色

4.2.2 选举的过程是如何?

  1. 默认的情况下每个节点都是为跟随者
  2. 每个节点会随机的生成一个选举的超时时间,例如大概是 100 - 300ms,在这个超时的时间范围内必须要等待
  3. 超时时间过后,当前节点的状态可能由跟随者 变为 竞选者状态,会给其他的节点发出选举投票通知,只要该经选择超过半数以上即可进选

核心设计的原理:谁超时时间最短大概率的为领导角色

那么随机性树有可能出现一样的情况下:

  1. 如果所有的节点的超时随机数都是一样的情况下,当投票全部作废,重新进入随机生成超时时间
  2. 如果有多个节点生成的随机都是一样的,比较谁的票数最多,谁就是为领导,如果票数完全一样的情况下,直接作废,重新进入随机生成的超时时间,建议集群节点为奇数

4.2.3 分布式一致性算法 Raft 协议

故障重新实现选举.

如果我们跟随者节点不能及时的收到领导角色的消息的,那么这时候跟随者状态就会变
为竞选者状态,发给其他的节点发出选举投票通知,只要该竞选者有超过半数以上即可
选举为领导角色

数据如何保证一致性 类似 zab 两阶段提交协议

  1. 所有的写的请求都是统一交给我们的领导角色完成,会写入该对应的日志,标记该状态为提交状态
  2. 为了提交该日志,领导角色就会将该日志心跳的形式发送到其他跟随者,只要满足过半的跟随者可以写入改数据,则为直接通知其他节点同步数据,这个称之为日志复制

下一节

新一代服务网关 SpringCloud Gateway

相关文章