应用高可用架构设计最佳实践
前提条件
本实践适用企业版V3.14及以上版本。
主要涉及阿里云应用高可用服务AHAS产品的流量防护功能。
背景信息
应用高可用服务AHAS的核心功能是流量防护即流控降级,分为应用防护和网关防护。应用防护结合Sentinel的优势,以流量为切入点,从流量控制、熔断降级、系统保护等多个维度来帮助您保障服务的稳定性。网关防护是对网关进行流量控制,从流量入口处拦截激增的流量,防止下游服务被冲垮。
应用场景
AHAS应用流控降级广泛用于秒杀场景、消息削峰填谷、集群流量控制、实时熔断等场景中,从多个维度保障您的业务稳定性。
在一个常见的分布式应用中,如下图所示。一个请求先通过终端到达Gateway,再经过防火墙和网络负载均衡,其中还包括调用下游的其它服务和第三方应用,才能到达前端网络服务。AHAS应用流控降级在不同的层次以流量为切面提供秒级实时的流量分析(例如在客户端层提供流量实时监控和水位诊断分析功能),帮助运维人员采取针对性的防护措施,全方位地保护应用的稳定性。
功能特性
秒级流量分析功能,动态规则实时推送。
专业多样化的防护手段:
入口流量控制:按照服务容量进行流量控制,常用于应用入口,例如:Gateway、前端应用、服务提供方等。
热点隔离:将热点和普通流量隔离出来,避免无效热点抢占正常流量的容量。
对依赖方隔离或降级:对应用和应用之间、应用内部采用隔离或降级手段,将不稳定的依赖的对应用的影响减至最小,从而保证应用的稳定性。
系统防护:AHAS应用防护可以根据系统的能力(例如Load、CPU使用率等)来动态调节入口的流量,保证系统稳定性。
实时的单机监控能力,强大的聚合监控和历史监控查询能力。
实践步骤
应用高可用架构设计应用准备
应用架构。
Nginx与前端代码部署在一个容器;
负载均衡SLB使用7层协议负载到前端容器NodePort;
Nginx与网关服务使用K8s服务发现,微服务之间使用EDAS提供服务发现。
应用业务流程。
核心业务流程:
用户登录。
商品列表。
商品购买。
订单生成。
查询订单。
测试环境说明。
场景一:微服务限流
测试场景。
测试项:微服务限流。
测试内容:对提交订单接口进行流控规则配置,每秒查询率QPS阈值为100,流控方式为快速失败,针对提交订单业务场景进行每秒查询率QPS阈值为400的压力测试。
预期结果:访问超过限流阈值后,自动开启限流。
说明通过性能压测获得应用所能承载的业务上限,依此为应用配置限流规则,通过限流规则来保护应用的可用性,超过应用负载上限的请求能被有效阻挡,避免短时业务暴增对应用的冲击。
测试步骤。
输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。
在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。
新增流控规则。
单击流量防护>应用防护>接入应用名>规则设置>流控规则>新增流控规则,填写接口名称、来源应用、统计维度、单击QPS阈值及流控效果。
单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。
设置场景配置
在创建压测页面,单击场景配置,键入压测API的名称,针对提交订单服务创建压测场景。
单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测。
流控结果
开始压测后自动进入压测中界面,单击查看图表。
执行提交订单性能压测后,打开流控规则,监测到有429异常。关闭流控规则,异常不再产生。
说明在HTTP协议中,响应状态码429 Too Many Requests 表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。
场景二:微服务熔断
测试场景。
测试项:微服务熔断。
测试内容:对查看订单列表接口进行熔断规则配置,慢调用(接口处理响应时间超过800ms)比例为10%,熔断时长为10。
预期结果:慢调用比例达到规则后,自动开启熔断,慢调用减少或恢复后,熔断自动关闭。
说明除了流量控制以外,调用链路中不稳定的方法或者下游依赖需进行熔断处理。由于调用关系的复杂性,如果调用链路中的某一环节出现了错误,会导致这个请求失败,甚至会放大不稳定性,导致整个链路无法正常服务。熔断功能在调用链路中某个方法出现不稳定时(例如某方法出现Timeout或异常比例升高),对这个方法的调用进行限制,让请求快速失败,避免此错误影响整个链路。
测试步骤。
输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。
在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。
单击流量防护>应用防护>接入应用名>规则设置>降级规则>新增降级规则,填写接口名称、阈值类型、慢调用RT、降级阈值等信息。
另:熔断要针对下游服务进行配置,订单服务下游服务为member,这里配置member服务getMemberInfo接口的熔断策略。
单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。
在创建压测页面,单击场景配置,键入压测API的名称,对查看订单列表接口的业务进行压测配置。
单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测。
熔断结果。
开始压测后自动进入压测中界面,单击查看图表。熔断规则配置满调用RT为800ms,慢调用比例为10%,熔断时长为10s。熔断规则实时生效,通过故障演练,注入容器内servlet延迟,模拟慢调用异常。
单击流量防护>应用防护>接入应用名>接口详情>RPC服务,查询查看订单列表接口详情。
执行查看订单列表性能压测后,执行故障注入,打开熔断规则,查看接口详情。关闭熔断规则,调用恢复正常。
场景三:故障演练
测试场景。
测试项:故障演练。
测试内容:基于查看订单列表业务场景,以可视化界面方式对订单微服务下游服务进行网络延迟故障模拟,进行以上业务场景操作。
预期结果:验证故障注入是否生效,进行故障演练停止,验证自动清除故障演练影响。
说明基于混沌工程实验原理,通过故障场景,衡量微服务的容错能力,验证容器编排配置是否合理,测试PaaS层是否健壮,验证监控告警的时效性,定位与解决问题的应急能力,实现包括架构、业务、人员的全面高可用提升。故障演练在其中承担着问题发现、问题验证、高可用经验沉淀的作用。
测试步骤。
输入阿里云专有云账号密码登录Apsara Uni-manager运营控制台。
单在上方导航栏单击产品>监控运维>应用高可用服务 AHAS 2.0 版本,进入AHAS控制台。
新增演练。
单击故障演练>我的空间>新建演练>选择演练对象>选择演练故障>网络资源>网络延迟。
创建压测场景。
单击性能压测>创建场景>PTS原生压测,进入PTS原生压测模块,创建压测场景。
设置场景配置。
在创建压测页面,单击场景配置,键入压测API的名称,对查看订单列表接口的业务进行压测配置。
设置施压配置。
单击施压配置,选择压力模式、递增模式、最大并发、压测总时长等信息。完成后单击保存去压测。
演练结果。
开始压测后自动进入压测中界面,单击演练查看。对mall-member应用配置故障演练为容器内网络延迟,单机器网络延迟。
执行查看订单列表性能压测,单击我的空间>演练,开启执行演练,产生超时异常。终止演练,应用调用恢复,不再产生异常。
- 本页导读