Web Server 场景
Cloud Native
-
Java 支持 Spring Web/Spring WebFlux/Spring Boot/Spring Cloud/Tomcat/Jetty/Undertow 等主流 Web 框架
-
Go 支持 Gin, echo 等框架
UserId
的 header),那么 AHAS 就会自动分析请求中对应请求属性的值(如 header 的 value),自动统计出 top N 热点访问的参数并分别进行请求量控制。通过这种维度的控制,我们可以在 Web 服务端实现 IP 防刷、热点商品防刷等一系列的细粒度高可用防护策略,甚至可以实现 每个用户每个 API 每分钟限制访问 N 次 这种具有业务含义的流量管控策略。
Web Client 场景
Cloud Native
-
当 Web 调用端调用某个接口非常慢,且请求量很大时,若不加以控制,那么慢调用会挤占整个连接池,导致其他正常服务的调用也被阻塞,自身处理请求的能力也被拖垮。此时可以利用并发控制规则[2]通过控制 API path 的并发线程数(即同时发起调用的数目),来保证调用端的可靠性,防止连接池被占满。
-
当 Web client 调用的某个接口持续出现慢调用或异常,也可以利用 AHAS 熔断规则[3]进行进一步的保护。熔断规则提供熔断器的能力,在某个 API path 出现慢调用或持续异常达到一定比例后,在一段时间内,自动熔断针对该接口的调用,并直接返回预设的降级信息。通过熔断机制,一方面可以防止调用端被不稳定第三方接口拖垮,另一方面也给不稳定接口一些恢复的时间,避免持续调用导致服务进一步劣化。
-
当 Web Client 调用接口时出现偶现的超时等非致命性错误时,可以通过自动重试规则[4]来保障业务成功率,避免业务产生抖动。
快速玩转 AHAS Web 场景防护
Cloud Native
以普通 Spring Boot Web 服务为例,接入 AHAS 成功后,只要触发服务调用/接口访问,即可在 AHAS 控制台[5]看到自己的服务,并可以在 Web 场景页面看到自己的 Web 接口。默认 Spring Boot 应用接入会提取 controller 中的 URL path 作为资源名称:
/hello
这个 API,配置热点参数流控。流控的请求属性为 name
这个请求参数(URL params),流控策略为每个热点参数分别限制每秒访问量最多 1 次。AHAS 会自动提取每个 /hello
请求中的 name
参数对应的值,自动分析出其中 top K 频次的热点值,然后分别对每个热点值进行控制,不超过规则中的访问次数。
/hello
接口的访问,其中 /hello?name=A
和
/hello?name=B
两个 name 参数的访问频次非常高,被 AHAS 统计统计为热点值。那么上面的流控规则会针对 name=A
和 name=B
这两个参数值的请求,分别限制每秒访问量不超过 1 次。
/hello
接口的流量,并给 name 参数带上不同的值,可以从控制台的监控上面看到请求触发了流控:
/hello
接口的流量,并给 name 参数带上不同的值,可以从控制台的监控上面看到请求触发了流控:
在生产环境,我们这些参数的值可能非常多,比如商品 ID 可能有上千万个。在热点请求被流控后,我们通常希望能够知道有哪些 top 参数被限制,方便我们了解业务的请求情况。AHAS 近期新上线热点监控功能,提供热点参数可观测的能力,结合 top 参数热力图,可以非常直观地在控制台了解实时业务情况:
以上就是一个简单的 Spring Boot Web 场景流控的示例,欢迎大家在 AHAS 控制台体验,有关 Web 场景防护的更多信息可以点击阅读原文,查看参考文档。
我有话说: