Spring Cloud之Nacos注册中心及配置中心

发布于:2022-12-26 ⋅ 阅读:(621) ⋅ 点赞:(0)

Nacos 是阿里巴巴新推出的开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。是 注册中心 + 配置中心 的组合。

Nacos官方文档:什么是 Nacos

安装包下载地址Releases · alibaba/nacos · GitHub

等价于: Nacos = Eureka + Config

 

1. Nacos注册中心

1.1 注册中心的意义:

注册中心解决了服务发现的问题。在没有注册中心时候,服务间调用需要知道被调方的地址或者代理地址。当服务更换部署地址,就需要修改调用当中指定的地址或者修改代理配置。而有了注册中心之后,每个服务在调用时候只需要知道服务名称,地址都会通过注册中心同步过来。

目前市面上的注册中心:
1)Eureka(原生,2.0遇到瓶颈,停止维护)
2)Zookeeper(支持,专业的独立产品。例如:dubbo)
3)Consul(原生,GO语言开发)
4)Nacos(阿里巴巴)

Nacos 的特性:
服务发现和服务健康监测:支持基于DNS和基于RPC的服务发现,支持对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求;
动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置;
动态 DNS 服务:动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务;
服务及其元数据管理:支持从微服务平台建设的视角管理数据中心的所有服务及元数据。

1.2 常用的注册中心

对比 Nacos Eureka Consul Zookeeper
一致性协议 支持AP和CP模型 AP模型 CP模型 CP模型
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/metadata/Selector Ribbon Fabio -
雪崩保护
自动注销实例 支持 支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心同步 支持 不支持 支持 不支持
SpringCloud集成 支持 支持 支持 不支持
Dubbo集成 支持 不支持 不支持 支持
k8s集成 支持 不支持 支持 不支持

目前常用的注册中心是Nacos和eureka

1.3 Nacos与eureka的区别:

共同点:
都支持服务注册和服务拉取。
都支持服务提供者心跳的方式做健康检测。
不同点:
nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(一般情况下都使用临时实例,主动检测消费的服务器资源较大,服务器压力大)。
临时实例心跳不正常会被剔除,非临时实例则不会被剔除。
nacos支持服务列表变更的消息推送模式,服务列表更新及时。
nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;eureka采用AP方式。(经过配置 spring.cloud.nacos.discovery.ephemeral=true  #false为永久实例,true表示临时实例开启,注册为临时实例,默认是true)

2. Nacos配置中心

2.1. 什么是配置中心

系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,分散中还包含着冗余。对于在微服务时代,会有大量的重复实例,所以配置中心就诞生了。配置中心解决了在分布式场景下多环境配置文件的管理和维护。

2.2. 理解配置中心

1. 用户在配置中心更新配置信息。
2. 服务A和服务B、C等及时得到配置更新通知,从配置中心获取配置。

2.3. Nacos配置注意事项

1)Nacos配置文件名:bootstrap.yml

配置文件加载的优先级(由高到低)

bootstrap.properties ->bootstrap.yml -> application.properties -> application.yml

2)动态刷新配置类信息

方式一:读取某个属性使用@Value注解,并在对应的配置类上添加@RefreshScope

@RefreshScope  //刷新配置注解
public class Config {

    @Value("${config.age}")
    private String age;

}

方式二:直接使用@ConfigurationProperties 读取配置

@ConfigurationProperties(prefix = "config")
public class Config {
    private String age;

}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到