第一天 f:
Nacos注册中心:
nacos服务分级存储模型:
在nacos中,把nacos的分级存储提供了一个新的概念,集群。
把服务分为多个部分,分为多个集群,它时按照机房来分,这样做可以防止因为总集群出现什么问题,而导致了服务崩溃。
举个例子,京东的购物平台,会在多个城市分别放一个服务端口,比如北京,上海,杭州...我们把在北京的服务称为一个集群。这些集群都属于在这个总服务上。
服务跨集群调用问题:
在这里会出现一个问题:在本地的消费端进行调用时,我们是应该调用本地的服务端还是外地的服务端?
当然,服务端当然要用本地的服务区,如果是调用外地端口,肯定会有延迟的问题。只有当本第服务出现问题时,才会去调用外地的服务器。
如何去配置集群?
spring:
cloud:
nacos:
server-addr: localhost:8848 #网络地址
discovery:
cluster-name: HZ #集群名字
这里如何让两个服务端口是两个集群呢?
在配置完成后启动相应的服务端口,当你想让另一个改为另一个集群时,先在配置中改变其的集群名称,但在这时不能让前面的服务端口,不然两个的服务都是在同一个集群中。做完后他们在nacos的注册中心的集群信息不同。
所以分级是什么意思呢?
一级是服务,如user Service。
二级是集群, 如北京集群。
三级是实例, 如具体的服务端口号。
服务集群属性:
当然在服务中,无论是提供者,还是消费者他们的配置都是一样的。
如何进行集群负载均衡:
1.先与前面的消费端的服务一样,设置application.yml,设置为HZ:
spring:
cloud:
nacos:
server-aadr: localhost:8084 #nacos的网络地址
discovery:
cluster-name: HZ #集群名
2.然后在消费端设置负载均衡的Rule为NacosRlue,这个规则会优先选择同集群的服务:
userService: #提供端服务
ribbon:
NFBalancerRuleClassName : com.alibaba.nacos.ribbon.NacosRule #负载均衡规则
3.注意把提供端的权重设为1。
注意:当这里出现本地提供端服务停止服务时,它会主动去调用外地的服务端,同时此时console会显示黄色的提示。
根据权重负载均衡:
直接在nacos注册中心中进行修改。
这里的权重,就是指的是其占的比例用于表现,它们出现的概率有关。
实际用处:比如在这个服务要进行升级,可以通过改变权重来做到,是那一个接口在进行升级,而另外一个可以照常运行,同时也可以用于测试,让少数用户进行尝试。
环境隔离,namespace:
在Nacos中服务存储和数据存储的最外层都有一个名为namespace的东西,用于做外部隔离。
1. 先在nacos里创建新的命名空间
新建命名空间
只需要填写名称与描述,这时就会创建好相应的文件。
而在配置详情界面的左上角也会出现其命名空间。其中Id是唯一的,且是自动生成的。
那如何改变服务的命名空间位置呢
要在需要改变的服务的yml里加入:
spring:
cloud:
nacos:
server-addr:localhost:8084 #nacos网络地址
discovery:
cluster-name: HZ
namespace: d4b5d26b-62ed-482a-8eb8-6e6cbc335f8a #注入其命名空间的Id
做到这里,当你再打开,启动服务时就会发现它无法访问了。
Nacos注册中心细节分析:
此图中的nacos与Eureka基本操作相同,在两点较为不同;
1.在nacos中,临时实例是用的心跳监测,而非临时实例则是会主动去访问,如果出现问题,也会把它设为不健康,而不会直接剔除,相反会等它恢复正常。但是他如果是一个临时实例,nacos会直接把他剔除。
2.在nacos里服务消费端不光会拉取(pull)服务信息,nacos注册中心还会主动去給服务消费端推送变更的信息。
如何配值临时实例或非临时实例呢:
spring:
cloud:
nacos:
server-addr: localhost:8084 #nacos网络网址
discovery:
ephemeral: false #设为非临时实例
true就为临时实例,而false则为非临时实例。
注意:1.这里服务的健康与否类似于服务是否是正常运行的,只要不是正常运行就是它处于不健康的状态。
2.在nacos中默认使用的是AP模式(即当服务不能正常运行时,就会把它直接删除),但当设置为非临时实例时,就会使用PC模式(即当服务不能正常运行时,会自动等它恢复到正常状态),而Eureka只会采取AP模式。