流量防护规则适用场景

微服务的稳定性一直是您非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。MSE流量防护就是一款借助流量控制、热点防护等模块,来提高应用高可用能力的产品。本文介绍各个流量防护规则以及适用的场景。

不稳定场景

在生产环境中您可能遇到过以下不稳定的情况:

  • 大促时瞬间洪峰流量使得系统超出最大负载、Load飙高、系统崩溃导致用户无法下单。

  • “黑马”热点商品击穿缓存、数据库被打垮、挤占正常流量。

  • 调用端被不稳定第三方服务拖垮、线程池被占满、调用堆积,导致整个调用链路卡死。

不稳定场景

这些不稳定的场景可能会导致严重后果,但很多时候开发者容易忽视这些与流量、依赖相关的高可用防护。MSE流量防护功能就可以预防这些不稳定因素带来的影响,针对流量进行高可用的防护,从而保障服务“稳如磐石”。

核心场景

流量防护各规则说明和适用的核心场景如下表所示。

流量防护规则

描述

核心场景

说明文档

接口流控规则

通过MSE配置QPS模式的流控规则,当每秒的请求量超过设定的阈值时,会自动拒绝多余的请求。

适用于需要限制突发的流量,在尽可能处理请求的同时来保障服务不被击垮的场景。

配置接口流控规则

并发隔离规则

控制某些调用的并发数(即正在进行的数目),防止过多的慢调用挤占正常的调用。

在调用第三方服务时,防止过多的慢调用挤占正常调用的资源,避免服务不可用。

配置并发隔离规则

熔断规则

对不稳定的弱依赖调用进行自动熔断降级,暂时切断下游不稳定的调用,避免局部不稳定因素导致整体的雪崩。

避免局部不稳定因素(某个慢调用、异常服务)导致整体的雪崩,例如切断某个RT高的第三方服务调用。

配置熔断规则

热点参数防护规则

自动识别热点参数并控制每个热点值的访问频次或并发量,可以有效地防止过“热”的参数访问挤占正常的调用资源。

适用于针对某些热点数据中访问频次最高的Top数据进行控制的场景,例如针对一段时间内最频繁购买的商品ID进行控制,防止突发热点商品击穿缓存而导致大量请求到数据库的情形。

配置热点参数防护规则(RPC)

配置热点参数防护规则(HTTP请求)

流量控制规则

场景说明

流量是随机、不可预测的,可能就在某一时间会出现流量洪峰,例如双十一零点的场景。然而系统的容量总是有限的,如果突如其来的流量超过了系统的承受能力,就可能会导致请求处理堆栈、堆积的请求处理缓慢、CPU/Load飙高,最后导致系统崩溃。因此,您需要针对这种突发的流量来进行限制,在尽可能处理请求的同时来保障服务不被击垮,这就是流量控制。流量控制的场景是非常通用的,适用于脉冲流量类等场景。

流控规则说明

通常在Web入口或服务提供方(Service Provider)的场景下,需要保护服务提供方自身不被流量洪峰打垮。此时通常根据服务提供方的服务能力进行流量控制,或针对特定的服务调用方进行限制。您可以结合前期压测评估核心接口的承受能力,通过MSE配置QPS模式的流控规则,当每秒的请求量超过设定的阈值时,会自动拒绝多余的请求。关于流控规则的更多信息,请参见配置流控规则

并发控制

场景说明

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

微服务的架构示例图如下:

架构图.png

现代微服务架构都是分布式的,由许多微服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。

规则说明

MSE提供流量并发控制的能力,避免慢调用等不稳定因素造成服务不可用。

并发控制作为一种轻量级隔离的手段,控制某些调用的并发数(即正在进行的数目),防止过多的慢调用挤占正常的调用。更多信息,请参见配置隔离规则

热点参数防护规则

场景说明

为了防止被大流量打垮,您通常会对核心接口配置限流规则,但有的场景下配置普通的流控规则是不够的。

例如大促峰值的时候,会有不少“热点”商品,这些热点商品的瞬时访问量非常高。通常您可以事先预测一波热点商品,并对这些商品信息进行缓存“预热”,以便在出现大量访问时可以快速返回而不会都经过数据库。但每次大促都会涌现出一些“黑马”商品,这些“黑马”商品是无法事先预测的,没有被预热。当这些“黑马”商品访问量激增时,大量的请求会击穿缓存,直接经过数据库,导致数据库访问缓慢,挤占正常商品请求的资源池,最后导致系统崩溃。

规则说明

此时,利用MSE的热点参数流控能力,自动识别热点参数并控制每个热点值的访问频次或并发量,可以有效地防止过“热”的参数访问挤占正常的调用资源。更多信息,请参见配置热点参数防护(RPC)规则以及配置热点参数防护(HTTP请求)规则

热点防护1.png