- 一、架构图及框架使用组件组件
- 1.1.架构图
- 1.2.组件
- 二、Nacos介绍
- 2.1.为什么是 Nacos?既然有了 Eureka、Consul、zookeeper,为什么还有 Nacos?
- 三、nacos 能做什么?
- 四、Nacos 服务端搭建
- 五、Nacos client 服务端的搭建
- 六、注册中心
- 七、配置中心
- 八、补充
- 九、Nacos进阶
一、架构图及框架使用组件组件 1.1.架构图 1.2.组件
| 功能 | 选择方案 |
|---|---|
| 分布式配置中心 | Springcloud config、zookeeper、Nacos |
| 服务注册与发现 | Eureka、Nacos、Zookeeper |
| 服务网关路由 | Zuul、springcloud gateway |
| 服务调用 | Resttemplate、Ribbon、Fegin |
| 负载均衡 | Ribbon |
| 断路器 | Hytrix、Sentinel |
| 分布式消息 | Rabbitmq、kafka、springcloud stream |
a) Nacos 是 SpringCloudAlibaba 架构中最重要的组件。
b) Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提
供注册中心、配置中心和动态 DNS 服务三大功能。能够无缝对接 Springcloud、Spring、Dubbo
等流行框架。
c) nacos 和 eureka 功能对比
| 模块 | Nacos | Eureka | 功能说明 |
|---|---|---|---|
| 注册中心 | 是 | 是 | 服务治理,服务中心化注册 |
| 配置中心 | 是 | 否 | eureka 需 要 配 合springcloud config实现 |
| 配置动态刷新 | 是 | 否 | nacos 通过 netty 保持tcp 长链接进行推送,eureka需要配合mq实现配置动态刷新 |
| 可用区 az | 是 | 是 | 对服务集群划分不同区域,实现区域隔离,并提供灾难级自动切换 |
| 分组 | 是 | 否 | nacos 根据不同的业务、环境进行分组管理(namespace,group) |
| 元数据 | 是 | 是 | 提供服务标签数据(环境、服务标识) |
| 权重 | 是 | 否 | nacos 提供权重设置,调整承载流量压力 |
| 健康检查 | 是 | 是 | nacos 提供服务端或者客户端发起的健康监测,eureka 是有客户端发起心跳 |
| 负载均衡 | 是 | 是 | 均提供负载均衡策略,eureka 采用 ribbon |
三、nacos 能做什么?d) eureka 停止维护
e) nacos 支持 a(高可用)p(分区容错)和 c(一致性)p 的切换默认为 ap, eureka 仅支持ap,zookeeper 仅支持 cp
四、Nacos 服务端搭建1、服务注册发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 的服务发现,服务端可以通过 SDK 或者 Api 进行服务注册,相应的服务消费者可以使用 DNS 或者 Http 查找的方式获取服务列表。Nacos 同时提供对服务的实时健康检查,阻止想不健康的主机或服务发送请求,与 Eureka 类似 Nacos 也有友好的控制台界面。
2、动态 DNS 服务:
支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
3、动态配置服务:
接触过 SpringCloud 应该对 config 有所了解,那么配置中心也就很好理解,Nacos 支持动态的配置管理,将服务的配置信息分环境分类别外部管理,并且支持热更新。不过与 Config 不同Nacos 的配置信息存储与数据库中,支持配置信息的监听和版本回滚。
4、服务及元数据管理:
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA(服务等级协议)以及最首要的 metrics 统计数据(默认不开启暴露需要修改配置)。可以搭建搭建 prometheus 采集 Nacos metrics 数据也可以搭建搭建 grafana 图形化展示 metrics 数据
1、下载地址:https://github.com/alibaba/Nacos/releases
第一个为了 linux 版本 第二个为 windows 版本
2、下载并解压后可以看到以下目录结构:
3、conf 中存放的是配置文件及服务启动所须的数据库文件
nacos 默认使用的数据库为内嵌的 cmdb,我们也可以创建本地数据库并修改配置文件指向
本地数据库即可(推荐),对 nacos 集群化有帮助。
4、基本命令(单机模式下启动):
启动命令:sh startup.sh -m standalone
关闭命令:sh shutdown.sh
5、启动后 访问 http://localhost:8848/nacos/#/login 默认账号及密码均为 nacos
登录后界面
1、引入依赖
com.alibaba.cloud spring‐cloud‐alibaba‐nacos‐discovery
2、启 动 类 写 注 解 ( 也可 以 不 写 )@EnableDiscoveryClient
3、写配置文件 :
4、以上三步做完启动项目如何检查是否注册成功?
a) 方式一:服务启动后可以在 nacos 管理界面查看注册成功的服务。
b ) 方式二:可以通过发现客服端搜索实例名的形式查看服务是否注册成功,并查
看注册具体信息。
1、无注册中心的:
a)从上面看出的缺点就是,在调用的时候,请求的 ip 地址和端口是硬编码的。若此时,服务提供方(order)服务部署的机器换了端口或者是更换了部署机器的 ip,那么我们需要修改代码重新发布部署.
b)假设我们的 order 服务压力过大,我们需要把 order 服务作为集群,那么意味着 order 是多节点部署,比如原来我们只有一台服务器,现在有多台服务器,那么作为运维人员需要在服务消费方进行手工维护一份注册表(容易出错)
2、有注册中心:
只需要写服务名即可进行调用,对应用集群化维护方便
3、nacos 的 namespace 和配置中心
a) 命名空间:相当于环境,开发环境 测试环境 生产环境 ,每个空间里面的配
置是独立的
默认的 namespace 是 public, nameSpace 可以进行资源隔离,比如我们 wechat 环境下的nameSpace 下的服务是调用不到 dev 的 NameSpace 下的微服务
证明:调整 outh 应用的 namespace 为 dev,wx_pa-api 应用的 namespace 为 wechat,通过wx_pa-api 的 http://127.0.0.1:8089/root/getServiceList 接口查询 outh 应用 发现返回值 list size为 0,所以证明 nameSpace 可以进行资源隔离
b) 配置管理:配置中心,根据命名空间区分创建不同的配置,Group 组,这个类
似我们的项目,比如日间手术系统、手卫生系统等, 就是不同的项目。Data ID 这个就是我们项目下面的配置文件
4.新建配置
1、以 前 的 配 置 :
a) 每个应用会有不同的配置环境(开发环境、生产环境、测试环境…),并且
每个环境的配置会有所不同,我们以前会生成不同 application 文件,项目多起来后管理会变得很复杂。
b) 配置属性的修改每次我们都需要进行项目的重启。
2、引入配置中心主要是为了:
a) 配置属性的动态刷新
b) 配置文件的集中管理
3 3 、根据这幅图,微服务需要解决的问题
a)微服务怎么知道配置中心的地址 ?
b)微服务到底需要连接哪个环境 ?
c)怎么找到 nacos config 上的对应的配置文件 ?
方式:
a) 接入配置中心:添加依赖包 spring-cloud-alibaba-nacos-config
com.alibaba.cloud spring‐cloud‐alibaba‐nacos‐config
b) 编写配置文件,需要写一个 bootstrap.yml 配置文件
配置解释:
八、补充i、spring.cloud.nacos.config.server-addr: localhost:8848 表示微服务怎么去找我的
配置中心
ii、spring.application.name=wx-pa-api 表示当前微服务需要向配置中心
iii、索要 wx-pa-api 的配置:
spring.profiles.active=prod 表示我需要向配置中心索要 wx-pa-api 的生产环境的配置索要文件的格式为${application.name}- ${spring.profiles.active}.${file-extension}
真正在 nacos 配置中心上 就是 wx-pa-api-prod.yml
1、如果我们需要不停机改变我们的生产环境的某个值(例如文件保存地址)来控制业务逻辑。我们需要在对应的 Controller 上添加@RefreshScope 进行动态刷新
2、如果存在部分配置为开发环境、生产环境、测试环境等不同环境共通,我们只需在配置中心创建例如 wx-pa-api.yml 的配置文件。配置的优先级 精准配置 会覆盖 与通用配置 相同的配置,然后再和通用配置互补。
3、不同服务存在相同的配置:
a) 通过 spring.cloud.nacos.config.shared-config ,配置文件中增加:
#各个微服务共享的配置,注意越排到后面的公共配置 yml 优先级越高
b) 通过 spring.cloud.nacos.config.extension-configs(优先级高于shared-config)
| 文章名 | 链接 |
|---|---|
| 服务注册中心—服务发现nacos | 服务注册中心—服务发现nacos |
| nacos案例 | SpringCloud+Seata+nacos案例(包含源码 Seata及nacos安装教程) |



