当前位置: 首页 > news >正文

Spring Cloud 服务保护sentinel

一、sentinel的介绍

 1、为什么要使用sentinel?在哪用?

服务雪崩: 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩

     用处:上游----->服务---->下游

 2、什么是sentinel?

 sentinel[ˈsentɪnl]:是阿里的一个以流量为切入点服务保护框架,主要作用:流量控制、熔断降级

 流量控制[不被上游服务压死]:

            qps:每秒接受的请求数
            thread:线程数

 熔断降级[不被下游服务拖死]:

            熔断:当 慢调用比例 或 异常比例 超出阈值时,暂时切断对下游服务的调用
            降级:发生熔断时返回默认值[降级逻辑或兜底方案]

总之一句话,我们需要做的事情,就是在Sentinel的资源上配置各种各样的规则,来实现各种容错的功能:

   3、sentinel的启动器

 spring-cloud-starter-alibaba-sentinel

3.1Sentinel入门

3.1.1抛异常方式
sentinel_consume
<!--sentinel核心依赖-->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId>
</dependency>

controller

 @RequestMapping(value = "/hello")public String hello() {Entry entry = null;try {//SphU:执行规则检查,获取资源失败时会抛BlockException异常entry = SphU.entry("/consumer/hello");return "Hello Sentienl!!!";//被保护的逻辑} catch (BlockException e) {//资源访问被阻止e.printStackTrace();return "接口被限流了, exception: " + e;}finally {// SphU.entry(xxx) 需要与 entry.exit() 成对出现,否则会导致调用链记录异常if (entry != null) {entry.exit();}}}/*** 定义限流/流控规则*/@PostConstruct//当前类的构造函数执行之后执行public void initFlowQpsRule() {//1.创建存放限流规则的集合List<FlowRule> rules = new ArrayList<FlowRule>();//2.创建限流规则FlowRule rule1 = new FlowRule();rule1.setResource("/consumer/hello");//定义资源,名称唯一rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);//定义限流规则类型rule1.setCount(2); // QPS控制在2以内//3.将限流规则存放到集合中rules.add(rule1);//4.加载限流规则FlowRuleManager.loadRules(rules);}
3.1.2注解方式

上述通过try-catch风格的API可以实现限流,但是对代码侵入性太高,推荐使用注解的方式来实现。

sentinel_consumer

<!--sentinel注解依赖-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
</dependency>

controller

    @RequestMapping(value = "/hello2")@SentinelResource(value="/consumer/hello2",blockHandler = "blockHandlerMethod")public String hello2() {return "Hello Sentienl2!!!";//被保护的逻辑}/***资源访问被阻止的兜底方法*/public String blockHandlerMethod(BlockException e){return "接口被限流了, exception: " + e;}@PostConstructpublic void initFlowQpsRule() {List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule1 = new FlowRule();rule1.setResource("/consumer/hello2");//注意修改资源名称rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);rule1.setCount(2);rules.add(rule1);FlowRuleManager.loadRules(rules);}

app

    //开启sentinel注解扫描@Beanpublic SentinelResourceAspect sentinelResourceAspect(){return new SentinelResourceAspect();}

3.2Sentinel的安装和启动

Sentinel 提供一个轻量级的控制台, 它提供资源实时监控以及规则管理等功能。

  1. 下载地址:https://github.com/alibaba/Sentinel/releases

2.执行命令:java -jar sentinel-dashboard-1.8.1.jar

如果出现这个代表端口号被占用

netstat -ano | findstr "8080" 查找8080端口

taskkill /pid 12345 /f  删除端口

3.浏览器访问:http://localhost:8080,默认账号密码:sentinel/sentinel

3.3 Sentinel接入控制台

pom.xml
        <!--sentinel核心依赖--><!--<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId></dependency>--><!--sentinel注解依赖--><!--<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId></dependency>--><!-- sentinel启动器 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

<!-- sentinel启动器 -->包含的有前两个依赖

application.yml

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 #指定sentinel的地址

controller

/**
 *被保护的逻辑
 */
@RequestMapping(value = "/hello3")
public String hello3() {
    return "Hello Sentienl3!!!";
}

二、sentinel的规则

  1、流控规则

       1)流控规则:

将规则应用到url上,eg:qps=2或thread=2

阈值类型
QPS
QPS:代表每秒的访问次数,只要访问次数到达一定的阈值,则进行限流操作

线程数

线程数:代表的是每秒内访问该api接口的线程数,如果该接口的操作比较长,当排队的线程数到达阈值的时候,进行限流操作

        2)热点参数规则:

将规则应用到参数上,eg:5秒中只能携带相同的参数2次

  • 热点即经常访问的数据,比如:

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

  • 热点参数流控规则是一种更细粒度的流控规则, 它允许将规则具体到参数上

  1. 添加参数
    @RequestMapping(value = "/getUserById/{id}")//不加@SentinelResource注解注解则不会触发热点参数流控@SentinelResource(value = "getUserById", blockHandler = "blockHandlerMethod")public User getUserById(@PathVariable Integer id) {return userFeign.getUserById(id);}//资源访问被阻止的备选逻辑public User blockHandlerMethod(Integer id, BlockException e){return new User(id,"this is blockHandlerMethod",0);}

新增流控规则

        3)系统规则:将规则应用到整合微服务上,eg:sentinel-consumer服务的所有接口qps都等于2

        4)授权规则:将规则应用到调用来源上,eg:?origin=sb时才放心

http://www.dtcms.com/a/550702.html

相关文章:

  • JavaScript 函数调用详解
  • 生活服务网站建设方案免费正能量下载软件
  • 杭州网站设计的公司网站建设项目推文
  • Nginx 主要的几种负载均衡模式
  • 网站宣传内容赣州大余做网站建设
  • 工信部怎么查网站备案西安市发布最新消息
  • 【18】C语言位运算符详解
  • 基于SpringBoot+Vue的中凯农场农资管理系统(权限分配、Echarts图形化分析)
  • 电子取证之windows知识点:从 0 到 1 掌握 Windows 事件日志取证:以 玄机靶场-第五章 Windows 实战-evtx 文件分析
  • UVa 11853 Paintball
  • 北京网站制作公司兴田德润在那里中国最新领导班子
  • 优秀网站seo报价wordpress亚马逊cdn
  • 韶关网站设计公司建设网站 请示 报告
  • 网站开发 兼职挣钱吗WordPress dux3.0
  • 建设网站和公告号的意义网上平台
  • 磁盘分区方案GPT和MBR的区别浅谈
  • 怎么用ps做网站首页字贵阳大数据论坛
  • php p2p网站源码网站icp备案申请流程
  • Java的Stream详解
  • 国家网站备案查询定制开发教程
  • MySQL安装及启用(社区版)
  • whois域名查询网站iis 添加网站 win7
  • 图像分割深度学习学习总结
  • 中铁建设集团网站能用VUE做网站
  • 网站超链接怎么做 word文档网页设计免费模板网站推荐
  • 网站支付接口怎么做百度站长怎么做网站维护
  • 查建筑材料的网站大数据系统
  • 建设银行 北京招聘网站网站代码 公告栏 php
  • leetcode3040.相同分数的最大操作数目II
  • dz网站标题公司做网站的费用用途写什么