Spring Cloud 微服务架构实战(三)——使用alibaba-sentinel流量控制、熔断降级

什么是Sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Spring Cloud接入

1.首先,修改 pom.xml 文件,引入 Sentinel starter。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2.接入限流埋点

  • HTTP 埋点
    Sentinel starter 默认为所有的 HTTP 服务提供了限流埋点,如果只想对 HTTP 服务进行限流,那么只需要引入依赖,无需修改代码。

  • 自定义埋点
    如果需要对某个特定的方法进行限流或降级,可以通过 @SentinelResource 注解来完成限流的埋点,示例代码如下:

@SentinelResource("resource")
public String hello() {
  return "Hello";
}

3.通过控制台,配置限流规则

启动 Sentinel 控制台

  1. 首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。

    1.1 直接下载:下载 Sentinel 控制台
    1.2 源码构建:进入 Sentinel Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档

  2. 启动控制台,执行 Java 命令 java -jar sentinel-dashboard.jar完成 Sentinel 控制台的启动。 控制台默认的监听端口为 8080。Sentinel 控制台使用 Spring Boot 编程模型开发,如果需要指定其他端口,请使用 Spring Boot 容器配置的标准方式,详情请参考 Spring Boot 文档

启动应用

  1. 增加配置,在应用的 /src/main/resources/application.properties 中添加基本配置信息
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard= localhost:8080

2.启动应用,并调用服务,任意的controller暴露的http服务

 

配置限流规则并验证

  1. 访问 http://localhost:8080 页面,可以在左侧看到 naco-consumer 应用已经注册到了控制台,单击 流控规则 ,可以看到目前的流控规则为空。

     

  2. 配置 URL 限流规则:点击新增流控规则,资源名填写需要限流的 URL 相对路径,单机阈值选择需要限流的阈值,点击新增进行确认。(为了便于演示效果,这里将值设置成了 1)。

     

  3. 访问 URL,当 QPS 超过 1 时,可以看到限流效果如下。

     

4.Feign支持

Sentinel 适配了 Feign 组件。如果想使用,除了引入 sentinel-starter 的依赖外还需要 2 个步骤:

  • 配置文件打开 sentinel 对 feign 的支持:feign.sentinel.enabled=true

  • 加入 feign starter 依赖触发 sentinel starter 的配置类生效:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

这是一个 FeignClient 的简单使用示例:

@FeignClient(name = "nacos-config" ,fallback = ConfigFeignClientFallback.class, configuration = FeignConfiguration.class)
public interface ConfigFeignClient {
    @RequestMapping(value = "/config/get", method = RequestMethod.GET)
    String userKey();
}

class FeignConfiguration {
    @Bean
    public ConfigFeignClientFallback configFeignClientFallback() {
        return new ConfigFeignClientFallback();
    }
}

class ConfigFeignClientFallback implements ConfigFeignClient {
    @Override
    public String userKey() {
        return "echo fallback";
    }
}

5.验证降级

1.我们把服务提供方nacos-config应用停止运行。

  1. 访问nacos-consumer应用的使用feign的接口服务。
  2. 由于feign在访问nacos-config时发生异常,触发降级条件,于是结果如下:

     

  3. 重新启动nacos-config服务,访问变回正常:

     

6.自定义限流、降级逻辑

请参考官方文档:


 

转载于:https://my.oschina.net/xiaominmin/blog/3058612

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值