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

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

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

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

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>0.2.0</version>
</dependency>

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

Entry entry = null;
try {
    entry = SphU.entry(resource);
    //我的代码块
    doSomething();  
} catch (BlockException e1) {
    //怎么处理那些被阻塞的请求
} finally {
    if (entry != null) {
        entry.exit();
    }
}

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

3、定义流量控制规则

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

FlowRule:流量控制规则

DegradeRule:熔断降级规则

SystemRule:系统负载规则

我们需要定义的规则的参数都是对应这些类的属性。这三个规则分别对应者三个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);
    }

详细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);
    }

}

运行结果:
在这里插入图片描述


Previous
使用nativefier将web打包为WebApp 使用nativefier将web打包为WebApp
在github上浪的时候发现一款开源库,可以直接将任意的网站打包为webapp。具体的操作步骤如下: 安装node.js环境 使用npm安装nativefier库; npm install nativefier -g 3.使用nativ
2018-12-09
Next
MYSQL线上审核规范 MYSQL线上审核规范
命名规范Ø库名、表名、字段名,使用小写字母 Ø库名、表名、字段名,不要超过30个字符 Ø库名、表名、字段名,尽量见名知意,使用下划线分割 Ø库名、表名、字段名,禁止使用MySQL保留字 Ø临时库、表名,必须以tmp为前缀,以日期为后缀,例如
2018-12-09