文档

应用高可用架构设计最佳实践

更新时间:
一键部署

前提条件

本实践适用企业版V3.14及以上版本。

主要涉及阿里云应用高可用服务AHAS产品的流量防护功能。

背景信息

应用高可用服务AHAS的核心功能是流量防护即流控降级,分为应用防护和网关防护。应用防护结合Sentinel的优势,以流量为切入点,从流量控制、熔断降级、系统保护等多个维度来帮助您保障服务的稳定性。网关防护是对网关进行流量控制,从流量入口处拦截激增的流量,防止下游服务被冲垮。

应用场景

AHAS应用流控降级广泛用于秒杀场景、消息削峰填谷、集群流量控制、实时熔断等场景中,从多个维度保障您的业务稳定性。

在一个常见的分布式应用中,如下图所示。一个请求先通过终端到达Gateway,再经过防火墙和网络负载均衡,其中还包括调用下游的其它服务和第三方应用,才能到达前端网络服务。AHAS应用流控降级在不同的层次以流量为切面提供秒级实时的流量分析(例如在客户端层提供流量实时监控和水位诊断分析功能),帮助运维人员采取针对性的防护措施,全方位地保护应用的稳定性。1

功能特性

  • 秒级流量分析功能,动态规则实时推送。

  • 专业多样化的防护手段:

    • 入口流量控制:按照服务容量进行流量控制,常用于应用入口,例如:Gateway、前端应用、服务提供方等。

    • 热点隔离:将热点和普通流量隔离出来,避免无效热点抢占正常流量的容量。

    • 对依赖方隔离或降级:对应用和应用之间、应用内部采用隔离或降级手段,将不稳定的依赖的对应用的影响减至最小,从而保证应用的稳定性。

    • 系统防护:AHAS应用防护可以根据系统的能力(例如Load、CPU使用率等)来动态调节入口的流量,保证系统稳定性。

  • 实时的单机监控能力,强大的聚合监控和历史监控查询能力。

实践步骤

应用高可用架构设计应用准备

  1. 应用架构。

    Nginx与前端代码部署在一个容器;

    负载均衡SLB使用7层协议负载到前端容器NodePort;

    Nginx与网关服务使用K8s服务发现,微服务之间使用EDAS提供服务发现。2

  2. 应用业务流程。

    核心业务流程:

    • 用户登录。

    • 商品列表。

    • 商品购买。

    • 订单生成。

    • 查询订单。3

  3. 测试环境说明。4

场景一:微服务限流

  1. 测试场景。

    1. 测试项:微服务限流。

    2. 测试内容:对提交订单接口进行流控规则配置,每秒查询率QPS阈值为100,流控方式为快速失败,针对提交订单业务场景进行每秒查询率QPS阈值为400的压力测试。

    3. 预期结果:访问超过限流阈值后,自动开启限流。

      说明

      通过性能压测获得应用所能承载的业务上限,依此为应用配置限流规则,通过限流规则来保护应用的可用性,超过应用负载上限的请求能被有效阻挡,避免短时业务暴增对应用的冲击。

  2. 测试步骤。

    1. 输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。5

    2. 在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。0

    3. 新增流控规则。

      单击流量防护>应用防护>接入应用名>规则设置>流控规则>新增流控规则,填写接口名称、来源应用、统计维度、单击QPS阈值及流控效果。1

    4. 单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。1

    5. 设置场景配置

      在创建压测页面,单击场景配置,键入压测API的名称,针对提交订单服务创建压测场景。1

    6. 单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测1

    7. 流控结果

      开始压测后自动进入压测中界面,单击查看图表10

      执行提交订单性能压测后,打开流控规则,监测到有429异常。关闭流控规则,异常不再产生。

      说明

      在HTTP协议中,响应状态码429 Too Many Requests 表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。

      111213

场景二:微服务熔断

  1. 测试场景。

    1. 测试项:微服务熔断。

    2. 测试内容:对查看订单列表接口进行熔断规则配置,慢调用(接口处理响应时间超过800ms)比例为10%,熔断时长为10。

    3. 预期结果:慢调用比例达到规则后,自动开启熔断,慢调用减少或恢复后,熔断自动关闭。

      说明

      除了流量控制以外,调用链路中不稳定的方法或者下游依赖需进行熔断处理。由于调用关系的复杂性,如果调用链路中的某一环节出现了错误,会导致这个请求失败,甚至会放大不稳定性,导致整个链路无法正常服务。熔断功能在调用链路中某个方法出现不稳定时(例如某方法出现Timeout或异常比例升高),对这个方法的调用进行限制,让请求快速失败,避免此错误影响整个链路。

  2. 测试步骤。

    1. 输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。14

    2. 在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。15

    3. 单击流量防护>应用防护>接入应用名>规则设置>降级规则>新增降级规则,填写接口名称、阈值类型、慢调用RT、降级阈值等信息。

      另:熔断要针对下游服务进行配置,订单服务下游服务为member,这里配置member服务getMemberInfo接口的熔断策略。117

    4. 单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。18

    5. 在创建压测页面,单击场景配置,键入压测API的名称,对查看订单列表接口的业务进行压测配置。1

    6. 单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测。1

    7. 熔断结果。

      开始压测后自动进入压测中界面,单击查看图表21熔断规则配置满调用RT为800ms,慢调用比例为10%,熔断时长为10s。熔断规则实时生效,通过故障演练,注入容器内servlet延迟,模拟慢调用异常。

      单击流量防护>应用防护>接入应用名>接口详情>RPC服务,查询查看订单列表接口详情。

      执行查看订单列表性能压测后,执行故障注入,打开熔断规则,查看接口详情。关闭熔断规则,调用恢复正常。12223

场景三:故障演练

  1. 测试场景。

    1. 测试项:故障演练。

    2. 测试内容:基于查看订单列表业务场景,以可视化界面方式对订单微服务下游服务进行网络延迟故障模拟,进行以上业务场景操作。

    3. 预期结果:验证故障注入是否生效,进行故障演练停止,验证自动清除故障演练影响。

      说明

      基于混沌工程实验原理,通过故障场景,衡量微服务的容错能力,验证容器编排配置是否合理,测试PaaS层是否健壮,验证监控告警的时效性,定位与解决问题的应急能力,实现包括架构、业务、人员的全面高可用提升。故障演练在其中承担着问题发现、问题验证、高可用经验沉淀的作用。

  2. 测试步骤。

    1. 输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。25

    2. 单在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。26

    3. 新增演练。

      单击故障演练>我的空间>新建演练>选择演练对象>选择演练故障>网络资源>网络延迟。27282930

    4. 创建压测场景。

      单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。31

    5. 设置场景配置。

      在创建压测页面,单击场景配置,键入压测API的名称,对查看订单列表接口的业务进行压测配置。1

    6. 设置施压配置。

      单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测。 1

    7. 演练结果。

      开始压测后自动进入压测中界面,单击演练查看。35对mall-member应用配置故障演练为容器内网络延迟,单机器网络延迟。

      执行查看订单列表性能压测,单击我的空间>演练,开启执行演练,产生超时异常。终止演练,应用调用恢复,不再产生异常。353637

  • 本页导读
文档反馈