AHAS的Web场景防护功能面向提供Web服务的应用,针对访问请求中的一些参数项进行精细化的流量控制。对于使用了主流Web框架(Servlet容器、Spring Web、Spring Boot)的应用,AHAS实现了API粒度的请求参数解析,通过配置Web流控规则,可以对请求中IP、Host、Header、URL Param等参数维度的资源调用进行流量控制,保护业务与系统的稳定性。本文介绍如何为应用配置Web场景防护。
前提条件
将应用接入AHAS应用防护。具体操作,请参见接入应用方式。
Web场景防护要求AHAS Sentinel Java SDK版本≥1.10.1或Java Agent版本≥1.10.4。
说明Web场景防护暂不支持其他多语言SDK方式接入。
背景信息
在提供Web服务的场景下,除了API维度的限流降级防护,针对访问请求来源IP、访问请求Param参数等资源调用的限流防护是各种业务场景下能更好保证业务应用正常运行的手段。在一些大流量的Web业务场景下,可能不单是对当前接口进行限制,而需要针对当前访问频次最高的来源IP或访问频次最高的商品ID,有针对性地对其访问进行限制,比如:
对一段时间内最频繁购买的商品ID进行限制,以防止击穿缓存而导致大量请求到数据库的情况。
对一段时间内频繁大量访问的源IP进行限制,防止利用虚假信息恶意刷单。
操作步骤
登录AHAS控制台,然后在页面左上角选择地域。
- 在控制台左侧导航栏中选择 。
- 在应用防护页面单击目标应用卡片。
在左侧导航栏选择 。
选择以下任意一种方式进入Web防护的设置页面:
在接口概览页签右侧单击+图标。
单击Web流控页签,然后单击新增Web防护规则。
在新增Web防护规则对话框中完成规则配置。
参数
说明
选择防护场景
API
选择需配置规则的接口API。
防护类型
默认为Web防护。
配置防护规则
参数属性
针对所选API的参数属性进行流量控制:
Client IP:请求端的IP地址。
说明若请求经过代理,会优先尝试从X-Forwarded-For请求头中获取IP信息,如果其IP信息存在,将会作为实际请求端IP地址。
Remote Host:请求端的Host Header。
Header:根据指定的HTTP Header进行解析,要填写某个具体的Header Key,则该规则针对这个Header Key下面的热点值分别进行限制。选择Header后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。
URL参数:根据指定的HTTP请求参数进行解析,需要填写对应的参数名称。选择URL参数后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。
Body参数:根据指定的Body参数进行解析,需要填写对应的参数名称。
Path参数:根据指定的Path参数进行解析,需要填写对应的参数名称。
(可选)匹配模式和匹配串
若选择参数属性为Header或URL参数,可打开属性值匹配开关,并设置匹配模式和匹配串。
匹配模式:
精确:严格按照给定的匹配串来匹配值。
子串:若请求属性值包含该子串则匹配成功,比如若子串设置匹配ab,则aba和cabc都可以匹配,而cba则不能匹配。
正则:按给定的正则表达式匹配串进行匹配。
阈值类型
默认为请求数。
阈值
触发对流控接口的统计维度对象的QPS阈值。设置时,需选择统计时间间隔,支持秒、分钟、小时和天4种维度。
例如,若阈值填写为10,统计间隔选择分,则表示每分钟对应的请求数目不超过10个。
高级选项
流控方式
快速失败:当阈值类型为QPS时,被拦截的流量将快速失败,即达到阈值时,立即拦截请求。
说明被拦截拒绝掉的请求,将返回行为管理中配置的自定义信息,若未配置会返回默认行为,即429错误码加上默认文本信息。
匀速排队:当阈值类型为QPS时,被拦截的请求将匀速通过,允许排队等待。需设置具体的超时时间,预计达到超时时间的请求会立即失败,而不会排队。例如,QPS配置为10,则代表请求每100 ms才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。
说明匀速排队时,QPS不要超过1000(请求间隔1 ms)。
Burst size
当流控方式选择为快速失败时,可以额外设置一个Burst Size,即针对突发请求额外允许的请求数目。
超时时间
当流控方式选择为匀速排队时,需设置具体的超时时间,单位为ms。例如,QPS配置为5,则代表请求每200 ms才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。
是否开启
开启:Web防护规则创建后即生效。
关闭:Web防护规则创建后不生效。
配置限流行为
接口类型
默认为Web。
关联行为
默认行为:默认为此选项。
说明如您无需自定义限流后处理行为,选择默认行为即可。
默认行为对应应用基础设置.。
里面配置的全局行为。更多信息,请参见默认行为为返回429错误码加上默认的文本信息。
新增行为:新增自定义限流后处理行为,创建完成后您可在关联行为选择框中下拉选择。更多详细信息,请参见配置Web行为。
参数 描述 示例值 行为名称 该行为的名称。长度不超过128个字符,同个应用内名称不能重复。 测试行为 针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web Web限流处理策略 - 该行为的名称。长度不超过128个字符,同个应用内名称不能重复。
- 跳转到指定页面:需设置指定跳转的URL。表示Web接口访问触发规则后系统会跳转指定的页面URL。
测试行为 针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web HTTP返回状态码 默认为429。当Web限流处理策略为自定义返回时,需要填写。 429 针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web 返回content-type 设置返回内容的格式为普通文本(TEXT)或JSON。当Web限流处理策略为自定义返回时,需要填写。 JSON字符串 HTTP返回文本 输入当Web接口访问触发规则后返回的内容。当Web限流处理策略为自定义返回时,需要填写。 {"message": "blocked oops"} 跳转地址 输入当Web接口访问触发规则后系统会跳转的页面URL。当Web限流处理策略为跳转到指定页面时,需要填写。
说明: 跳转的本质是返回302状态码。对于后端服务直接渲染返回的页面,跳转是有效的;对于前端通过AJAX请求到后端服务后,再解析后端返回到前端展示的页面,跳转无效。
http://ahas.console.aliyun.com 取消行为:取消接口与关联行为的关联。
操作完成后,单击新增。
您可在Web流控页签查看该条防护规则。
在Web流控页签,选择目标Web防护规则,单击批量开启。
规则开启后,当前资源会按照配置的Web流控规则进行流量控制。
Web防护规则常用场景
场景一:热点商品秒杀
在秒杀等抢购商品的场景下,由于流量较大,可能会导致系统响应不及时甚至崩溃。为保证系统稳定,可配置热点规则,超过一定阈值后,系统会让购买热点商品的流量排队等待。
例如购买同一商品,希望1秒内同个商品超过100次请求后,对多余的请求进行拒绝,可在新建Web防护规则对话框中配置以下规则信息,表示1秒内,针对热点商品ID进行下单的请求,每个单独商品ID每秒最多只能允许100个请求,其余超出的当前商品下单请求都会被拒绝,返回自定义的信息。
参数属性输入URL参数。
说明在参数属性中,选择当前热点商品ID所对应的参数字段,例如,假设URL参数中存在一个stockId字段对应请求的商品ID,那么参数属性可以选择URL参数,并在参数名称中填写属性在请求中对应的字段名称。
URL参数名称输入stockId。
阈值输入100个请求/每秒。
流控方式选择快速失败。
场景二:防止恶意刷单
例如在促销活动中,某些恶意刷单请求较多的时候,会占用较多商品库存或服务器资源。这种情况下可以针对其IP来源进行排队等待的处理,使访问请求匀速通过,防止过量的请求对服务稳定性产生影响。在新建Web防护规则对话框中配置以下规则信息,表示每个不同来源IP调用此接口的请求会以每10 ms一个的速度匀速通过(1s/100=10 ms),后续多余的请求要进行排队等待。排队中的请求如果等待时长超过30 ms就会立即失败。
参数 | 说明 |
参数属性 | 选择Client IP。 |
阈值类型 | 默认选择请求数。 |
阈值 | 输入100个请求/每秒。 |
流控方式 | 选择匀速排队。 |
超时时间 | 输入30。 |
是否开启 | 选择开启。 |