限流和降级(下) | 如何打造平台稳定性能力(二)

简介:

上一期我们谈到了阿里巴巴早期是通过通过在 Nginx 上实现的扩展组件TMD(taobao missile defense淘宝导弹防御系统)实现了接入层限流的主要工作,TMD系统可通过域名类限流、cookie限流、黑名单以及一些安全策略等很好的实现了在接入层的限流措施。

但对于服务层,TMD就无能为力了。对于实现服务的限流控制,传统的实现方式通常用spring的AOP机制,对需要限流的接口定义一个advice拦截器,但这套方案在实际应用场景中还是会发现不少问题。详细问题可通过以下的传送门,进行了解。

第一期回顾:限流和降级 - 传送门

一、Sentinel 简介

第二期我们将分享到阿里巴巴是如何解决服务层限流时遇到的问题的。在今年7月底的Aliware Open Sourec深圳站的活动上,阿里巴巴宣布开源面向分布式服务架构的轻量级限流降级框架 Sentinel。Sentinel正如它英文的意思“哨兵”一样,为整个服务化体系的稳定运行行使着警戒任务,是对资源调用的控制平台,主要涵盖了授权、限流、降级、调用统计监控四大功能。

  • 授权:通过配置白名单和黑名单的方式分布式系统的接口和方法进行调用权限的控制;
  • 限流:对特定资源进行调用的保护,防止资源的过度使用;
  • 降级:判断依赖的资源的响应情况,但依赖的资源响应时间过长时进行自动降级,并且在指定的时间后自动恢复调用;
  • 监控:提供了全面的运行状态监控,实时监控资源的调用情况,如QPS、响应时间、限流降级等信息;

Sentinel 平台有两个基础概念,资源和策略,对特定的资源采取不同的控制策略,起到保障应用稳定性的作用。Sentinel 提供了多个默认切入点,比如服务调用时,数据库、缓存等资源访问时,覆盖了大部分应用场景,保证对应用的低侵入性,同时也支持硬编码或者自定义AOP的方式来支持特定的使用需求。

二、Sentinel 限流的实现原理

Sentinel 平台架构图如下,需要通过Sentinel 实现限流功能的应用中都嵌入Sentinel 客户端,通过Sentinel 客户端中提供对服务调用和各资源访问缺省实现的切入点,使得应用完全不需要对实现限流的服务或资源进行单独的AOP配置和实现,同时不仅可以限制自己的应用调用别的应用,也可以限制别的应用调用我的应用。通过这些资源埋点实时计算当前服务的QPS,也可通过现有的监控系统获取到应用所在服务器的相关系统监控指标,用于限流规则配置中的阀值比对。

16d24298fda56b92577f69819b1d8111

▵Sentinel 平台架构示意图

Sentinel控制台会从客户端拉取资源实时的运行监控数据如QPS、响应时间等,并展示在控制台的监控面板上。控制台给运维人员提供了针对服务、缓存、数据库等资源访问设置各种限流规则,并将设置好的规则发送到规则配置中心后,再有服务器将规则推送到相关的Sentinel客户端,让设置的规则最终在应用运行状态是时快速生效。

三、Sentinel 降级的实现原理

Sentinel平台除了限流的核心功能外,还提供了降级的功能。我们知道,在服务调用链上,存在服务间的强弱依赖,即有些业务请求处理过程中,有些服务是否正常被调研或成功处理了服务请求,对于整个业务请求不会产生决定性的影响,比如交易链路中快递优惠这个服务,这类服务调用链中就会标记为弱依赖的服务。

设想一下,如果在双11活动启动后,大量的用户订单请求涌入平台,此时发现平台的整体水位已经像平台最大处理能力的水位逼近时,除了限流可以起到第一层的保护作用外,我们还可以将那些之前标记为弱依赖的服务平滑下线,也就是让订单创建的处理流程中去掉那些弱依赖的服务调用,达到将节省出的系统资源更好地服务于核心服务的运行;又或者在大促时,某核心服务依赖某一个非核心的服务,但发现因为这个非核心服务的处理性能和服务响应时间较长,导致了当前核心服务的处理出现了瓶颈,这时为了保证核心服务的正常处理,就需要在核心服务业务逻辑中对于那个非核心服务的调用暂时停止。这样类似的场景就称为服务降级,即从服务调用者的角度,对所依赖的下游服务采取停止调用的措施,以保证当前服务的处理效率。

要实现服务降级,需要在应用或服务实现中,首先留下可供服务降级进行服务是否调用切换的逻辑。一般在代码中采用static值的方式,作为业务逻辑分支的判断条件,通过对这些static值的修改,实现服务调用逻辑的变化。同样可以通过Sentinel控制台提供的降级规则的配置功能,当对某个服务的方法响应时间一旦超过阀值后,就意味着调用的这个服务已经出现了处理性能的问题,则会自动切换到降级模式,降级持续的时间可自定义设置。

四、Sentinel 限流的实现原理

总结来说,Sentinel平台所提供的限流和降级功能,是今天阿里巴巴集团如此庞大、复杂的服务化平台稳定运行的关键,不管是在双11这样的大促活动中,还是几乎每天都有基于服务化体系构建起来的新兴业务上线,整个服务化平台能够稳定运行直观重要。从技术角度来说,企业如果要构建自身的服务化平台,如何保障平台稳定性运行的重要能力是服务化平台建设中一定要考虑的问题。

限流和降级是从服务自身做好保护的角度来避免平台级的故障。在分布式服务环境下, 我们不可忽略的一个问题是最大程度的增加机器的利用率,通常会采用超配的方式,但这个过程中往往会出现超配服务器上的应用对资源进行争抢,使得个别或局部应用出现服务响应慢甚至挂起,从而给整个业务链路带来更大的风险的情况。此时,流量调度的角色是至关重要的。下一期我们将从流量调度的角度看看如何提升平台的稳定性。


_

相关文章
|
7月前
|
数据中心 UED
服务降级:保障稳定性的关键一步
在数字时代,互联网服务已经成为我们日常生活的不可或缺的一部分。然而,即使是最稳定的系统也难以免受到各种问题的困扰,如服务器故障、流量激增或第三方依赖项故障。为了确保用户始终能够访问服务,保障其正常运行,服务降级成为了一项至关重要的策略。
|
SpringCloudAlibaba 监控 Dubbo
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
|
3月前
|
存储 缓存 算法
高并发架构设计三大利器:缓存、限流和降级
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。
674 3
|
3月前
|
缓存 Java 应用服务中间件
常见的限流降级方案
【1月更文挑战第21天】
|
3月前
|
负载均衡 算法
分布式限流:避免流控失控的关键问题
在当今高并发互联网环境下,分布式系统中的限流机制显得尤为重要。然而,分布式限流也面临着一系列挑战和问题。本文将探讨分布式限流中需要注意的关键问题,并提供相应解决方案,以确保流控策略的有效实施。
|
3月前
|
消息中间件 数据采集 缓存
探索分布式限流:挑战与解决方案
分布式限流是现代系统设计中的重要挑战之一。本文将探讨分布式限流的背景和意义,以及在实施分布式限流时需要注意的关键问题,并提供一些解决方案。
|
9月前
|
设计模式 监控 算法
高可用三大利器 — 熔断、限流和降级
在武侠世界里,“利器”通常指的是武器中的上乘、出色之物;武器对于武者的重要性不言而喻,拥有一把优秀的武器可以让武者在战斗中更加得心应手,威力更强。在分布式系统追求高可用的背景下,熔断、限流和降级这三个重要的策略可以称得上三大利器。降级和熔断是不是一回事?限流 与 降级呢?
174 2
|
9月前
|
存储 SpringCloudAlibaba 算法
系统高可用(一):限流
限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机
105 0
系统高可用(一):限流
|
12月前
|
算法 NoSQL 网络协议
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
|
1天前
|
监控 应用服务中间件 测试技术
4种典型限流实践保障应用高可用
大家好,我叫黄博文,花名延枚,目前负责云效旗下产品Flow流水线的设计和开发。在微服务架构下,服务越来越多,服务之间的调用也会越来越复杂。如何保障服务的高可用性就成为了一个挑战。之前我参与过的某个产品就曾出过故障,原因是某个API调用突然间增加了数十倍,导致服务负载过高,影响了用户使用。如果当时能够...
4种典型限流实践保障应用高可用