springcloud+sentinel

Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助保障微服务的稳定性。
规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

服务端

下载sentinel服务端 地址:https://github.com/alibaba/Sentinel/releases

sentinel服务端也是基于springboot开发 它的版本与客户端发开的springboot版本毫无联系,所以sentinel下载任何版本都可用

下载完以后直接java -jar运行 默认是8080端口 登录网址http://127.0.0.1:8080/login 账号/密码:sentinel

未整合客户端之前登录
springcloud+sentinel_第1张图片
客户端
直接在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是懒加载 需要先访问一次接口
最终整合完成的结果
springcloud+sentinel_第2张图片
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 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。

**流量控制规则 *同一个资源可以同时有多个限流规则,检查规则时会依次检查。
  springcloud+sentinel_第3张图片
**熔断降级规则:**同一个资源可以同时有多个降级规则。
springcloud+sentinel_第4张图片
系统保护规则
Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
springcloud+sentinel_第5张图片
访问控制规则 (AuthorityRule)
根据调用方来限制资源是否通过,使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

授权规则,即黑白名单规则,主要有以下配置项:

resource:资源名,即规则的作用对象
limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB
strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式

了解更多请参考官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

你可能感兴趣的:(sentinel,spring,cloud,java)