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-service
        cloud:
          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-service
  cloud:
    nacos:
      config:
        server-addr: 192.168.200.130:8848
        namespace: ce6fa22e-fc35-4fd3-9568-2cf609059088
        group: JIAGOU_GROUP
        file-extension: yaml
        prefix: ${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.yaml
	group: JIAGOU_GROUP
	refresh: true

7.7多环境配置的切换方案

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

在这里插入图片描述

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

在这里插入图片描述

server:
  port: 10000
Spring:
  application:
    name: course-agg-service
  cloud:
    nacos:
      config:
        server-addr: 192.168.200.130:8848
        namespace: 8d0561ce-6e19-457a-9f77-ce201e3cb98e # 此时是生产环境的命名空间
        group: JIAGOU_GROUP
        file-extension: yaml
        prefix: ${Spring.application.name}
        shared-configs: # 共享配置且支持自动刷新
          - data-id: nacos-common.yaml
            group: JIAGOU_GROUP
            refresh: true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值