您的位置:首页 > 房产 > 家装 > Nacos服务治理

Nacos服务治理

2024/12/21 22:32:27 来源:https://blog.csdn.net/weixin_64704029/article/details/142314740  浏览:    关键词:Nacos服务治理

Nacos服务改造

  • 启动nacos 实例

  • 添加nacos的依赖

    • <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
      </dependency>
      
  • 在application.yml中添加配置信息

    • Spring:application:name: course-agg-servicecloud:nacos:discovery:server-addr: 192.168.200.130:8848
      

1Nacos的保护阈值

保护阈值:为了防止因过多实例故障,导致所有流量全部流入剩余健康实例,继而造成流量压力将剩余健康实例被压垮形成雪崩效应。应将健康保护阈值定义为一个0到1之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康都会将这个(健康或不健康的)实例返回给客户端。这样做虽然损失了一部分流量,但是保证了集群中剩余健康实例能正常工作。

假设生产中部署了100台服务实例,假设有90台故障,正常逻辑是从90台从注册表中剔除,剩下10台去承担所有的流量,有可能发生雪崩,整个服务都会停止

2Nacos负载均衡

在这里插入图片描述

3服务的数据隔离模型

namespace+group+service:就可以定位到一个具体的服务

  • 命名空间:Nacos数据模型中最顶层的也是包含范围最广的概念,用于在类似环境或租户等需要强制隔离的场景中定义,Nacos的服务也需要使用命名空间来进行隔离
  • 分组(Group):Nacos数据模型中次于命名空间的一种隔离概念,区别于命名空间的强制隔离属性,分组属于一个弱隔离概念,主要用于逻辑区分不同的服务
  • 服务名:该服务实例的名字,一般描述该服务提供了某个功能或者能力

在application.yml下进行配置,将生成的命名空间ID进行配置

在这里插入图片描述

4Nacos作为配置中心

通过Namespace-Group-DataId,做唯一标识,会在项目启动时区配置中心拉取配置文件

(1) 新建配置中心

(2) 新增配置信息

server:port: 10000
Spring:application:name: course-agg-servicecloud:nacos:config:server-addr: 192.168.200.130:8848namespace: ce6fa22e-fc35-4fd3-9568-2cf609059088group: JIAGOU_GROUPfile-extension: yamlprefix: ${Spring.application.name}profiles:active: dev

在本地配置文件中,仅仅保留启动和配置管理所必须得配置项目即可,

在启动服务时,Nacos Config Client会向注册中心发起请求获取指定DataId所对应的配置集,需要将application.yml改为bootstrap.yml

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

(3)在Nacos面板新建配置集

在这里插入图片描述

5不停机的动态刷新

案例代码:

@RestController
@RequestMapping("/api/Refresh")
@RefreshScope
public class DynamicRefreshController {@Value("${url}")private String url;@GetMapping("/getUrl")public String getUrl(){return url;}
}

原理分析:

@RefreshScope是SpringCloud提供的一个注解,用于标注SpringBean,使其在配置发生变化时能够自动刷新,核心原理如下:

  • 代理模式:被@RefreshScope标记的Bean会创建一个代理对象,这个代理对象会在运行时获取最新的配置值
  • 缓存机制:SpringCloud内部维护一个缓存,用于存储被@RefreshScope标记的Bean,当配置变化时,会销毁Bean实例,并在下次访问时重新创建
  • 事件机制:SpringCloud提供了一个ContextRefresher类,用于触发上下文刷新事件,当配置发生变化时,SpringCloud会发布一个RefreshScopeRefreshedEvent时间,通知所有的监听器进行相应的处理

7.6共享配置

(1) 抽取出来一个公共配置

在这里插入图片描述

(2)让他生效并且支持自动刷新

shared-configs: # 共享配置且支持自动刷新- data-id: nacos-common.yamlgroup: JIAGOU_GROUPrefresh: true

7.7多环境配置的切换方案

配置多个命名空间进行配置隔离

在这里插入图片描述

在配置列表中克隆多个配置,并在yaml文件中进行动态切换

在这里插入图片描述

server:port: 10000
Spring:application:name: course-agg-servicecloud:nacos:config:server-addr: 192.168.200.130:8848namespace: 8d0561ce-6e19-457a-9f77-ce201e3cb98e # 此时是生产环境的命名空间group: JIAGOU_GROUPfile-extension: yamlprefix: ${Spring.application.name}shared-configs: # 共享配置且支持自动刷新- data-id: nacos-common.yamlgroup: JIAGOU_GROUPrefresh: true

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com