使用说明

如果只是为了让使 用Sentinel 的限流功能,只需要引入相关的jar包依赖。

添加依赖

添加相关模块的Adapter

Sentinel为每个构建项目的各个组件都打包成了相应的Adapter。项目需要按需引入。现阶段的Dubbo-Adapter模块最高只支持到dubbo 2.6.6

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-dubbo-adapter</artifactId>
<version>1.6.3</version>
</dependency>

各个模块的adapter

限流信息上传dashboard

添加参数

添加此依赖,客户端的实时限流信息能汇总到后台管理界面。

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.6.3</version>
</dependency>
修改启动参数
# 指定 dashboard的访问地址和自己在dashbaord中要显示的名字。
-Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard

经过以上几个步骤,就可以在dashboard中看到相关的项目。里面的流控规则就根据自己实际需要来进行设置。

规则说明

流量控制规则

field 说明 默认值
resource 资源名,限流规则的作用对象如具体的url
count 限流阀值,超过这个值就会触发
grade 阈值类型,QPS或者线程数 QPS
limitApp 流控针对的调用来源 default,代表不区分调用来源
strategy 判断是根据资源本身还是根据其它关联资源(refResource)还是根据链路入口 根据资源本身
controlBehavior 流控效果(直接拒绝/排队等待/慢启动) 直接拒绝

同一个资源可以同时有多个限流规则。

private void initFlowQpsRule() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule(resourceName);
// set limit qps to 20
rule.setCount(20);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setLimitApp("default");
rules.add(rule);
// 加载流控规则
FlowRuleManager.loadRules(rules);
}

熔断降级规则

熔断降级规则包含下面几个重要的属性:

field 说明 默认值
resource 资源名,限流规则最用对象
count 阀值
grade 降级模式。根据RT(熔断)降级还是异常比例降级 RT
timeWindow 降级后的时间作用窗口 (s)

同一个资源可以配置多个降级规则。


private void initDegradeRule() {
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule();
rule.setResource(KEY);
// set threshold RT, 10 ms
rule.setCount(10);
rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
rule.setTimeWindow(10);
rules.add(rule);
// 加载降级规则
DegradeRuleManager.loadRules(rules);
}

系统保护规则

field 说明 默认值
highestSystemLoad 最大的load -1 (不生效)
avgRt 所有入口流量的平均响应时间 -1 (不生效)
maxThread 入口流量的最大并发数 -1 (不生效)
qps 所有入口资源的qps -1 (不生效)
private void initSystemRule() {
List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(10);
rules.add(rule);
// 加载系统规则
SystemRuleManager.loadRules(rules);
}

Hystrix 对比

为什么要引入隔离的。当系统中的慢调用一直运行的时候,会对资源造成一种独占的情况,从而影响其它进程对该资源的访问造成系统相应变慢的现象。

为解决这种情况,引入隔离的方式来运行,使资源间的访问都是相互独立的。

两者隔离方式的区别

线程隔离

Hystrix默认的隔离方式。针对不同的资源创建不同的线程池,不同服务调用都在不同的线程池中,在线程池排队、超时等阻塞情况下可以快速失败、并提供fallback机制。

  • 优点

    线程池隔离的好处是隔离程度比较高,可以针对某个资源的线程池去进行处理二部影响其它资源
  • 缺点

    代价是线程的上下文切换的代价比较大,特别是对低延时的调用影响比较大

    会让机器资源碎片化。比如项目运行于tomcat容器中,本身tomcat自身的线程数就非常多,如果再加上Hystrix创建的线程池,这样上下文切换会有非常大的损耗。

    线程池模式比较彻底的隔离性使得Hystrix可以针对不同资源线程池进行排队、超时情况分别做处理。
信号量隔离

限制对某个资源调用的并发数。

  • 优点

    这样的隔离是轻量级,仅限制对某个资源调用的并发数,而不是显式地去创建线程池,所以对系统地负载比较小。
  • 缺点

    无法对慢调用的自动进行降级,只能等待客户端自己超时,因此可能会出现级联阻塞的情况。

Sentinel可以通过并发线程数模式的流量控制来提供信号量的隔离功能。并结合基于响应时间的熔断降级模式,可以在不稳定的平均相应时间比较高的时候自动降级,防止过多的慢调用占满并发数,影响整个系统

熔断降级对比

两者的熔断降级功能本质上都是基于熔断器模式SentinelHystrix都支持基于失败比率的熔断降级,在调用达到一定量级并且失败率达到设定阈值时自动进行熔断,此时所有对改资源的调用都会被block,直到过了指定的失败窗口才启发性的恢复。

阿里sentinel说明及使用的更多相关文章

  1. 阿里Sentinel整合Zuul网关详解

    前面我们讲解了Sentinel整合Spring Cloud Gateway,详细请查看文章:阿里Sentinel支持Spring Cloud Gateway啦 目前来说,大部分公司线上的网关应该是Zu ...

  2. 阿里sentinel源码研究深入

    1. 阿里sentinel源码研究深入 1.1. 前言 昨天已经把sentinel成功部署到线上环境,可参考我上篇博文,该走的坑也都走了一遍,已经可以初步使用它的限流和降级功能,根据我目前的实践,限流 ...

  3. 想要年薪百万,阿里Sentinel支持RESTful接口都搞不定?

    最近正准备用阿里Sentinel,发现RESTful接口支持的不是很好.有些童鞋可能对Sentinel不是很了解,我们先简单介绍一下. Sentinel简介 Sentinel是一套阿里巴巴开源的流量防 ...

  4. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第八篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...

  5. 阿里Sentinel支持Spring Cloud Gateway啦

    1. 前言 4月25号,Sentinel 1.6.0 正式发布,带来 Spring Cloud Gateway 支持.控制台登录功能.改进的热点限流和注解 fallback 等多项新特性,该出手时就出 ...

  6. 阿里Sentinel控制台源码修改-对接Apollo规则持久化

    改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则,对接后可以直接通过Apollo的后台进行规则的修改,推送到各个客户端实时生效. 但还有一个问题就是Sentinel控制台没有对接Apol ...

  7. 通俗易懂的阿里Sentinel源码分析:如何向控制台发送心跳包?

    源码分析 public class Env { public static final Sph sph = new CtSph(); static { // 在Env类的静态代码块中, // 触发了一 ...

  8. Sentinel 的一些小扩展

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统自适应保护等多个维度来帮助您保障微服务的稳定 ...

  9. springBoot整合Sentinel实现降级限流熔断

    由于hystrix的停止更新,以及阿里Sentinel在历年双十一的贡献.项目中使用了Sentinel,今天我们来讲讲Sentinel的入门教程,本文使用1.6.3版本进行讲解 本文通过Sentine ...

随机推荐

  1. Java复习(五)接口与多态

    5.1接口 允许创建者规定方法的基本形式:方法名.参数列表以及返回类型,但不规定方法主体. 也可以包含基本数据类型的数据成员,但他们都默认为static和final 声明格式为 [接口修饰符]inte ...

  2. 【shell基础】条件测试

    例1 判断目录是否存在 #!/usr/bin/bash back_dir=/var/mysql_back if ! test -d $back_dir;then mkdir -p $back_dir ...

  3. hdu 6035 Colorful Tree(虚树)

    考虑到树上操作:首先题目要我们求每条路径上出现不同颜色的数量,并把所有加起来得到答案:我们知道俩俩点之间会形成一条路径,所以我们可以知道每个样例的总的路径的数目为:n*(n-1)/2: 这样单单的求, ...

  4. BGP联盟

    ---恢复内容开始--- 1. 每台路由器设置loop back口,r1和r6另外多设置两个 2. R2 R3 R4 R5 R6做ospf 以R2为例: ospf 1 router-id 2.2.2. ...

  5. Docker部署Python爬虫项目

    1) 首先安装docker: # 用 yum 安装并启动 yum install docker -y && systemctl start docker 2) 下载自定义镜像需要用到的 ...

  6. [LC] 222. Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...

  7. mycat(读写分离、负载均衡、主从切换)

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 1.环境准备 1.1新增两台虚拟机 mycat01:192.168.247.81 mycat02:192.168.247 ...

  8. 蓝桥杯-PREV31-小朋友排队

    解法: 这题有点像冒泡排序,但是做这题并不需要冒泡排序. 假设第i个小朋友比第j个小朋友高,而且i < j 为了把队伍排成从小到大,第i个小朋友一定要去第j个小朋友的右边.又因为只能交换位置相邻 ...

  9. Python 装饰器 多装饰器同时装饰一个函数 多参数函数

    装饰器是在不修改源代码的情况下,使用装饰器增加原函数的功能. 在软件开发中有一个原则——"开放-封闭",简单地说就是已经实现的功能不允许被修改,但可以被扩展. 封闭:已经实现的功能 ...

  10. C++中字符串的表示与转换

    转换总结 1.char*转string:可以直接赋值. 2.char[]转string:可以直接赋值. 3.char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用st ...