Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助保障微服务的稳定性。
规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
服务端
下载sentinel服务端 地址:https://github.com/alibaba/Sentinel/releases
sentinel服务端也是基于springboot开发 它的版本与客户端发开的springboot版本毫无联系,所以sentinel下载任何版本都可用
下载完以后直接java -jar运行 默认是8080端口 登录网址http://127.0.0.1:8080/login 账号/密码:sentinel
未整合客户端之前登录
客户端
直接在pom中引入下面的依赖 版本可自行配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
配置文件使用的是yml文件
spring:
cloud:
sentinel:
transport:
#连接sentinel的dashboard
dashboard: 127.0.0.1:8080
#client-ip: 192.168.0.9:9000
port: 8719 #注意这里的端口默认是8719 如果8719被占用会自动+1 无需当心
#eager: true
#暴露的健康检查服务端点
management:
endpoint:
web:
exposure:
include: '*'
注:若整合完以后发现服务端还是未监听到任何客户端服务,那是因为sentinel是懒加载 需要先访问一次接口
最终整合完成的结果
sentinel 自定义返回错误
重写之后
方法很简单只需要重写BlockExceptionHandler
/**
* 自定义Sentinel异常实现
*
* @author Administrator
*
*/
@Component
public class MyBlockHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws Exception {
String msg = null;
if (ex instanceof FlowException) {
msg = "已被限流";
} else if (ex instanceof DegradeException) {
msg = "已被降级";
} else if (ex instanceof ParamFlowException) {
msg = "已被热点参数限流";
} else if (ex instanceof SystemBlockException) {
msg = "系统规则";
} else if (ex instanceof AuthorityException) {
msg = "授权规则";
}
response.setStatus(500);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.setContentType("application/json;charset=utf-8");
new ObjectMapper().writeValue(response.getWriter(), msg);
}
}
规则的种类
Sentinel 的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时 Sentinel 也提供相关 API来定制自己的规则策略。
Sentinel 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。
**流量控制规则 *同一个资源可以同时有多个限流规则,检查规则时会依次检查。
**熔断降级规则:**同一个资源可以同时有多个降级规则。
系统保护规则
Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
访问控制规则 (AuthorityRule)
根据调用方来限制资源是否通过,使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
授权规则,即黑白名单规则,主要有以下配置项:
resource:资源名,即规则的作用对象
limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB
strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式
了解更多请参考官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel