如何利用 “集群流控” 保障微服务的稳定性?

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 应用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用体系沉淀下来的云产品,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群流控等多个维度来帮助保障服务的稳定性,同时提供秒级的流量监控分析功能。

作者:宿何


微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。应用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用体系沉淀下来的云产品,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群流控等多个维度来帮助保障服务的稳定性,同时提供秒级的流量监控分析功能。AHAS 不仅在阿里内部淘宝、天猫等电商领域有着广泛的应用,在互联网金融、在线教育、游戏、直播行业和其他大型政央企行业也有着大量的实践。


1.png


流控是保障微服务稳定性最常用也是最直接的一种控制手段。每个系统、服务都有其能承载的容量上限,流控的思路非常简单,当某个接口的请求 QPS 超出一定的上限后,拒绝多余的请求,防止系统被突发的流量打垮。市面上最常见的方案是单机维度的流控,比如通过 PTS 性能测试预估某个接口的容量上限是 100 QPS,服务有 10 个实例,则配置单机流控 10 QPS。但很多时候,由于流量分布的不确定性,单机维度的流量控制存在一些效果不佳的情况。


典型场景 1:精确控制对下游的调用总量


2.png


场景:服务 A 需要频繁调用服务 B 的查询接口,但服务 A 和 B 的容量存在差异,服务 B 约定最多给服务 A 提供总共 600 QPS 的查询能力,通过流控等手段进行控制。


痛点:若按照单机流控的策略配置,由于调用逻辑、负载均衡策略等原因,A 调用 B 到达每个实例的流量分布可能非常不均,部分流量较大的服务 B 实例触发单机流控,但总体限制量尚未达到,导致 SLA 未达标。这种不均的情况经常会发生在调用某个依赖服务或组件(如数据库访问)的时候,这也是集群流控的一个典型场景:精确控制微服务集群对下游服务(或数据库、缓存)的调用总量。


典型场景 2:业务链路入口进行请求总量控制


3.png


场景:在 Nginx/Ingress 网关、API Gateway (Spring Cloud Gateway, Zuul) 进行入口流量控制,希望精确控制某个或某组 API 的流量来起到提前保护作用,多余流量不会打到后端系统。


痛点:如果按照单机维度配置,一方面不好感知网关机器数变化,另一方面网关流量不均可能导致限流效果不佳;而且从网关入口角度来讲,配置总体阈值是最自然的手段。


AHAS 集群流控


AHAS 集群流控可以精确地控制某个服务接口在整个集群的实时调用总量,可以解决单机流控因流量不均匀、机器数频繁变动、均摊阈值太小导致限流效果不佳的问题,结合单机流控兜底,更好地发挥流量防护的效果。


对于上面的场景,通过 AHAS 集群流控,无论是 Dubbo 服务调用、Web API 访问,还是自定义的业务逻辑,均支持精确控制调用总量,而无关调用逻辑、流量分布情况、实例分布。既可以支撑数十万 QPS 大流量控制,也支持分钟小时级业务维度小流量精确控制。防护触发后的行为可由用户自定义(如返回自定义的内容、对象)。


AHAS 集群防护具有以下几大优势:


  • 场景丰富:全面覆盖从网关/Mesh 入口流量精确防护、Web/RPC 服务/SQL 调用精确流控,到分钟小时级业务维度流量控制的场景,支持数十万 QPS 量级;


  • 低使用成本:无需特殊接入方式,开箱即用,快速配置;


  • 全自动管控与运维:自动化管控与分配 token server 资源,自动化运维能力保障可用性,用户无需关注服务端资源准备与分配,只需关注规则配置与业务流程;


  • 低性能损耗:性能模式下对业务链路完全无时延增加,精确模式对业务链路的 RT 损耗控制在 3ms 之内,用户可放心使用;


  • 配套的可观测能力,实时了解接口稳定性与规则生效情况。


下面我们就来用一个示例来介绍一下,如何快速将应用接入 AHAS 来玩转集群流控能力,保障服务稳定性。


快速玩转 AHAS 集群流控


第一步,我们将服务或网关接入 AHAS 流量防护。AHAS 提供多种快速便捷的无侵入接入手段:


4.png


AHAS 流量防护支持 Java/Go/C++/PHP 等多语言原生接入,以及 Nginx/Ingress 网关接入和 Mesh 接入;Java 应用支持全方位的 20+ 种微服务框架/组件


  • Web 服务端:Spring Web/Spring Boot/Spring Cloud/Tomcat/Jetty/Undertow


  • Web client:OkHttp/Apache HttpClient


  • RPC:Dubbo/Feign/gRPC


  • DAO/缓存:MyBatis/Spring Data JPA/Memcached/Jedis client


  • MQ consumer:RocketMQ client/Kafka client/RocketMQ client


  • API Gateway:Spring Cloud Gateway/Zuul 1.x


  • Reactor 框架


接入 AHAS 成功后,只要触发服务调用/接口访问,即可在 AHAS 控制台看到自己的服务,并可以在监控页面看到自己的接口:


5.png

image.gif

第二步,我们在应用左侧菜单的“集群流控-集群配置”页面,开启集群流控功能。测试应用我们可以开启“试用”集群,不同的集群规格可以承载不同的 QPS 量级:

image.gif

6.png


第三步,我们在实时监控页面找一个接口,点击右上角的“+”号,新增流控规则。以下示例中,我们对 /doSomething 这个接口配置集群流控规则,这个接口总的访问量每秒钟不超过 200 次。规则状态为“开启”,代表新增后实时生效。


7.png

image.gif

点击下一步,我们还可以给选择的 Web/RPC 调用配置防护规则触发后的处理逻辑,如自定义返回值。最终配置完成后,我们点击新增按钮,这条规则就会生效到每个节点。


配置完毕后,我们可以向应用集群中不同机器发起一定数量的该接口请求,可以发现每秒钟超过 200 个请求后会自动返回我们在规则中预设好的返回行为;同时控制台实时监控页面也可以看到,多余的流量被拒绝,接口每秒钟通过的总量级平稳在 200 QPS:


8.png

image.gif

通过几步简单的配置,我们就可以快速体验 AHAS 集群流控给业务流量带来“如丝般顺滑”的保护能力;同时最近 AHAS 还新上线 Nginx/Ingress 网关入口流量防护Web 请求参数流控等核心功能,欢迎大家点击阅读原文,在前往 AHAS 控制台进行快速体验。




了解更多相关信息,请扫描下方二维码或搜索微信号(AlibabaCloud888)添加云原生小助手!获取更多相关资讯!

二维码.png

相关文章
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
51 5
|
16天前
|
监控 Java 数据中心
微服务架构系统稳定性的神器-Hystrix
Hystrix是由Netflix开源的库,主要用于微服务架构中的熔断器模式,防止服务调用失败引发级联故障。它通过监控服务调用的成功和失败率,在失败率达到阈值时触发熔断,阻止后续调用,保护系统稳定。Hystrix具备熔断器、资源隔离、降级机制和实时监控等功能,提升系统的容错性和稳定性。然而,Hystrix也存在性能开销、配置复杂等局限,并已于2018年进入维护模式。
26 0
|
16天前
|
监控 Java Sentinel
Hystrix 与 Sentinel 大比拼:微服务稳定性工具谁更优?
Hystrix 和 Sentinel 是用于微服务架构中保护服务稳定性和可靠性的工具,主要实现服务熔断、限流、降级等功能。Hystrix 侧重于熔断器模式和服务隔离,通过线程池或信号量隔离服务,防止故障扩散;Sentinel 则更全面,涵盖流量控制、熔断降级和系统自适应保护,适用于高并发场景,并提供实时监控和灵活的策略调整。两者设计理念不同,Hystrix 适合中小规模应用,而 Sentinel 更适合大规模高并发系统。
31 0
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
58 3
|
3月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
148 1
|
5月前
|
安全 数据可视化 数据安全/隐私保护
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?
|
5月前
|
安全 微服务
【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
|
5月前
|
微服务
【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
|
5月前
|
安全 测试技术 微服务
【Azure 微服务】Service Fabric, 使用ARM Template方式来更新SF集群的证书(Renew SF Certificate)
【Azure 微服务】Service Fabric, 使用ARM Template方式来更新SF集群的证书(Renew SF Certificate)
|
5月前
|
负载均衡 微服务 Windows
【Azure微服务 Service Fabric 】使用az命令创建Service Fabric集群
【Azure微服务 Service Fabric 】使用az命令创建Service Fabric集群