作者:宿何

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

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

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

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

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

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

场景: 在 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 提供多种快速便捷的无侵入接入手段:

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 控制台(详情见文末相关链接)看到自己的服务,并可以在监控页面看到自己的接口:

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

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

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

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

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

相关链接

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

https://help.aliyun.com/document_detail/128800.html

2)AHAS 控制台:

https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy

3)新增流控规则:

https://help.aliyun.com/document_detail/174871.html

4)防护规则触发后的处理逻辑https://help.aliyun.com/document_detail/290938.html

5)Nginx/Ingress 网关入口流量防护https://help.aliyun.com/document_detail/209640.html

6)Web 请求参数流控https://help.aliyun.com/document_detail/337922.html

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

  1. Sentinel 发布里程碑版本,添加集群流控功能

    为什么80%的码农都做不了架构师?>>>    自去年10月底发布GA版本后,Sentinel在近期发布了另一个里程碑版本v1.4(最新的版本号是v1.4.1),加入了开发者关注的集 ...

  2. Sentinel(六)之集群流控

    转载自  集群流控 介绍 为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台).这时候我们很自然地就想到,找一个 serv ...

  3. html流控官网qq群,集群流控 · alibaba/Sentinel Wiki · GitHub

    目录 介绍 为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台).这时候我们很自然地就想到,找一个 server 来专门来 ...

  4. 集群、分布式、微服务的概念及异同

    一.什么是集群? 集群是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事:但是每台服务器并不是缺一不可,存在的主要作用是缓解并发能力和单点故障转移问题. 集群主要具有以下特征: (1) ...

  5. 互联网应用开发架构的演进历程--单体应用->集群->分布式->微服务->ServiceMesh

    1. 单体架构 1.1 单体应用 相对的,要理解什么是微服务,那么可以先理解什么是单体应用,在没有提出微服务的概念的"远古"年代,一个软件应用,往往会将应用所有功能都开发和打包在一 ...

  6. 前后端分离 集群负载均衡 分布式 微服务

    一.前后端分离 1.为什么要前后端分离 在以前传统的网站开发中,前端一般扮演的只是切图的工作,只是简单地将UI设计师提供的原型图实现成静态的HTML页面,而具体的页面交互逻辑,比如与后台的数据交互工作 ...

  7. 需要单机还是集群部署_单机、集群和分布式(微服务结构)的区别

    一.单机 单机就是所有的业务全部写在一个项目中,部署服务到一台服务器上,所有的请求业务都由这台服务器处理.显然,当业务增长到一定程度的时候,服务器的硬件会无法满足业务需求.自然而然地想到一个程序不行就 ...

  8. Nacos 集群集成SpringBoot2.x 微服务_02

    文章目录 一.SpringBoot2.x 微服务 1. 依赖引入 2. bootstrap.yaml配置 3. 测试类 二.nacos配置规则 2.1. 登录nacos 2.2. 配置规则 三.测试验 ...

  9. 集群、分布式、微服务概念和区别

    概念: 集群是个物理形态,分布式是个工作方式. 1.分布式:一个业务分拆多个子业务,部署在不同的服务器上 2.集群:同一个业务,部署在多个服务器上 分布式是指将不同的业务分布在不同的地方.而集群指的是 ...

最新文章

  1. ICLR2020全析解读:华人学者占据60%,谷歌再次领跑!(附最新高引华人榜单)...
  2. 64位ubuntu安装32位编译器
  3. MySQL之某个表中有近千万数据且CRUD访问缓慢的优化处理
  4. 文献学习(part87)--Linearized Alternating Direction Method with Adaptive Penalty for Low-Rank ...
  5. oracle的have,Does oracle have “auto number” data type [duplicate]
  6. 空间谱专题16:信号个数估计
  7. double小数点后最多几位_基金理财买入后,不断亏损,是最多本金亏光,还是会出现负值...
  8. MySQL中的char与varchar详解
  9. Motion 5.6.1 for Mac(视频后期特效处理软件)
  10. window包管理器
  11. Hiren’s BootCD 15.2下载 – 史上最强大的WinPE U盘启动工具详细介绍
  12. 使用Javassist 动态生成类
  13. Java对接微信开放平台详解
  14. 微信小程序获取用户绑定手机号
  15. 百度网盘 api抓包
  16. 【最优化算法】基于【MATLAB】的最速下降仿真
  17. Atcoder F - Mirrored(思维+搜索)
  18. ffmpeg重采样中swr_convert和swr_get_out_samples的用法
  19. 屏幕挂灯的智商税- 小米真不香
  20. Hive恢复误删数据表

热门文章

  1. 1.11 对象的销毁
  2. 第一章 基础算法 【完结】
  3. 2.1.1进程的概念 组成和特征
  4. Spring boot定制错误json数据
  5. 静态方法什么时候执行?_面试官:知道类在什么时候加载吗?
  6. 后端程序员必备:书写高质量SQL的30条建议
  7. “面试不败计划”:面试题基础二
  8. 蓝桥杯-字串统计(java)
  9. java开发资源分享(视频,源码,项目)
  10. Java设计模式-适配器模式Adapter