作者 | 宿何  阿里巴巴高级开发工程师

Sentinel 是阿里巴巴开源的,面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 承接了阿里巴巴近 10 年的 双11 大促流量的核心场景,例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服务等,是保障微服务高可用的利器,原生支持 Java/Go/C++ 等多种语言,并且提供 Istio/Envoy 全局流控支持来为 Service Mesh 提供高可用防护的能力。

近期,Sentinel Go 0.3.0 正式发布,带来了熔断降级特性支持,可以针对 Go 服务中的不稳定调用进行自动熔断,避免出现级联错误/雪崩,是保障服务高可用重要的一环。结合 Sentinel Go 已经提供的 gRPC、Gin、Dubbo 等框架组件的适配模块,开发者可以快速在 Web、RPC 调用层面配置熔断降级规则来保护自身服务的稳定性。同时 0.3.0 版本也带来了 etcd 动态数据源模块,开发者可以方便地通过 etcd 来动态调整熔断降级策略。

Sentinel Go 项目地址:https://github.com/alibaba/sentinel-golang

为什么需要熔断降级

一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的服务进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。

Sentinel Go 熔断降级特性基于熔断器模式的思想,在服务出现不稳定因素(如响应时间变长,错误率上升)的时候暂时切断服务的调用,等待一段时间再进行尝试。一方面防止给不稳定服务“雪上加霜”,另一方面保护服务的调用方不被拖垮。Sentinel 支持两种熔断策略:基于响应时间(慢调用比例)和基于错误(错误比例/错误数),可以有效地针对各种不稳定的场景进行防护。

下面我们介绍一下 Sentinel 流控降级的一些最佳实践。

流控降级最佳实践

在服务提供方(Service Provider)的场景下,我们需要保护服务提供方不被流量洪峰打垮。我们通常根据服务提供方的服务能力进行流量控制,或针对特定的服务调用方进行限制。为了保护服务提供方不被激增的流量拖垮影响稳定性,我们可以结合前期的容量评估,通过 Sentinel 配置 QPS 模式的流控规则,当每秒的请求量超过设定的阈值时,会自动拒绝多余的请求。

在服务调用端(Service Consumer)的场景下,我们需要保护服务调用方不被不稳定的依赖服务拖垮。借助 Sentinel 的信号量隔离策略(并发数流控规则),限制某个服务调用的并发量,防止大量慢调用挤占正常请求的资源;同时,借助熔断降级规则,当异常比率或业务慢调用比例超过某个阈值后将调用自动熔断,直到一段时间过后再尝试恢复。熔断期间我们可以提供默认的处理逻辑(fallback),熔断期间的调用都会返回 fallback 的结果,而不会再去尝试本已非常不稳定的服务。需要注意的是,即使服务调用方引入了熔断降级机制,我们还是需要在 HTTP 或 RPC 客户端配置请求超时时间,来做一个兜底的保护。

同时 Sentinel 还提供全局维度的系统自适应保护能力,结合系统的 Load、CPU 使用率以及服务的入口 QPS、响应时间和并发量等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。系统规则可以作为整个服务的一个兜底防护策略,保障服务不挂。

Let’s start hacking!

Sentinel Go 版本正在快速演进中,我们非常欢迎感兴趣的开发者参与贡献,一起来主导未来版本的演进。Sentinel Go 版本的演进离不开社区的贡献。若您有意愿参与贡献,欢迎联系我们加入 Sentinel 贡献小组一起成长(Sentinel 开源讨论钉钉群:30150716)。

同时,一年一度的阿里巴巴编程之夏(Alibaba Summer of Code)开始啦!如果你是在校的学生,有兴趣参与 Sentinel 项目的开发和演进,不要错过此次机会,欢迎 pick 感兴趣的 issue 提交提案:https://github.com/alibaba/Sentinel/issues/1497

Now let’s start hacking!

第 3 期云原生网络研讨会邀您参加

今晚 19:00 - 20:00,阿里云技术专家将为大家带来《如何为云原生应用带来稳定高效的部署能力?》,届时将会介绍阿里经济体大规模应用上云过程中遇到的核心部署问题、采取的对应解决方案,以及这些方案沉淀为通用化能力输出开源后,如何帮助阿里云上的用户提升应用部署发布的效率与稳定性。

听众可获取以下收益:

• 了解阿里经济体大规模应用上云的实践经验,如何解决原生 K8s workload 不满足场景需求的问题;
• 作为外部用户,如何体验和使用上阿里经济体上云所沉淀下来的应用部署发布能力;
• 演示阿里巴巴针对大规模 K8s 集群如何做到 DaemonSet 高可用的灰度升级(即将开源!)

点击链接即可预约直播:https://yq.aliyun.com/live/2898

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

阿里开源分布式限流框架 -Sentinel Go 0.3.0 发布,支持熔断降级能力相关推荐

  1. gateway sentinel 熔断 不起作用_Sentinel 1.8.0 年度版本发布,熔断降级重构升级

    简介:在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长.慢调用比例降 ...

  2. Sentinel 1.8.0 年度版本发布,熔断降级重构升级!

    在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长.慢调用比例降级策略 ...

  3. spring boot框架_redislimiter-spring-boot分布式限流框架

    1. 修改项目resources/application.yml文件 server: port: 8888 #端口spring: application: name: demo1 #应用名称必须要配置 ...

  4. 分布式限流算法及方案介绍

    欢迎访问原文地址来阅读最新版本 转载请注明出处:kang.fun/distributed-ratelimiter 个人博客:kang.fun 业务场景 现代互联网很多业务场景,比如秒杀.下单.查询商品 ...

  5. 分布式限流实战--redis实现令牌桶限流

    这篇文章我们主要是分析一下分布式限流的玩法. 因为限流也是一个经典用法了. 1.微服务限流 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.缓存.降级和限流是保护微服务系统运行稳定性的三大利器 ...

  6. 安琪拉教妲己分布式限流

    安琪拉教妲己分布式限流 在系统设计中,限流是保障系统高可用的一种常规手段,同样的手段还有熔断.服务降级等等,此篇文章作为一个开端,是<安琪拉教妲己分布式系统设计>的第一篇 妲己:听说最近你 ...

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

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

  8. 阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理

    阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理 前沿技术精品 2021-11-17 10:43:04 阅读数:77 评论数:0 点赞数:0 收藏数:0 标签:Sentinel ...

  9. 26.分布式限流设计

    艾编程架构课程第五十五节笔记未完待续 分布式限流设计 1. 分布式限流概述 2. 分布式限流的几种纬度 2.1. QPS和连接数控制 2.2. 传输速率 2.3. 黑白名单 2.4. 分布式环境 3. ...

最新文章

  1. linux6的关机快捷键是,桌面应用|Fedora GNOME 的常用快捷键
  2. 离散数学及其应用 (Kenneth H·Rosen 著)
  3. 中国中草药提取物市场需求容量与投资价值预测报告2022年
  4. 请求包含(Include)和请求转发(Forward)
  5. 使用 JIRA 4.0 + Greenhopper 4.0 进行项目状态跟踪(转)
  6. websocket 更新点位 浏览器卡顿_我们来看看Swoole是如何实现WebSocket服务器及客户端的...
  7. python 登录接口_使用python编写一个登录接口
  8. 4月14日,微软发布例行月度安全更新
  9. C#生成不重复随机数列表
  10. Thinkphp新增字段无法插入到数据库问题
  11. The command (dfs.browser.action.delete) is undefined 解决Hadoop Eclipse插件报错
  12. 专业书籍阅读-Earth System Science Data Resources
  13. 触发器 索引视图 游标 事务
  14. 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)篇节一.doc...
  15. Houdini定义属性方式
  16. 金晨想在无人车上劈叉,撒贝宁与数字祝融号对话…这届百度世界大会,有被惊艳到...
  17. python 3des加密_python3使用3des加密
  18. 淘宝、天猫、京东、苏宁等平台抢购脚本
  19. 三维旋转详细解读(Rodrigues‘ Roatation Formula 罗德里格旋转公式)
  20. 自动清理垃圾文件与文件夹脚本.bat

热门文章

  1. 020 Android之so文件动态调试
  2. Python爬百度图片并下载到本地实战
  3. Nginx的正向代理与反向代理
  4. XML Schema简介
  5. python profile_python程序之profile分析
  6. 请立即弃用 Notepad++,还有 5 款更牛逼的选择!
  7. Github 又不能访问了!!!
  8. 如何去写一手好 SQL?
  9. 开发中经常碰到的问题cookie和session问题,今天一并解决
  10. java web总结:tomcat使用教程