如何基于Nacos集群部署方案? | 带你读《Spring Cloud Alibaba(2019)》之八

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本节介绍Nacos的集群部署,Nacos对比Zookeeper、Eureka之间的区别,以及什么是分布式系统一致性算法。

上一篇:如何基于Nacos实现分布式配置中心? | 带你读《Spring Cloud Alibaba(2019)》之七
下一篇:什么是微服务网关? | 带你读《Spring Cloud Alibaba(2019)》之九

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

基于Nacos集群部署方案

Nacos 核心帮助我们做的事情注册中心、分布式配置中心

注册中心:没有必要将数据持久化到数据库中,可以持久化到本地的硬盘。
分布式配置中心: 默认是将数据持久化到本地嵌入式的数据库改为持久化到myql中

相关集群配置

创建cluster文件夹
---nacos-server-8848
---nacos-server-8849
---nacos-server-8850

cluster.conf
###ip和端口号
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

1.png
Nginx相关配置
客户端连接

spring:
  application:
    ###服务的名称
    name: meitemayikt-nacos-client
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
        enabled: true
      config:
        ###配置中心连接地址
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
        ###分组
        group: DEFAULT_GROUP
        ###类型
        file-extension: yaml

注意:
1、Nacos在不同的版本下运行集群是不一样的。
nacos在windows版本下运行默认是单机版本 需要指定startup.cmd -m cluster
2、nacos在linux版本下运行默认是集群版本 如果想连接单机版本 startup.cmd –m standalone

2.png

注意事项:集群的ip地址不能采用127.0.0.1,我们需要修改为192.168.18.218。
3.png

分布式情况下 集群保证数据的一致性集群的算法
ZAB(Zookeeper)核心原理两阶段是提交协议2PC、Paxos、nacos数九一致性协议raft协议采用心跳形式

Nacos对比Zookeeper、Eureka之间的区别

Nacos与Eureka区别
最大区别:Nacos支持两种模式CP/Ap模式,从Nacos1.0版本开始,注意模式就是Ap模式

注册有哪些?
Eueeka、Nacos、consul、Zookepper

核心:
1、Eureka与Zookeeper实现注册的区别
2、Eureka与Nacos实现注册区别

CAP定律概念:
这个定理的内容是指的是在一个分布式系统中、Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

一致性(C):在分布式系统中,如果服务器集群,每个节点在同时刻访问必须要保持数据的一致性。
可用性(A):集群节点中,部分节点出现故障后仍然可以使用 (高可用)
分区容错性(P):在分布式系统中网络会存在脑裂的问题,部分Server与整个集群失去节点联系,无法组成一个群体。

取舍:只有在CP和AP选择一个平衡点

采用:
Cp情况下 虽然我们服务不能用,但是必须要保证数据的一致性
Ap情况下 可以短暂保证数据不一致性,但是最终可以一致性,不管怎么样,要能够保证我们的服务可用

大多的注册中心都是Ap

Nacos对比Zookeeper、Eureka之间的区别
从相同点、不同点、中心化思想三方面来
三者都可以实现分布式注册中心框架.
不同点:
Zookeeper采用CP保证数据的一致性的问题, 原理采用(ZAP原子广播协议) , 当我们ZK领导者因为某种情况下部分节点出现了故障,会自动重新实现选举新的领导角色,整个选举的过程中为了保证数据一致性的问题, 客户端暂时无法使用我们的Zookeeper, 那么这意味着整个微服务无法实现通讯(本地有缓存除外)。
注意:可运行的节点必须满足过半机制,整个zk采用使用。

Eureka采用AP设计思想实现分布式注册中心, 完全去中心化、每个节点都是相等, 采用你中有我、我中有你相互注册设计思想,只要最后有一台Eureka节点存在整个微服务就可以实现通讯。

中心化:必须围绕一个领导角色作为核心,选举领导和跟随者角色。
去中心化:每个角色都是均等。

我们在使用注册中心,可用性优先级最高,可以读取数据短暂不一致性,但是至少要能够保证注册中心可用性。

Nacos从1.0版本选择Ap和CP混合形式实现注册中心, 默认情况下采用Ap, CP则采用Raft协议实现保持数据的一致性。
如果选择为Ap模式,注册服务的实例仅支持临时模式,在网络分区的的情况允许注册服务实例,选择CP模式可以支持注册服务的实例为持久模式,在网络分区的产生了抖动情况下不允许注册服务实例。

Nacos的版本更新:
https://github.com/alibaba/nacos/releases

Eureka与Nacos有哪些区别:
1、Eureka采用Ap模式实现注册中心
2、Nacos默认采用AP模式,在1.0版本之后采用ap+cp模式混合实现注册中心。

Eureka与Nacos底层实现集群协议哪些区别
1、去中心化对等。
2、Raft协议实现集群产生领导角色。

分布式系统一致性算法

Raft到底是什么问题即什么是分布式一致性协议的算法

分布式系统一致性算法:应用于系统软件实现集群保持每个节点数据的同步性
保持我们的集群中每个节点的数据的一致性的问题。
专业的术语:分布式一致性的算法。

场景:Redis集群、nacos集群、mongdb集群等

分布式事务一致性框架与分布式系统一致性算法有哪些?

分布式事务一致性框架:核心解决我们在实际系统中产生夸事物导致分布式事务问题。
核心靠的是最终一致性。rocketmq事务消息、rabbitmq补单、lcn、SeaTac等。
分布式系统一致性算法:解决我们系统之间集群之后每个节点保持数据的一致性
有哪些:raft(nacos)、zab(zookeeper)、paxos等。

Zab协议集群原理

我们在分布式系统,存在多个系统之间的集群保持数据一致性,采用CP一致性算法保持数据的一致性问题。
Zookeeper基于ZAP协议实现保持每个节点的数据同步的问题,中心化思想集群模式;
分为领导和跟随者角色。

在程序中如何成为某个节点能力比较强:
对每个节点配置一个myid或者serverid,数值越大表示能力越强;或者根据随机时间判断,随机时间越短,能力越强。

5.png

整个集群中为了保持数据的一致性的问题,必须满足大多数情况>n/2+1 可运行的节点环境下才可以使用

ZAP的协议实现原理事通过比较myid myid谁最大谁就是为可能是领导角色,只要满足过半的机制就可以成为领导角色,后来启动的节点不会参与选举的。

6.png

Zab协议如何保持数据的一致性问题
所有写的请求统一交给我们的领导角色实现,领导角色写完数据之后,领导角色再将 数据同步给每个节点。

注意:数据之间同步采用2pc两个阶段提交协议。

选举过程:

先去比较zxid,zxid谁最大谁就是为领导角色;
如果zxid相等的情况下,myid谁最大谁就为领导角色;

7.png

Ratf整个底层实现原理:

在Raft协议算法中分为角色|名词:
1、状态:分为三种,跟随者、竞选者(候选人)、领导角色。
跟随者:只有投票权限,不能参与竞选。
竞选者(候选人):被投票,有可能成为领导者的角色。
领导角色:只有唯一的一个。
2、大多数: >n/2+1,n表示集群总数的节点。
3、任期:每次选举一个新的领导角色,任期都会增加。
注意:任何的算法都是来源于生活。
4、竞选者谁的票数最多,谁就成为领导角色。

存在的疑问:
多个竞选者,产生的票数都完全一样,这到底谁是领导角色?
注意当我们的集群节点总数,如果是奇数情况下,就算遇到了该问题也不用担心。
当我们的节点是偶数的情况下,可能会存在该问题,如果两个竞选者获取的票数相等的情况下,开始重置竞选的超时时间,一直到谁的票数最多谁就为领导。

9.png

10.png

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

核心的设计原理:谁超时时间最短,谁就有非常大的概率为领导角色。

那么在随机数有可能一样的情况下,如何选举呢?
11.png
1、如果所有的节点的超时随机数都是一样的情况下,当前投票全部作废,重新进入随机生成超时时间。
12.png
2、如果有多个节点生成的随机数都是一样的情况下,比较谁的票数最多,谁就是领导。如果票数完全一样的情况,直接作废,重新进入随机生成超时时间。
注意:建议集群节点为奇数。偶数节点容易造成死循环。

故障重新实现选举:
1、如果我们跟随者节点不能够及时的收到领导角色消息,那么这时候跟随者就会将当前自己的状态由跟随者变为竞选者状态,会给其他的节点发出选举投票的通知,只要该竞选者有超过半数以上即可选举为领导角色。

数据是如何保持一致性的,类似于ZAP两阶段提交协议。

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

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
121 1
|
3月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
256 0
|
13天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
116 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
21天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
54 2
|
28天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
28天前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
|
2月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
2038 18
|
2月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
77 0