作者:宿何

微服务的稳定性一直是开发者非常重视的话题。跟着事务从单体架构向散布式架构演进以及部署方式的改变,服务之间的依靠关系变得越来越复杂,事务体系也面临着巨大的高可用挑战。运用高可用服务 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

第二步,咱们在运用左边菜单的“集群流控-集群装备”页面,敞开集群流控功用。测验运用咱们能够敞开“试用”集群,不同的集群规格能够承载不同的 QPS 量级:

6.png

第三步,咱们在实时监控页面找一个接口,点击右上角的“+”号,新增流控规矩(概况见文末相关链接)。以下示例中,咱们对 /doSomething 这个接口装备集群流控规矩,这个接口总的拜访量每秒钟不超越 200 次。规矩状况为“敞开”,代表新增后实时收效。

7.png

点击下一步,咱们还能够给选择的 Web/RPC 调用装备防护规矩触发后的处理逻辑(概况见文末相关链接),如自定义回来值。最终装备完成后,咱们点击新增按钮,这条规矩就会收效到每个节点。

装备完毕后,咱们能够向运用集群中不同机器建议必定数量的该接口恳求,能够发现每秒钟超越 200 个恳求后会主动回来咱们在规矩中预设好的回来行为;一起操控台实时监控页面也能够看到,剩余的流量被回绝,接口每秒钟经过的总量级平稳在 200 QPS:

8.png

经过几步简单的装备,咱们就能够快速体验 AHAS 集群流控给事务流量带来“如丝般顺滑”的维护才能;一起最近 AHAS 还新上线 Nginx/Ingress 网关进口流量防护、Web 恳求参数流控(概况见文末相关链接)等核心功用,欢迎我们点击阅览原文,在前往 AHAS 操控台进行快速体验。

相关链接

1)全方位的 20+ 种微服务结构/组件:

help.aliyun.com/document_de…

2)AHAS 操控台:

common-buy.aliyun.com/?commodityC…

3)新增流控规矩:

help.aliyun.com/document_de…

4)防护规矩触发后的处理逻辑help.aliyun.com/document_de…

5)Nginx/Ingress 网关进口流量防护help.aliyun.com/document_de…

6)Web 恳求参数流控help.aliyun.com/document_de…