文档章节

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

xiaomin0322
 xiaomin0322
发布于 06/05 09:30
字数 1148
阅读 101
收藏 5

什么是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://www.jianshu.com/p/08a203468a4a

xiaomin0322
粉丝 146
博文 3935
码字总数 199458
作品 0
上海
架构师
私信 提问
Spring Cloud Alibaba使用Sentinel限流_四

阿里的Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。这里我们使用Spring Cloud Alib...

woshixin
03/04
179
0
Spring Cloud Alibaba,中国 Javaer 的福音,为微服务续上 18 年

Java 界最近发生了一件大事,Spring Cloud 官方宣布阿里开源 Spring Cloud Alibaba,并推出首个预览版。 据介绍,Spring Cloud Alibaba 由阿里开源组件和阿里云产品组件两部分组成,其致力于...

h4cd
2018/11/22
12.6K
41
Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel

本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码将Hystrix迁移到Sentinel。 作者:洛夜,校对:周立 在本博客首发,欢迎转载。 前段时间,Netflix宣布Hystrix进入维...

周立_ITMuch
01/28
1K
7
限流熔断技术选型:从Hystrix到Sentinel

高可用架构:Hystrix作为大家熟知的容错组件,最近宣布停止开发,很多人对其背景可能了解不多。作为Spring Cloud官方默认的熔断组件,您觉得Hystrix是出于哪些原因停止开发呢? 子衿/宿何:这...

xiaomin0322
06/05
81
0
Spring Cloud Alibaba介绍

最近赶项目,现在才有时间写写博客~今天来聊聊Spring Cloud Alibaba,简称"SCA"。它是Spring Cloud规范的一套实现,为分布式应用程序开发提供一站式解决方案。它包含开发分布式应用程序所需的...

MonroeCode
09/02
95
0

没有更多内容

加载失败,请刷新页面

加载更多

高速PCB设计软件allegro中与网络有关的约束规则设置

在allegro pcb的设计过程中,设计约束规则包括时序规则、间距规则、信号完整性规则以及物理规则等,本期主要详细讲解与物理、间距与电气约束中的线宽、线间距物理规则的设置。 一、线宽设置 ...

demyar
20分钟前
2
0
Linux 启动停止SpringBoot jar 程序部署Shell 脚本

#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=algorithm.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]...

草庐过客
21分钟前
3
0
mysql-connector-java驱动升级到8.0后数据库保存时间出现时差

1.问题:在一个新项目中用到了新版的mysql jdbc 驱动后,发现保存到数据库的时间出现了时差 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>......

ValSong
23分钟前
3
0
好程序员大数据教程Scala系列之隐式转换和隐式参数

5.1. 概念 隐式转换和隐式参数是Scala中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。 5.2. 作用 隐式的对类的方法进行增强...

好程序员官网
27分钟前
3
0
多线程必备

初次接触线程,可能有很多初学者搞不明白,始终云里雾里,那么本篇文章直接带大家介绍多线程必须知道的几个点 接下来没有多余,直接上干货 1. 进程和线程的区别是什么? 进程是执行着的应用程序,...

理性思考
30分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部