聊聊Sentinel

Posted 雾喔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊Sentinel相关的知识,希望对你有一定的参考价值。

目录

Sentinel的下载

Sentinel介绍

Sentinel 的历史

Sentinel 基本概念

资源

规则


Sentinel官网:

GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)

Sentinel的下载

先来到官网(上):

 

 

朝下翻

  

选择自己想要的版本下载即可。

启动成功。。。

在自己浏览器上访问:http://localhost:8080/#/login 

访问成功。。。

用户密码都是sentinel

 

 

Sentinel的启动

在终端上输入

java -jar 你的jar包地址

Sentinel介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 的历史

  • 2012 年,Sentinel 诞生,主要功能为入口流量控制。
  • 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。
  • 2018 年,Sentinel 开源,并持续演进。
  • 2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。
  • 2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。
  • 2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。
  • 2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 OpenSergo 标准中,Sentinel 作为流量治理标准实现。

Sentinel 基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

参考自:introduction | Sentinel 

推荐:Sentinel 对比 Hystrix(选型与简介)_sentinel hystrix_MayMatrix的博客-CSDN博客

SpringCloud Alibaba——Sentinel服务熔断与限流(二降级规则)

1.开篇

上一篇文章说完了sentinel的流控规则,其中包括流控模式(直接、关联、链路)、流控效果(快速失败、预热、排队等待)。

更详细的内容可以参考:https://szh-forever-young.blog.csdn.net/article/details/119568801

这篇文章再来聊聊sentinel的降级规则。官方文档:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

这三种降级规则分别是:RT、异常比例、异常数。

  • RT(平均响应时间,秒级)

           平均响应时间   超出阈值  且   在时间窗口内通过的请求>=5,两个条件同时满足后触发降级。窗口期过后关闭断路器。
           RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)

  • 异常比列(秒级)

            QPS >= 5 且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级。

  • 异常数(分钟级)

             异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级。

这里需要注意:之前SpringCloud H版中的Hystrix服务熔断降级中是有半开状态的;而SpringCloud Alibaba的Sentinel的断路器是没有半开状态的,通俗来说,你的保险丝要么是断开,要么就闭合。


2.项目源码

github源码地址:https://github.com/2656307671/SpringCloud-Alibaba-Sentinel

gitee源码地址:https://gitee.com/szh-forever-young/SpringCloud-Alibaba-Sentinel

本次做Sentinel测试的代码请参考上面的仓库。

2.1 RT

我们在sentinel的界面中来配置RT。

首先设置RT的阈值为200ms,是说testD的请求必须在200ms内完成,如果无法完成,则在未来的1秒内将进行服务熔断降级;1秒持续进入5个请求是默认的。

之后在Postman中,设置testD这个请求,永远一秒钟打进来10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完(代码中每个testD请求都会sleep 1秒),在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。后续Postman中的Run停止了,访问量逐渐减少了,再次访问testD可以看到恢复正常了。

2.2 异常比例

这里我们设置了异常比例是0.2,即20%。如果出错,在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。

对应代码中的testE请求。其中有一行:int age = 10/0; 这明显是一个运行时异常。但是我们在Postman中设置了访问10次testE;直接高并发发送请求,多次调用达到我们的异常比例配置条件了。因为一出现异常,那异常比例就是100%啊,所以此时不再报错error而是服务降级了。

不使用Postman,直接访问了话,则会报error,此时与服务降级就无关了。单独访问一次,必然来一次报错一次(int age  = 10/0),调一次错一次;

2.3 异常数

首先异常数是按分钟来统计的。这里对应代码中的testF请求方法。

这里设置的意思是:当异常数达到5次的时候,就会进行服务熔断降级,也即看到的是sentinel默认的出错页面信息,而不是error page。

以上是关于聊聊Sentinel的主要内容,如果未能解决你的问题,请参考以下文章

三探云原生全景图,这次聊聊运行时层

聊聊云原生和微服务架构

云原生时代,聊聊企业上云一些误区

KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点

KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点

和 VMware深信服天翼云招商云专家一起聊聊云原生边缘计算