Alibaba开源组件-分布式流量控制框架sentinel初探

2018年12月09日 18:23:11 SuperPurse 阅读数 1965更多

分类专栏: J2EE
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

Sentinel 是什么?
还是皮一下吧详细的介绍在Alibaba已经介绍的很详细了。

Sentinel: 分布式系统的流量防卫兵

如何使用:
其实也就三个步骤:
1、添加依赖
目前的最新的版本是0.2

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>0.2.0</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

2、初始化资源
需要使用如下的代码块将 你自己的代码块给包围起来。

Entry entry = null;
try {
entry = SphU.entry(resource);
//我的代码块
doSomething();
} catch (BlockException e1) {
//怎么处理那些被阻塞的请求
} finally {
if (entry != null) {
entry.exit();
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在Sentinel中,对那些被阻塞的请求,都是用catch到BlockException异常的方式进行处理的。

3、定义流量控制规则

Sentinel定义了三种规则对象,分别是:

FlowRule:流量控制规则

DegradeRule:熔断降级规则

SystemRule:系统负载规则
  • 1
  • 2
  • 3
  • 4
  • 5

我们需要定义的规则的参数都是对应这些类的属性。这三个规则分别对应者三个RuleManager来加载规则。比如对于流量控制规则,使用FlowRuleManager.loadRules(List rules)来加载定义好的流控规则,从API可以看出,定义的规则可以不止一个。

定义流量控制规则一个demo如下:

publicp  static void initFlowRules(String resource){
List rules = new ArrayList();
FlowRule rule = new FlowRule();
rule.setResource(resource); //资源名
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //限流阈值类型,此处为 qps类型
rule.setCount(5); //限流阈值,表示每秒钟通过5次请求
rules.add(rule); //将定义好的rule放在List中
FlowRuleManager.loadRules(rules);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

详细demo如下:


package com.alibaba.alibabaSentinel.test;
/**
*
* Copyright: Copyright (c) 2018 Jun_Zhou
*
* @ClassName: SentinelTest.java
* @Description: 分布式流量框架sentinel测试程序;
*
* @version: v1.0.0
* @author: JunZhou
* @Email: 1769676159@qq.com
* @Site: CERNO
* @date: 2018年12月9日 下午5:57:51
*/ import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; public class SentinelTest
{
static int executedNumber = 0; @Test
public void test01()
{
String resourceName = "qpsSentinel";
initFlowRules(resourceName); //上面定义的规则
for (int i = 0; i < 10; i++)
{
Entry entry = null;
try
{
entry = SphU.entry(resourceName);
//我的代码块
doSomething();
}
catch (BlockException e1)
{
e1.printStackTrace(); //直接将异常打出来
}
finally
{
if (entry != null)
{
entry.exit();
}
}
}
} public static void doSomething()
{
// TODO Auto-generated method stub
executedNumber++;
System.out.print("-------CurrentExecutedNumber-------" + executedNumber);
} @SuppressWarnings({ "rawtypes", "unchecked" })
static void initFlowRules(String resource)
{
List rules = new ArrayList();
FlowRule rule = new FlowRule();
rule.setResource(resource); //资源名
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //限流阈值类型,此处为qps类型
rule.setCount(5); //限流阈值,表示每秒钟通过5次请求
rules.add(rule); //将定义好的rule放在List中
FlowRuleManager.loadRules(rules);
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

运行结果:

Alibaba开源组件-分布式流量控制框架sentinel初探的更多相关文章

  1. 【转】Dubbo是Alibaba开源的分布式服务框架

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  2. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...

  3. 开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。

    seata的使用 1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而 ...

  4. 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目

    微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...

  5. Java分布式服务框架Dubbo初探(待实践)

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  6. 阿里分布式服务框架Dubbo的架构总结

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  7. 快速了解阿里微服务热门开源分布式事务框架——Seata

    一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...

  8. dubbo分布式rpc框架用法

    dubbo是阿里巴巴开源的分布式服务框架,致力于提供高性能和透明化的rpc远程服务调用方案,以及soa服务治理方案,如果没有分布式需求,是不需要dubbo的,分布式环境dubbo的使用架构官方给出了一 ...

  9. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

随机推荐

  1. HTML标签功能分类

    按功能类别对HTML标签进行分类,源自HTML 参考手册 基础 标签 描述 <!DOCTYPE> 定义文档类型. html 定义 HTML 文档. title 定义文档的标题. body ...

  2. phpcms9 从注入点入手和 从前台getshell

    弄了3天了  这个点 总结一下这三天的坑吧 0X01 注入点入手 /index.php?m=wap&c=index&a=init&siteid=1 获取cookie 传给 us ...

  3. 动态生成html文件

    #include"stdio.h" main() { FILE *a; int x1,x2,N1=99,N2=60; char FileName[100]; for(x1=10;x ...

  4. Java集成POI进行Excele的导入导出,以及报错: java.lang.AbstractMethodError..........

    报错信息如下 java.lang.AbstractMethodError: org.apache.poi.xssf.usermodel.XSSFCell.setCellType(Lorg/apache ...

  5. hive序列化和反序列化serde

    一.简介 SerDe是Serializer/Deserializer的缩写.SerDe允许Hive读取表中的数据,并将其以任何自定义格式写回HDFS. 任何人都可以为自己的数据格式编写自己的SerDe ...

  6. How to Fix Grub error: no such partition Grub Rescue

    错误信息: error: no such partition Entering rescue mode... grub rescue> _ 错误原因: grub找不到文件normal.mod 解 ...

  7. AMBARI部署HADOOP集群(3)

    1. 安装ambari-server yum -y install ambari-server 2. ambari server 需要一个数据库存储元数据,默认使用的 Postgres 数据库.默认的 ...

  8. 3-mybatis-xml配置

    配置文件主要在官网文档是已有详细说明. 1  properties 在上一节中已经有说明. 2 settings MyBatis中的调整设置. <settings> <!--全局地开 ...

  9. LC 656. Coin Path 【lock, Hard】

    Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...

  10. SAX解析示例代码和原理

    import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; ...