介绍:应用高可用服务AHAS(ApplicationHighAvailabilityService)是阿里巴巴内部高可用系统沉淀多年的云产品。它以流量和容错为切入点,从流量控制、不稳定调用隔离、断路器降级、热点流量保护、系统自适应保护、集群流量控制等维度助力保障服务稳定性,同时提供秒级流量监控和分析功能。作者:苏禾微服务的稳定性一直是开发者非常关心的话题。随着业务从单体架构向分布式架构演进和部署方式的改变,服务之间的依赖关系越来越复杂,业务系统也面临着巨大的高可用挑战。应用高可用服务AHAS(ApplicationHighAvailabilityService)是阿里巴巴内部高可用系统多年积累的云产品。它以流量和容错为出发点,从流量控制、不稳定调用隔离、断路器降级、热点流量保护、系统自适应保护、集群流量控制等维度保障服务的稳定性,同时提供二次级流量监控和分析功能。AHAS不仅在阿里巴巴内部淘宝、天猫等电商领域有着广泛的应用,在互联网金融、在线教育、游戏、直播行业等大型政府和央企行业也有大量实践.流量控制是保证微服务稳定性最普遍、最直接的控制手段。每个系统和服务都有其容量上限。流量控制的思想很简单。当某个接口的请求QPS超过某个上限时,拒绝多余的请求,防止系统被突如其来的流量压垮。市场上最常见的解决方案是独立的流量控制。比如通过PTS性能测试估计接口容量上限为100QPS,服务有10个实例,那么配置单机流控10QPS。但在很多情况下,由于流量分布的不确定性,单机维度的流量控制会产生一些无效的效果。典型场景一:精准控制下游调用总量场景:服务A需要频繁调用服务B的查询接口,但服务A和服务B的能力存在差异,服务B同意为服务A提供一个最高600QPS的总查询能力。通过流量控制等方式进行控制。痛点:如果按照单机流控策略配置,由于调用逻辑和负载均衡策略等原因,A调用B到各个实例的流量分配可能很不均匀。部分流量较大的服务B实例触发单机流控,但未达到整体限制量,导致不满足SLA。这种不平衡的情况经常发生在调用依赖的服务或组件(如访问数据库)时,这也是集群流控的典型场景:精确控制微服务集群下游服务(或数据库、缓存)的调用总数。典型场景二:在业务链路入口控制请求总量场景:在Nginx/Ingress网关、API网关(SpringCloudGateway、Zuul)控制入口流量,希望精准控制某一个的流量或某组API实现早期保护,超额流量不会冲击后端系统。痛点:如果按照单机维度配置,一方面不易感知网关机器数量变化,另一方面网关流量不均可能导致限流不畅效果;而从入口入口的角度来说,配置整体门槛是最自然的方法。AHAS集群流控AHAS集群流控可以准确控制整个集群中某个服务接口的实时调用总数,可以解决单机流控因流量不均匀,数量变化频繁等问题机器,摊销门槛太低。结合单机流控,可以更好的发挥流量保护的作用。针对上述场景,通过AHAS集群流控,无论是Dubbo服务调用、WebAPI接入,还是自定义业务逻辑,都支持对调用总量的精准控制,无论是调用逻辑、流量分布、实例分布。既能支持几十万QPS大流量控制,又能支持分钟级、小时级业务维度小流量精准控制。保护触发后的行为可以由用户自定义(如返回自定义的内容和对象)。AHAS集群防护具有以下几大优势:场景丰富:全面覆盖从网关/Mesh入口流量精准防护、Web/RPC服务/SQL调用精准流控,到分钟级业务维度流控场景,支持数十万QPS定量;使用成本低:无需特殊接入方式,开箱即用,快速配置;全自动管理和运维:自动管控和分配token服务器资源,自动运维能力保证可用性,用户无需关注服务器资源准备和分配,只需要关注规则配置和业务流程;低性能损耗:性能模式下业务链路无延迟增加,精准模式下业务链路RT损耗控制在3ms以内,用户可放心使用;匹配可观察性能力,实时了解接口稳定性和规则有效性。下面通过一个例子来介绍如何将应用快速接入AHAS,发挥集群流控能力,保障服务稳定性。快速玩转AHAS集群流控第一步是将服务或网关接入AHAS流控。AHAS提供多种快速便捷的非侵入式接入方式:AHAS流量保护支持Java/Go/C++/PHP等多语言原生接入,以及Nginx/Ingress网关接入和Mesh接入;Java应用支持全系列20+各种微服务框架/组件:Web服务器:SpringWeb/SpringBoot/SpringCloud/Tomcat/Jetty/UndertowWeb客户端:OkHttp/ApacheHttpClientRPC:Dubbo/Feign/gRPCDAO/Cache:MyBatis/Spring数据JPA/Memcached/JedisclientMQconsumer:RocketMQclient/Kafkaclient/RocketMQclientAPIGateway:SpringCloudGateway/Zuul1.xReactor框架连接AHAS成功后,只要触发服务调用/接口访问,就可以在AHAS控制台看到自己的服务,在监控页面可以看到自己的界面:第2步,我们在应用左侧菜单的“集群流控-集群配置”页面开启集群流控功能。要测试应用程序,我们可以打开“试用”集群。不同的集群规格可以承载不同的QPS等级:Step3,我们在实时监控页面找到一个界面,点击右上角的“+”号,添加流量控制规则。下面的例子中,我们为接口/doSomething配置集群流控规则,该接口的总访问量不超过每秒200次。规则状态为“已启用”,即添加后实时生效。点击下一步,我们还可以为选中的Web/RPC调用配置触发保护规则后的处理逻辑,比如自定义返回值。最后配置完成后,我们点击添加按钮,这条规则就会对每个节点生效。配置完成后,我们可以向应用集群中的不同机器发起一定数量的该接口请求。可以发现每秒超过200次请求后,会自动返回到我们在规则中预设的返回行为;同时,控制台实时监控页面也可以看到,拒绝了冗余流量,接口每秒总电平稳定在200QPS:通过几个简单的配置,我们可以快速体验AHAS集群流控对业务流量带来的“丝绸般”的效果。“顺畅”保护能力;同时,AHAS近期上线了Nginx/Ingress网关入口流量保护、Web请求参数流控等核心功能。欢迎点击阅读原文,进入AHAS控制台快速体验。原文链接本文为阿里云原创内容,未经许可不得转载。
