Nacos服务分级存储模型
一个服务对应多个实例,最初,所有的实例安放在一个机房之中,这就相当于鸡蛋放在一个篮子里,如果这个机房出现了问题,那整个服务就挂掉了。
所以要将一个实例部署多个机房,容灾
服务跨集群调用问题
为什么要在两者之间添加集群呢,比如杭州的机房中存储有order-service服务,同时也有user-service服务, 上海的机房中存储有order-service服务,同时也有user-service服务,那么当我杭州的order-service想要调用user-service服务的时候,肯定调用杭州本地的更快,即优先调用本地集群提供的服务,只有在本地集群不可以,才会去外地调用。
如何配置集群属性
修改配置文件即可,添加spring.cloud.nacos.discovery.cluster-name属性,HZ只是集群名字
同时也要修改负载均衡策略的IRule为NacosRule,这个规则会先寻找与自己同集群的服务,在本地集群中采用随机的方式进行负载均衡,如果本地集群找不到,才会去其他集群寻找,并且会报警告
根据权重负载均衡
实际部署中会出现这样的场景
- 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
如果将权重设置为0,即不会对他发生访问,如果我们要进行版本升级,如果我们采用重启服务器的方式,那么如果有用户来访问,就会使得它们访问失败,但是如果现在我们有这个权重配置的情况。
即我们先对8081降低权重到0,然后慢慢用户的请求就不会到达8081,然后此时再对8081进行版本升级,此时用户对此是无感知的,因为还有其他实例在运行,升级完成之后进行重启,然后将权重变为0.0几,没什么问题之后,再调成应有的权重,实现平滑升级
环境隔离 - namespcae
nacos不仅仅是注册中心,但是别忘了同时也可以存储数据
Service的内部是集群,集群的内部就是服务实例了。两个NameSpcae之间的服务是不能发生相互调用的
NameSpace是用来区分生产环境,开发环境等的
group是分组的意思,订单和支付相关度较高,可以放到一个group中
但是这并非是死的,不是强制一定要使用的,当没有分组的时候,都会被分配到Default_GROUP中
默认都会在public中
命名空间ID不填就是按uuid自动生成
修改命名空间就需要在配置文件中修改了
Nacos注册中心细节
服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下边的配置来设置,设置为false,他就不是非临时实例了,即是永久实例了
临时实例采用心跳模式,即定期主动的向Nacos发送信息,而非临时实例采用主动检测的方式。
临时实例心跳不正常会被剔除,非临时实例则不会被剔除