消息队列和应用工具产品体系-限流降级概念简介

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 消息队列和应用工具产品体系-限流降级概念简介

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:消息队列和应用工具产品体系-限流降级概念简介】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19041


消息队列和应用工具产品体系-限流降级概念简介

 

高可用常见策略和 AHAS 限流降级概念简介

本章学习高可用架构设计中其他的常见高可用策略以及阿里巴巴的应用高可用产品AHAS。

高可用是系统设计中最重要的技术指标,而在互联网场景下,用户的高并发访问是系统高可用的最大挑战之一。对于这种场景,首先,通过弹性伸缩来处理数据计算部分的突发流量。其次,在系统的大功能模块之间的互相调用时,可以采用异步调用的方式进行处理,同时使用消息队列来实现模块的解耦和消息的削峰填股。但是在模块内部涉及到数据读取或存储的同步调用时,应该如何来进行高并发场景下,的高可用设计和应对呢?

image.png


限流、熔断降级的定义1

 

在这种场景下,就要用到不同的技术,一般来讲,主要的技术手段有三种,他们是缓存、限流和熔断降级。缓存在阿里云中有单独的产品可以进行技术支持,而限流和熔断降级则是我们接下来要重点介绍的。

限流的概念在同步调用的场景下,当后端服务收到前端请求时,无法像异步服务一样将请求长期缓存,是必须在有限的时间内决定是否响应本次请求。

为了处理这种需求,比较推崇的高可用做法是在服务提供者的上游安装一个限流器组建,由限流器负责处理是否响应请求。限流器组件的工作原理大致如下,首先,限流器会时刻检查流经限流器进入服务提供者的流量,如果当前流量没有超过后端服务提供者的处理能力,则限流器放行请求流量进入后端服务。一旦当前通过限流器的流量超过限流器设定的阈值时则限流器将前端请求直接返回错误,这样就避免了前端长时间的等待和后端服务被大流量压垮的情况。

 

限流、熔断降级的定义2

 

同步调用不向异步调用,后端服务可以将前端请求缓存起来,等待合适的时间再做处理,是必须在很短的时间内做出判断,对请求做出处理或拒绝的选择。这种情况下,同步服务效用方式的失败几率就远远大于义务服务调用方式。分步式微服务架构中,服务的相互调用关系非常复杂,一个底层服务的失败往往会导致上层应用出现大面积的雪崩性失败。因此,为了避免这种情况的出现,在分布式调用中就需要另一种机制进行对应,这就是熔断和降级功能。

熔断功能:熔断功能的定义是服务请求者时刻监视发往后端应用请求的失败率和响应速度。
如果发现请求的失败率过高或响应速度过慢,则说明后端服务处于不稳定的状态。这时候为了避免增加不稳定的后端服务的压力,会在一定时间内放弃对后端服务的调用,使其有喘息的机会,从而避免了后端服务因为不稳定的状态而返回错误。但是前端因为后端返回的错误而不断重试,反而加剧后端服务压力所带来的恶性循环。简单的说,熔断功能就是前端应用为后端的稳定提供了一个自恢复保险的功能,当后端不稳定时,自动切断同后端服务的通讯,保险丝断开。而当后端服务经过一段时间恢复之后,则再次恢复对后端服务的调用保险丝复位。

 

image.png

限流、熔断降级的定义3

 

降级服务是指当前端服务向后端发起请求,当后端服务却因为限流、熔断、自身错误、超时等原因失败时,前端服务为了避免调用错误雪崩的发生,不会简单的终止业务流程,再向上级服务返回错误,而是会为后端服务提供一种或几种功能和资源消耗比较低但可用度较高的方案进行备份,以应对后端服务失效的情况。这里要注意的是,降级服务中提到的备份方案和主备方案中的备份方案并不一样,主备方案中的备份方案指的是和主方案完全相同的业务逻辑实现,而降级服务中的备份方案指的是调用方准备临时性的替代方案,以应对当主服务失效时的异常情况,从而降低错误雪崩出现的概率,

以下图为例

image.png

 

在默认情况下,淘宝的首页会为每个用户提供个性化的实时产品推荐服务,而这个推荐系统相对来讲计算量会比较大,消耗的计算资源也比较多。这种情况下,一旦因为某些原因,如计算资源吃紧或业务出现了故障导致个性化推荐服务出现了故障,按照业务高可用的原则,不能直接将错误返回给淘宝网首页,导致首页出现问题。这个时候开发者就会按照降级方案,调用一个功能较低一级但资源消耗比较少可靠度比较高的公共实时页面服务生成一个所有用户都统一的实时页面来替代原有的个性化实时页面,来保证淘宝网页面的正常显示。如果在极端情况下,公共实时首页也无法提供服务,首页服务则会再次进行降级,通过一个不需要计算同时可靠度最高的静态备份页面来替代原有的实时页面,已保证淘宝网首页的最基本业务功能的高可用性。

 

阿里开源限流降级产品 Sentinel

 

前面介绍了熔断和限流降级的功能定义,同学们可以回想一下,在微服务核心组件的课程中,我们曾经为大家介绍了熔断器的概念,实际上限流和熔断降级功能所要面解决的问题和熔断器基本是一致的,都是针对分布式服务调用时可能出现的错误,提供一种安全的容错和处理机制。而在微服务组件的学习过程中,我们也讲过,开发者如果想自己开发一个功能完备、可靠度高的微服务组件,是一件很消耗精力的事情,因此,如果同学们在项目开发中有流量控制方面的需求。我们为大家推荐阿里巴巴的开源限流降级产品Sentinel,Sentinel是面向微分布式服务架构的高可用流量防护组件,在2012年诞生之时,主要是被用来进行阿里巴巴内部服务的入口流量控制。而在2013年到2017年的五年内,Sentinel在阿里巴巴内部迅速发展,成为了底层基础技术模块,提供了从限流、流量、整形、熔断、降级、系统负载保护、热点保护等多个维度的高可用功能,覆盖并承接了阿里巴巴近十年来的双11大促流量下所有核心场景的高可用流控功能。
2018年Sentinel正式开源后,它的使用范围逐渐从单一的微服务组件扩展到了企业级架构的各个组件。借助开源社区的力量,Sentinel提供了与NGINX、 CLOUD NATIVE、 GRPC等组件进行无缝整合的解决方案。从而构建出一套针对整体企业架构的高可用流控解决方案,而在2019年至今,Sentinel也先后推出了C++和Go语言版本,同时针对下一代微服务架构Service Mesh提供了集群流量解决方案。解决Service Mesh架构下不同开发语言之间的限流问题,继续朝着与原生的方向进行了演进。

image.png

相关文章
|
1月前
|
消息中间件 存储 缓存
Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
94 2
|
7月前
|
存储 消息中间件 监控
消息队列和应用工具产品体系-ARMS 服务的产品功能
消息队列和应用工具产品体系-ARMS 服务的产品功能
199 0
|
18天前
|
消息中间件 人工智能 监控
|
2月前
|
消息中间件 存储 负载均衡
简单入门:消息队列的概念和应用
在复杂的系统架构中,组件间的通信是至关重要的问题。消息队列作为一种解决方案,能够使组件之间的通信更加高效、可靠。本文将从简单到复杂,逐步向您介绍消息队列的概念、使用场景以及如何实现。
98 3
|
7月前
|
消息中间件 监控 Java
消息队列和应用工具产品体系-ARMS 监控种类简介(2)
消息队列和应用工具产品体系-ARMS 监控种类简介(2)
311 1
消息队列和应用工具产品体系-ARMS 监控种类简介(2)
|
7月前
|
消息中间件 监控 数据处理
消息队列和应用工具产品体系-APM 系统简述和架构演化
消息队列和应用工具产品体系-APM 系统简述和架构演化
189 0
|
3月前
|
消息中间件 BI Serverless
消息队列推出serverless版、Quick BI升级至5.0……阿里云近期产品动态汇总
消息队列推出serverless版、Quick BI升级至5.0……阿里云近期产品动态汇总
478 1
|
4月前
|
消息中间件 缓存 运维
java消息队列基础和RabbitMQ相关概念(二)
java消息队列基础和RabbitMQ相关概念
53 0
|
4月前
|
消息中间件 存储 Java
java消息队列基础和RabbitMQ相关概念(一)
java消息队列基础和RabbitMQ相关概念
46 0
|
5月前
|
消息中间件 存储 NoSQL
MQ消息队列篇:三大MQ产品的必备面试种子题
MQ(Message Queue)作为一种用于实现异步通信的技术,具有重要的作用和应用场景。在面试过程中,MQ相关的问题经常被问到,因此了解MQ的用途和设计原则是必不可少的。本文总结了MQ的常见面试题,包括MQ的作用、产品选型、消息不丢失的保证、消息消费的幂等性、消息顺序的保证、消息的高效读写、分布式事务的最终一致性等方面。通过深入理解这些问题,可以更好地理解MQ的应用和设计,为面试和实际应用提供参考。
101 0

热门文章

最新文章

  • 1
    Serverless 应用引擎产品使用之在函数计算中,数据库访问失败如何解决
    6
  • 2
    Serverless 应用引擎产品使用之在阿里云函数计算中发现没有NAC(Native Application Component)选项,且无法自己上传MOD(模块)如何解决
    6
  • 3
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,调用了FC函数但是没有执行或者报错,并且在FC函数后台也看不到调用记录日志如何解决
    7
  • 4
    Serverless 应用引擎操作报错合集之在阿里函数计算中,sd部署启动报错CAExited 报错信息“operation not permitted”如何解决
    5
  • 5
    Serverless 应用引擎操作报错合集之在阿里函数计算中,SD Controlnet Depth 运行过程中出现错误“urllib3 v2.0 only supports OpenSSL 1.1.1+”如何解决
    7
  • 6
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
    7
  • 7
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,服务器调用FC函数时出现 "[Errno -3] Temporary failure in name resolution)" 错误如何解决
    5
  • 8
    Serverless 应用引擎操作报错合集之在Serverless 应用引擎中,部署过程中遇到错误代码如何解决
    9
  • 9
    Serverless 应用引擎操作报错合集之在 Serverless 应用引擎中,遇到“没法通过 head 传递灰度标识”如何解决
    7
  • 10
    Serverless 应用引擎操作报错合集之在阿里函数计算中,函数执行超时,报错Function time out after如何解决
    12