Spring-cloud学习笔记—Spring Cloud Alibaba Nacos简介
1. Nacos简介
Nacos (Dynamic Naming and Configuration Service)
是阿⾥巴巴开源的⼀个针对微服务架构中服务发现、配置管理和服务管理平台。Nacos
就是注册中⼼+配置中⼼的组合(Nacos=Eureka+Config+Bus)官⽹
:https://nacos.io下载地址
:https://github.com/alibaba/Nacos
2. Nacos功能特性
服务发现与健康检查
动态配置管理
动态DNS服务
服务和元数据管理
(管理平台的⻆度,nacos也有⼀个ui⻚⾯,可以看到注册的服务及其实例信息(元数据信息)等),动态的服务权重调整、动态服务优雅下线,都可以去做
3. Nacos 单例服务部署
下载解压安装包
,执⾏命令启动(我们使⽤⽐较稳定的版本 nacos-server-1.x.x.tar.gz)
启动命令
(单机版):linux/mac
:sh startup.sh -m standalonewindows
:cmd startup.cmd
访问nacos管理界⾯
:http://127.0.0.1:8848/nacos/#/login(默认端⼝8848
,账号和密码nacos/nacos
)
父pom文件引入jar包
<!--SCA --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--SCA -->
在服务客户端中引入nacos客户端依赖的jar包
,Nacos服务可以发现服务客户端,类似Eureka服务端为了发现Eureka客户端的那种感觉<!--nacos service discovery client依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
启动服务后
,在服务管理的服务列表里可以看到服务名,分组名称,集群数,实例数,健康实例数,触发保护阈值,操作
修改yml配置文件
:在原有的基础上添加如下的配置,配置nacos server
地址,类似Eureka一样,将服务注册到哪里spring: # nacos配置 cloud: nacos: discovery: ################ 配置nacos server地址 server-addr: 127.0.0.1:8848
启动微服务,查看服务列表
查看服务详情
在nacos中有临时实例和持久化实例之分
临时实例
:微服务场景(cloud+dubbo)将服务注册进nacos中的,都属于临时实例,如果一段时间没有心跳包续约的话,就会将服务进行剔除操作持久化实例
:对于持久化实例来说就算他不健康了,也不会把他剔除的,一般用在MySQL的主从集群中,涉及很多节点
保护阈值
:可以设置为0-1之间的浮点数,它其实是⼀个⽐例值(当前服务健康实例数/当前服务总实例数)
场景:
1. ⼀般流程下,nacos是服务注册中⼼,服务消费者要从nacos获取某⼀个服务的可⽤实例信息,对于服务实例有健康/不健康状态之分,nacos在返回给消费者实例信息的时候,会返回健康实例。这个时候在⼀些⾼并发、⼤流量场景下会存在⼀定的问题
2. 如果服务A有100个实例,98个实例都不健康了,只有2个实例是健康的,如果nacos只返回这两个健康实例的信息的话,那么后续消费者的请求将全部被分配到这两个实例,流量洪峰到来,2个健康的实例也扛不住了,整个服务A 就扛不住,上游的微服务也会导致崩溃,,,产⽣雪崩效应。保护阈值的意义在于
:- 当服务A健康实例数/总实例数 < 保护阈值 的时候,说明健康实例真的不多了,这个时候保护阈值会被触发(状态true)
- nacos将会把该服务所有的实例信息(健康的+不健康的)全部提供给消费者,消费者可能访问到不健康的实例,请求失败,但这样也⽐造成雪崩要好,牺牲了⼀些请求,保证了整个系统的⼀个可⽤。
注意
:阿⾥内部在使⽤nacos的时候,也经常调整这个保护阈值参数。