高并发整体可用性:一文详解降级、限流和熔断

这篇具有很好参考价值的文章主要介绍了高并发整体可用性:一文详解降级、限流和熔断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高并发整体可用性:一文详解降级、限流和熔断

 文章来源地址https://www.toymoban.com/news/detail-503800.html

水满则溢,月盈则亏,任何事物都不可能无限制的发展,我们的系统服务能力也一样。

 

当随着流量的不断增长,达到或超过服务本身的可承载范围,系统服务的自我保护机制的建立就显得很重要了。

 

本文希望可以用最通俗的解释和贴切的实例来带大家了解什么是限流、降级和熔断。

 

一、限流 - 自知之明和眼力见

 

一个是本身的承载能力,一个是依赖方的服务能力,其实都是从当前系统的角度来说。

 

1、自知之明之被动限流

 

我只有这么大的能力,只能服务这么多客户!

 

系统对自身的承载能力需要有一个清晰的认识,对于超过承载能力的额外调用,要适当拒绝。

 

而怎样衡量系统承载能力是一个问题。

 

一般的我们有两种常见方案:一是定义阈值和规则,二是自适应限流策略。

 

阈值和规则是owner通过对业务的把控和自身的存储、连接的现状,根据人工经验制定的。这样的策略一般不会出什么大问题,但是不够灵活,对请求反馈的灵敏度和资源的利用率不够。

 

相对的,自适应策略则是一种动态限流策略,是通过对系统当前的运行状况,动态的调整限流阈值,在机器资源和流量处理之间寻找一个平衡。

 

如阿里开源的Sentinel限流器,在动态限流策略上支持:

 

  • Load 自适应:系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护。

 

  • CPU usage:当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。

 

  • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。

 

  • 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。

 

  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

 

2、眼力见之主动限流

 

合作方只有那么大的能力,我只能索取这么多!

 

对下游依赖系统的服务能力,需要有一个精准的判断,对于服务能力弱的下游系统,要适当减少调用,得有点眼力见,对不对。

 

因为,绝大部分的业务系统都不是单独存在的,会依赖很多其他的系统,这些依赖方的服务能力,就像是木桶短板,限制了当前系统的处理能力。这个时候就需要把下游当做一个整体来考虑。

 

因此,需要把集群限流和单机限流配合起来使用,特别是下游服务的实例数、服务能力等和当前系统有较大差距的时候,集群限流还是必要的。

 

一种方案:是通过收集服务节点的请求日志,统计请求量,并通过限流配置,控制节点限流逻辑:

 

摘自:微服务治理:体系、架构及实践

 

我将其称为后置限流,即收集各个节点的请求量和既定阈值对比,超过则反馈到各个节点,依赖单机限流进行比例限流。

 

另一种方案:是限流总控服务,根据配置生产token,然后各个节点消费token,正常获取token后才能继续业务:

 

高并发整体可用性:一文详解降级、限流和熔断

摘自:Sentinel

 

我将其称为前置限流,预先确定分配好可用的token,省去了汇总和反馈的处理机制,相比而言,这种控制方式要相对精准和优雅。

 

3、同步转异步

 

合作方虽然能力有限,但态度很好,加班加点的处理;而我们的客户也很友好,同意多等等

 

一个非常经典的例子,就是第三方支付平台的还款业务,用过的同学应该都有体会,一般都是支付完成之后等一会才会收到销账的通知。

 

这个时延的底层逻辑是什么呢?

 

一般的,金融机构的服务接口,因为其数据一致性和系统稳定性的要求,性能方面可能不如互联网公司的系统。

 

那么,当到了月初月末的还款高峰,如果把支持成功用户的销账请求一股脑的都压给机构,后果可想而知。

 

但是,对于用户来说,整个流程是可以被拆分的,用户侧只要完成支付操作就可以了。至于最终结果,可以允许延后被通知。

 

因此,基本上,金融网关在处理机构销账都是异步的,即先将各业务的销账请求落地,然后异步的限速轮询待处理的单据,再和机构交互。

 

其实,不仅仅是在金融领域,只要我们的业务处理速度存在差异,且流程可以被拆分,即可考虑这种架构思路,来缓解系统压力,保障业务可用性。

 

二、降级 - 丢车保帅

 

事发突然,能力有限,我只能紧着几个重要客户服务!

 

那么,什么情况需要降级,什么链路可以被降级呢?

 

当整个业务处于高峰期,或活动脉冲期,当服务的负载很高,逼近了服务承载阈值,即可以考虑服务降级来保障主功能可用。

 

可以降级的一定是非核心的链路,比如网购场景下的积分抵扣,如果降级积分抵扣链路,其实不影响大部分的支付功能。

 

那么,在系统中我们一般采用的降级方案有哪些呢?

 

1、页面降级

 

即从用户操作页面进行操作,直接限制和截断某功能的入口:

 

高并发整体可用性:一文详解降级、限流和熔断

从页面入口对积分链路降级

 

如上图所示,该业务场景下,是否使用积分,是在页面渲染阶段决定并返回给前段进行页面拼接的。

 

当我们需要对其进行降级时,会通过控制平台进行降级开关切换,系统读到降级开启后,会返回前段积分降级的标识,前端将不再显示积分抵扣入口。即从入口处截断积分链路的执行,达到降级的目的。

 

2、存储降级

 

使用缓存方式来降级频繁操作的存储

 

高并发整体可用性:一文详解降级、限流和熔断

https://blog.csdn.net/di_ko/article/details/118058080

 

对于秒杀业务这种写多读少的场景,对DB的压力是非常大的,一般的,我们会采用上图所示的缓存架构,用缓存操作代替DB操作,用异步MQ代替同步接口,也属于一种存储的降级行为。

 

3、读降级

 

对于非核心信息的读请求禁用

 

微信的抢红包场景,红包列表的展示属于抢红包的非核心链路,因此,对于列表展示,在业务压力较大的情况下,对头像等信息的读,可以直接禁用。

 

4、写降级

 

直接禁止相关写操作的服务请求

 

总结,一句话概括降级的核心--丢车保帅。以损失部分体验的代价,来换取整个业务链路的稳定性和持续可用。

 

三、熔断- 大局观

 

合作方遇到困难了,不能为了自己把人家逼上绝路,别把自己也拖垮!出于人道主义,还得时不时问询下,Are you ok ?

 

熔断机制之所以被我赋予大局观的美称,是因为其所要解决的问题是级联故障和服务雪崩!

 

高并发整体可用性:一文详解降级、限流和熔断

 

在分布式的环境下,异常是常态。如上图所示,当服务C出现调用异常时,会在服务B中出现大量的请求超时和调用延迟。

 

这些调用也是需要占用系统资源的,当大量请求积压,服务B的线程池等资源也会随之耗尽,最终导致整个服务链路的雪崩都是有可能的。

 

因此,当服务C出现异常时,对服务C的调用适当暂停,同时不断监测其接口是否恢复,对于整个链路的健康非常有必要的,上述针对C的处理过程就是熔断。

 

高并发整体可用性:一文详解降级、限流和熔断

Hystrix官方熔断流程

 

从上图可以看到,熔断操作的三个关键点:

 

  • 熔断算法,即什么情况即会被判定为需要熔断

 

  • 熔断后处理,即当前系统不进行远程调用,但调用结果需要有替代逻辑

 

  • 熔断恢复,适当的检测机制,用于结束熔断,恢复正常服务调用。

 

之前在《在所依赖存储不授信的场景下实现柔性事务降级》一文中提到过,我们的分布式事务,会依赖底层存储做元数据存储和一致性校验。

 

但是底层存储的稳定性稍有不足,这里就涉及到了服务熔断的处理:

 

  • 当我们通过关键字监控,检测到底层存储的操作异常操作某阈值时,就会通过脚本触发一个开关切换的操作。

 

  • 此开关打开的作用是,弃用底层存储,直接走兜底消息队列,以保障绝大部分请求得以正常进行。

 

  • 在开发开启的时间段内,用试探线程去试探底层存储是否恢复,当探测到存储恢复正常时,切换开关恢复到正常链路。(这一步目前还未实现,用人工代替了)

 

 

>>>>

参考资料

 

  • Sentinel

    https://github.com/alibaba/Sentinel/wiki/系统自适应限流

  • Hystrix

    https://github.com/Netflix/Hystrix/wiki

 

作者丨Coder的技术之路

到了这里,关于高并发整体可用性:一文详解降级、限流和熔断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务可用性设计

    一、统计指标 根据普罗米修斯Prometheus中的up指标,按照分钟记录服务不可用的记录数 up指标:up{application=“agr-ecos.admin”,instance=“30.79.8.41:43950”,job=“agr-ecos”} 当实例下线时为0,实例上线时为1 1、判断服务不可用逻辑 服务在某个分钟里,所有实例的up指标全为0,如果满足条

    2024年02月07日
    浏览(28)
  • 软件的可用性改善:善用帮助信息

    当我们吭哧吭哧的开发功能性模块的时候,也需要回头思考一下软件的可用性。今天的主题就是使用帮助信息来改善软件的可用性,让软件不仅”能用”,也更”好用”。 帮助信息,也叫工具提示(Tooltip)。当用户的鼠标悬停在一段文字或者控件上时,会自动显示相关的帮助信

    2024年02月10日
    浏览(34)
  • selenium代理ip可用性测试

    测试代理ip是否工作正常,将正常的代理ip提取出来 测试结果

    2024年01月20日
    浏览(38)
  • 14.RocketMQ之高可用性机制

    RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别:在Broker的配置文件中,参数 brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是 Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。 Master角色的Broker支持读和写,Slave角色的Broker仅支

    2024年02月11日
    浏览(35)
  • Elasticsearch的高可用性与容错

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它可以处理大量数据并提供快速、准确的搜索结果。在现实应用中,Elasticsearch的高可用性和容错性是非常重要的,因为它可以确保系统的稳定运行和数据的安全性。 在本文中,我们将深入探讨Elasticsearch的高可用性与容错,包

    2024年02月21日
    浏览(32)
  • 聊一聊医疗器械的可用性

    很抱歉由于各种因素这个号拖更了好久了,最近呢也有几个公众号做的挺好的,比如包总的 MD SRE 、丁总的 医械安全 、 饽饽糕的叨逼叨 ,而且更新也都比较频繁,大家可以 关注 一下; 好久没登录,当我上来看到已经有 5000多 的关注者,说实话,有 感动 ,有 自豪 ,也有

    2024年02月07日
    浏览(35)
  • 让Zookeeper更高效:高可用性扩展策略

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着分布式系统的广泛应用,Zookeeper作为一致性系统的核心组件,在分布式系统中发挥着越来越重要的作用。Zookeeper作为一个分布式协调服务,负责协调分布式系统中的各个组件,保证系统的一致性和可用性。 1.2. 文章目的

    2024年02月14日
    浏览(27)
  • 深入理解 Redis 高可用性方案及其原理

    深入理解 Redis 高可用性方案及其原理 在当今数据驱动的时代,Redis 作为一种高性能的键值存储数据库,在现代应用架构中扮演着举足轻重的角色。无论是作为缓存系统、消息队列还是轻量级数据库,Redis 以其卓越的性能和灵活性赢得了广泛的应用。然而,随着业务规模的不

    2024年03月25日
    浏览(48)
  • 兼容性测试如何提高网站的可用性?

    兼容性测试如何提高网站的可用性? 在现代社会,网站已经成为了人们获取信息、进行交流的主要渠道之一。但是,在网站的设计和开发中,往往会存在兼容性问题,导致不同浏览器或设备的用户无法顺利地访问和使用网站,降低了网站的可用性。因此,进行兼容性测试是提

    2024年02月09日
    浏览(54)
  • Kafka 高可用性集群部署实践 锤子技术

    作者:禅与计算机程序设计艺术 随着互联网应用场景的不断扩张、人们对实时数据处理需求越来越强烈,消息队列(MQ)系统也在逐渐发展壮大。Kafka 是 Apache 开源的分布式消息系统,它是一个分布式、高吞吐量、可扩展且高容错的平台。相对于其他 MQ 系统而言,Kafka 有以下

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包