双11、双12、618秒杀、春晚抢红包等大流量高并发场景,我们再熟悉不过了。在高并发、高可用性后端系统架构设计时,通常要通过限流、降级等措施保障系统的稳定性。在Spring cloud微服务技术选型时,我们可以采用第三方开源架构有Hystrix、Resilience4j、Sentinel [1]。本文将介绍阿里巴巴Sentinel组件的使用。
Sentinel 是面向云原生微服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者提升微服务的稳定性,避免系统出现雪崩问题,Sentinel 具有以下特征[2]:
- 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
本文将按以下提纲给大家讲解Sentinel限流、降级和监控的实现。
1.准备工
1.1 下载sentinel-dashboard.jar
请到git下载sentinel-dashboard.jar:jar包下载。
1.2. 启动sentinel
在终端输入: java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.2.jar
其中:
-Dserver.port=8080
用于指定 Sentinel 控制台端口为8080
。
成功启动sentinel 之后,会在终端输出以下日志信息:
2. Sentinel限流、降级(静态配置)
Sentinel提供丰富的功能,请见本文第5小节的内容介绍。在本节中,博主将介绍限流、降级的使用。其用法挺简单的,定义好了配置资源,使用即可。定义配置资源,有两种方式:抛出异常的方式定义资源、通过注解定义资源。由于注解定义资源更加灵活、使用更加方便,所以本节介绍注解方式的实现,只需要四步操作即可。
2.1引入sentinel注解依赖
implementation "com.alibaba.csp:sentinel-annotation-aspectj:${sentinel_version}"
2.2 定义SentinelAspectConfiguration
package com.rzl.spring.sentinel.configuration;
import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SentinelAspectConfiguration {
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
}