2使用新一代注册中心
学习目标
- nacos的基本概念
- nacos的架构
- nacos注册中心的功能特性
目录
- nacos架构
- nacos注册中心功能特性
nacos架构
注册中心回顾
注册中心基本模型
三大角色:服务提供者、服务消费者、注册中心
两大操作:注册、订阅
关键技术:(变更)通知
变更通知机制
服务轮训机制:定时器拉取
服务监听机制:被动监听(通过通知、回调实现信息更新)
注册中心和服务路由
客户端通过注册中心获取服务端实例,并基于负载均衡算法实现服务路由
nacos概述
优点/特性
易用、稳定、实时(信息变更)、规模(大规模应用场景)
简单的数据模型和标准API
高可用99.9%
架构模型
分层模型
部署和运行
- 单机部署
- 集群部署
下载部署包
集群配置
Cluster.conf 配置文件中添加如下配置1
2
3127.0.0.1:8848
127.0.0.1:8850
127.0.0.1:8852实例端口配置
application.properties 配置端口 server.port= 8848
application.properties 配置端口 server.port= 8850
application.properties 配置端口 server.port= 8852nacos数据库
初始化nacos数据库(\conf\mysql-schema.sql)修改配置application.properties配置
1 | spring.datasource.platform=mysql |
curl -X POST ‘http://localhost:8854/nacos/v1/auth/users/admin‘ -d ‘password=admin’
curl -X PUT http://localhost:8854/nacos/v1/auth/users?username=nacos&newPassword=nacos
5. 启动
管理员权限
启动 \bin\ 目录下启动: startup.cmd -m cluster(m:启动模式,默认集群)
单机启动 startup.cmd -m standalone
路径不可有中文、数字、空格等(不可再Program File(86)下)
6. 易错点
Nacos 启动报错[db-load-error]load jdbc.properties error
原因application.properties中db.num=1没有指定Address already in use: bind
原因:因为Nacos 2.0以后需要使用多个端口,会占用两个连续端口:${server.port}和 ${server.port}+1,所以端口设置上不要使用连续端口有代理模式(推荐方案)
server-addr:www.nacos-server.com
无代理模式,修改ip端口需修改配置
server-addr:127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
nacos注册中心功能特性
分级模型
三级模型
服务->集群->实例
集群中有多个实例
集群
默认集群 DEFAULT
配置集群名称
cluster-name:hangzhou
集群特性
- 通过负载均衡算法实现同集群服务
优先调用,减少网络开销(集群同网段内实例优先) - 通过元数据实现定制化控制
根据配置数据定制化处理
nacos资源隔离
分级合理管理资源、不同namespace不可直接访问,不同group之间不可直接访问
命名空间
默认为空
公共命名空间:public
隔离方案
- 逻辑隔离,命名空间机制
- 物理隔离,不同的nacos环境地址
分组
分组默认:DEFAULT GROUP
应用:同一个环境内,不同业务场景可以指定不同的分组
例如支付分组、物流分组
设置分组group:MY GROUP
完整分级模型
服务路由
保护阈值
Nacos控制台可以设置实例的权重值,0~1之间,服务级别配置
比例值:当前服务健康实例数/当前服务总实例数
作用:当比例值<保护阈值时,Nacos会把该服务所有的实例信息(健康+不健康)全部提供给消费者,尽管会有失败响应,但能避免雪崩效应
权重
Nacos控制台可以设置实例的权重值,0~1之间,实例级别配置
同集群内的多个实例,权重越高被访问的频率越高,权重设置为0则完全不会被访问
作用:确保性能好的机器承担更多的用户请求
就近访问
优先选择同集群服务实例列表,本地集群找不到服务实例才会去其它集群寻找,并且会报警告
确定了可用实例列表后,再采用随机负载均衡挑选实例
使用NacosRule进行配置:com.alibaba.cloud.nacos.ribbon.NacosRule
示例
配置
思考题
nacos整体架构可以分几个级别?为什么这样分级?