Sentinel 是什么?

简言之,就是用于管理应用服务的流量控制、熔断降级的组件。当我们的服务有流量控制、熔断降级方面的需求时,可以考虑使用该组件。

Sentinel: 分布式系统的流量防卫兵
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。(摘自官方文档,更多介绍详见:https://sentinelguard.io/zh-cn/docs/introduction.html)

使用

使用方式主要是通过三个步骤:

  1. 定义资源resources (可以理解为Map中的key)
  2. 定义与资源相对应的规则rules (可以理解为Map中的value)
  3. 方法被调用时,通过Entry entry = SphU.entry(resource);进入Sentinel组件,通过resource找到对应rule,从而触发对应的限流或降级规则。

示例

官网教程中有一些demo,这里补充一个Springboot项目中的实际应用示例。
使用Apollo管理限流配置,更加灵活,可动态修改和加载。

/*** Sentienl限流配置** @author: Danger* @time: 2022/6/1*/
@Configuration
@EnableApolloConfig
@Slf4j
public class SentinelAutoConfig {private static Map<String, Object> flowQpsRuleMap;@ApolloJSONValue("${sentinel.flowrule:{\"sayHello\":{\"resource\":\"sayHello\",\"count\":1,\"grade\":1,\"limitApp\":\"default\"},\"sayBye\":{\"resource\":\"sayBye\",\"count\":20,\"grade\":1,\"limitApp\":\"default\"},\"testA\":{\"resource\":\"testA\",\"count\":10,\"grade\":1,\"limitApp\":\"default\"}}}")public void setFlowQpsRuleMap(Map<String, Object> data) {flowQpsRuleMap = data;log.info("update apollo flowQpsRuleMap:{}", flowQpsRuleMap);this.loadFlowQpsRules(flowQpsRuleMap);}private void loadFlowQpsRules(Map<String, Object> flowQpsRuleMap) {List<FlowRule> flowRules = new ArrayList<>();flowQpsRuleMap.forEach((k, v) -> {FlowRule flowRule = JSON.parseObject(JSON.toJSONString(v), FlowRule.class);flowRules.add(flowRule);});FlowRuleManager.loadRules(flowRules);log.info("loadFlowQpsRules success, flowRules={}", FlowRuleManager.getRules());}}
/*** Sentinel限流测试service** @author: Danger* @time: 2022/6/1*/
@Service
@Slf4j
public class SentinelService {@SentinelResource(value = "sayHello")public String sayHello(String name) {Entry entry = null;// 务必保证finally会被执行try {// 资源名可使用任意有业务语义的字符串entry = SphU.entry(name);// 被保护的业务逻辑return "Hello, " + name;} catch (BlockException e) {// 资源访问阻止,被限流或被降级// 进行相应的处理操作log.error("sayHello BlockException");} finally {if (entry != null) {entry.exit();}}return null;}@SentinelResource(value = "sayBye")public String sayBye(String name) {return "Bye, " + name;}/*** 通过sentinelDTO中的属性匹配限流规则** @author Danger* @time: 2022/6/1* @param sentinelDTO* @return java.lang.String*/public String flowRuleTest(SentinelDTO sentinelDTO) {Entry entry = null;// 务必保证finally会被执行try {// 资源名可使用任意有业务语义的字符串entry = SphU.entry(sentinelDTO.getName());// 被保护的业务逻辑printName(sentinelDTO);return sentinelDTO.getName();} catch (BlockException e) {// 资源访问阻止,被限流或被降级// 进行相应的处理操作return handleBlockExecption(sentinelDTO);} finally {if (entry != null) {entry.exit();}}}/*** 触发限流时的业务操作** @author Danger* @time: 2022/6/1* @param sentinelDTO* @return java.lang.String*/private String handleBlockExecption(SentinelDTO sentinelDTO) {log.error("flowRuleSayHello handleBlockExecption, sentinelDTO={}", sentinelDTO);return "handleBlockExecption";}private void printName(SentinelDTO sentinelDTO) {System.out.println(sentinelDTO.getName());}}

写一个测试Controller,使用Jmeter调用,可观察到测试结果如下:
请求flowRuleTest方法,触发“testA”的限流规则,由于使用的压测工具设置的qps为100,所以观察到结果如下:前10次请求正常,之后触发限流,执行了handleBlockExecption逻辑

以上。

阿里开源限流、降级工具Sentinel介绍与使用相关推荐

  1. 阿里巴巴开源限流降级神器Sentinel大规模生产级应用实践

    作者:丁浪,目前在创业公司担任高级技术架构师.曾就职于阿里巴巴大文娱和蚂蚁金服.具有丰富的稳定性保障,全链路性能优化的经验.架构师社区特邀嘉宾! 前言 互联网上关于限流算法.Sentinel功能介绍. ...

  2. 阿里巴巴宣布开源限流降级中间件——Sentinel

    近日,阿里巴巴中间件团队宣布开源 Sentinel,并发布了首个社区版本v0.1.0.GitHub地址为:https://github.com/alibaba/Sentinel . 关于Sentine ...

  3. sentinel 阿里 原理_限流降级神器:哨兵(sentinel)原理分析

    文章较长,但是干货满满,建议收藏或关注后细读 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来 ...

  4. 限流降级神器-哨兵(sentinel)原理分析

    Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 大家可能会问:Se ...

  5. 阿里巴巴开源限流系统 Sentinel 全解析

    今年下半年阿里开源了自研的限流系统 Sentinel,官方对 Sentinel 的介绍中用到了一系列高大山的名词诸如 限流.熔断降级.流量塑形.系统负载保护等,还有漂亮的形容词诸如 轻巧.专业.实时等 ...

  6. sentinel 限流熔断神器详细介绍

    一.限流熔断神器 sentinel 1.什么是 sentinel: 在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素 ...

  7. 带哨兵节点的链_限流降级神器-哨兵(sentinel)的资源调用链原理分析

    点击上方 Yoon丶徒手摘星 ,选择 置顶或者星标技术干货每日送达! 我们已经知道了sentinel实现限流降级的原理,其核心就是一堆Slot组成的调用链. 这里大概的介绍下每种Slot的功能职责:N ...

  8. 高可用架构之限流降级

    一.服务等级协议 我们常说的N个9,就是对SLA的一个描述. SLA全称是ServiceLevel Agreement,翻译为服务水平协议,也称服务等级协议,它表明了公有云提供服务的等级以及质量. 例 ...

  9. 36、熔断-限流-降级

    目录 一.服务雪崩 二.熔断-限流-降级概述 三.熔断限流技术选型 四.sentinel限流 1 - 基于QPS限流 2 - Throttling策略 3 - sentinel预热/冷启动 五.sen ...

最新文章

  1. windows opensshd 连接就close_基于Windows白名单执行Payload上线Metasploit 渗透红队笔记...
  2. OpenCV 4.2.0 发布,Intel 开源的计算机视觉库
  3. 计算机网络通信有哪些研究课题,科研进阶 | 西北大学 | 电子信息工程、通信与信息系统:通信与计算机网络...
  4. android普通权限说明,Android权限说明.doc
  5. 【Ubuntu-Tensorflow】GPU设置及显存资源分配
  6. C - Digital Path 计蒜客 - 42397(dp记忆化搜索)
  7. Nginx 禁止部分 User-Agrent 访问
  8. html 用svg缩放拉伸,html – 拉伸SVG以适应其父级的100%高度和宽度
  9. ip中继对接_朗视IPPBX为桃源居中澳实验学校打造IP语音校园!
  10. asp.net 递归删除文件夹及其子文件夹和所有文件[转]
  11. 条件锁pthread_cond_t
  12. python处理网页弹窗_Selenium2+Python自动化-处理浏览器弹窗(转载)
  13. C#通过字符串分割字符串Split
  14. css 下划线_css学习
  15. 在马来西亚做it总监_IT行业40岁以上的人都去哪儿了?
  16. 微信小程序项目源代码SSM英语学习平台
  17. C++ 性能优化篇三《测量性能》
  18. MAC版SecureCRT+SecureFX 安装说明
  19. redis 删除操作命令
  20. Linux系统之查找文件和打包压缩文件

热门文章

  1. 张长水:图像识别与机器学习
  2. 四位行波进位加法器_【HDL系列】硬件加法器原理与设计小结
  3. 四位行波进位加法器_行波进位加/减法器的硬件开销和性能分析
  4. linux的C开发工具
  5. 常见软件开发模型对比
  6. 活着就是为了改变世界
  7. vb 使用IAccessible接口获取QQ聊天记录
  8. 太空垃圾回收-7自由度机器人MATLAB仿真
  9. 这种python反爬虫手段有点意思,看我怎么P解
  10. linux gsoap交叉编译,Gsoap交叉编译