借鉴:https://blog.csdn.net/weixin_44994494/article/details/127280766
https://www.zhihu.com/question/485925746/answer/2692080796
Nacos作为微服务架构中的注册中心,其他服务的服务信息(ip,端口等信息)可以注册到Nacos服务端(其实也是一个Spingboot应用)。Nacos又为客户端提供了服务发现的功能。客户端会开启一个定时任务,定时向服务端获取最新的服务列表,加载到客户端本地缓存。客户端同时又开启一个定时心跳发送的任务,用于告知服务端,当前服务的健康状态。服务端启动的时候同样也会开启一个健康检查的定时任务,扫描服务列表,将长时间未与服务端发送心跳的服务的健康状态改为false,达到某个时间,会踢出该服务。
Nacos好处就是服务不需要记录其他服务的ip信息,通过Nacos可以实时获取其他服务列表。仅仅只需从本地缓存中根据服务名找到服务列表,利用负载均衡算法从列表中拉取一个ip进行调用(比如Ribbon)
Nacos其实就是一个web springboot应用,端口一般是8848,需要配置数据库Mysql,HTTP形式的,客户端,消费端调用它的接口(阿里巴巴开源项目)
一:注册中心
1.其他服务的服务信息(ip,端口等信息)可以注册到Nacos服务端(其实也是一个Spingboot应用)
2.客户端同时又开启一个定时心跳发送的任务,用于告知服务端,当前服务的健康状态。
3.服务端同样也会开启一个健康检查的定时任务,扫描服务列表,将长时间未与服务端发送心跳的服务的健康状态改为false。
二:服务发现
1.客户端会开启一个定时任务,定时向服务端获取最新的服务列表,加载到客户端本地缓存。
三:配置中心
Nacos服务端操作页面:增加配置,然后Nacos服务端做持久化配置
Nacos客户端启动后:长轮询获取最新的配置(主动从服务端拉)
Nacos客户端获取到的配置有变化时:客户端无需重启,Nacos的config依赖,自动刷新,实现热更新。
四:集群架构图和后端yml中配置
Nginx 集群搭建(安装keepalived,设置主从),用来做负载均衡到Nacos集群
spring:
application:
name: userService #可以读到userServer.yaml环境
profiles:
active: dev #环境 在加上dev即可以读到userServer-dev.yaml环境
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nginx的地址:会路由到nacos地址[Nginx 集群搭建(安装keepalived,设置主从,此处id换成主nginx的地址)]
config:
server-addr: localhost:8848 #nginx的地址:会路由到nacos地址
file-extension: yaml #文件后缀名
# namespace: d16c25e6-07bc-4c97-a619-b876e78e3b1a #命名空间,填命名空间的ID dev环境
五:与Zookeeper的区别
Nacos:数据存储在数据库Mysql、客户端会缓存服务列表
Zookeeper:数据以树型结构存储在内存和磁盘中、原生的Zookeeper不缓存服务列表、支持分布式锁