Sentinel使用入门

微服务系统中,由于系统数量较多,稳定性相比于单体系统会下降。比如系统中通常有很多依赖,如果依赖的应用响应时间特别长,很可能拖垮当前的系统。如果另外一个系统调用我们的系统特别的频繁,也可能导致服务器压力过大不响应其它的请求。

因此需要一种机制来进行隔离操作,或者减少其它服务之间的相互影响,阿里开源的Sentinel就是为了解决这个问题而出现的,相比于Hystrix,Sentinel功能更加强大,用起来也更加简单。

Hystrix与Sentinel对比文档:https://github.com/alibaba/Sentinel/wiki/Sentinel-%E4%B8%8E-Hystrix-%E7%9A%84%E5%AF%B9%E6%AF%94

Sentinel 是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护等多个维度来帮助您保障微服务的稳定性。

使用

1 添加Maven依赖

       <!-- 使用时替换最新的版本 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.7.1</version>
        </dependency>

             <!-- Sentinel控制台 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.7.1</version>
        </dependency>

2 启动Sentinel控制台,非必选项,但一般都会使用

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar ~/Downloads/sentinel-dashboard-1.7.1.jar
image-20200401082419181

3 写sentinel的代码

import java.util.ArrayList;
import java.util.List;

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 HelloSentinel {
    public static void main(String[] args) throws InterruptedException {
        initRules();

        while (true){
            try (Entry entry = SphU.entry("HelloWorld")) {
                Thread.sleep(10);
                // 业务逻辑
                System.out.println("hello world");
            } catch (BlockException e) {
                
                // 处理被拒绝的请求
                System.err.println("blocked");
            }
        }
    }

    private static void initRules() {
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule = new FlowRule();
        rule.setResource("HelloWorld");
        // set limit qps to 20
        rule.setCount(20);
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
}

4 启动HelloSentinel项目,并且加上启动VM参数

-Dcsp.sentinel.dashboard.server=127.0.0.1:8080

5 去控制台看一下效果,当然也可以看日志,只是不够直观。

  • 日志位置:~/logs/csp/${appName}-metrics.log.{date}
image-20200401082614236
  • 看控制台数据,地址为启动时指定的ip和端口:http://127.0.0.1:8080/。 账号和密码都为:sentinel
image-20200401082831624

6 比如想要控制流速QPS为50.

image-20200401082925346
image-20200401082949470

7 还有降级规则,指定异常数,响应时间进行降级,可以自己试一下。

image-20200401083201209

最后

官方文档写的很全了,这里跑起来演示一下,操作起来很方便。

参考:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容