本文根据美团高级测试开发工程师勋伟在美团第43期技术沙龙“美团金融千万级交易系统质量保障之路”的演讲整理而成。主要介绍了美团智能支付业务在稳定性方向遇到的挑战,并重点介绍QA在稳定性测试中的一些方法与实践。数据库
背景
美团支付承载了美团所有的交易流量,按照使用场景能够将其分为线上支付和智能支付两类业务。线上支付,支撑用户线上消费场景,处理美团全部线上交易,为团购、外卖、酒店旅游等业务线提供支付能力;智能支付,支撑用户到店消费场景,处理美团全部线下交易,经过智能POS、二维码支付、盒子支付等方式,为商家提供高效、智能化的收银解决方案。其中,智能支付做为新扩展的业务场景,去年也成为了美团增速最快的业务之一。缓存
面临的挑战
而随着业务的快速增加,看似简单的支付动做,背后系统的复杂度却在持续提高。体如今:上层业务入口、底层支付渠道的不断丰富,微服务化背景下系统的纵向分层、服务的横向拆分,还有对外部系统(营销中心、会员中心、风控中心等)、内部基础设施(队列、缓存等)的依赖也愈来愈多,整条链路上的核心服务节点超过20个,业务复杂度可想而知。微信
此外,技术团队在短期内就完成了从几我的到近百人规模的扩张,这也是一个潜在的不稳定因素。曾经在一段时间内,整个系统处在“牵一发而动全身”的状态,即便自身系统不作任何发版升级,也会由于一些基础设施、上下游服务的问题,业务会毫无征兆地受到影响。网络
痛定思痛,咱们对发生过的线上问题进行复盘,分析影响服务稳定性的缘由。经过数据发现,72%的严重故障集中在第三方服务和基础设施故障,对应的一些典型事故场景,好比:第三方支付通道不稳定、基础设施(如消息队列)不稳定,进而致使整个系统雪崩,当依赖方故障恢复后,咱们的业务却很难当即恢复。运维
解决方案
基于这些问题,咱们开展了稳定性建设专项,目的很明确:提高服务的可用性。目标是逐步将系统可用性从2个9提高到3个9,再向4个9去努力。这个过程当中最核心的两个策略:柔性可用,意思是尽量保证核心功能可用,或在有损状况下尽量保证核心用户体验,下降影响;另外一个是快速恢复,即用工具或机制保证故障的快速定位和解决,下降故障修复时间。微服务
围绕这两个策略,在稳定性建设中的常见操做:限流、熔断降级、扩容,用于打造系统的柔性可用;故障响应SOP、故障自动处理,用于故障处理时的快速恢复。而QA的工做更侧重于对这些“常见操做”进行有效性验证。基于经验,重点介绍“三把利剑”:故障演练、线上压测、持续运营体系。工具
故障演练的由来
举个真实的案例,在一次处理某支付通道不稳定的线上问题时,开发同窗执行以前已经测试经过的预案(服务端关闭该通道,预期客户端将该支付通道的开关置灰,并会提示用户使用其余支付方式),但执行中却发现预案没法生效(服务端操做后,客户端该支付通道仍处于开启状态)。非故障场景下预案功能正常,故障场景下却失效了。学习
这就是故障演练的由来,咱们须要尽量还原故障场景,才能真正验证预案的有效性。测试
故障演练的总体方案
故障演练的总体方案,主要分为三部分:优化
- 负载生成模块,负责尽量还原系统的真实运行场景(要求覆盖核心业务流程)。
- 故障注入模块,包含故障注入工具、故障样本库(涵盖外部服务、基础组件、机房、网络等各类依赖,并重点关注超时、异常两种状况)。
- 业务验证模块,结合自动化测试用例和各个监控大盘来进行。
为了更高效地开展故障演练,咱们的策略是分为两个阶段进行。首先,针对单系统进行故障演练,从故障样本库出发,全面覆盖该系统全部的保护预案;在此基础上,进行全链路故障演练,聚焦核心服务故障,验证上下游服务的容错性。
故障演练的效果
事实证实,故障演练确实给咱们带来了不少“惊喜”,暴露了不少隐患。这里列举三类问题:数据库主从延迟影响交易;基础设施故障时,业务未作降级;依赖服务超时设置不合理、限流策略考虑不足等。
线上压测的由来
面对业务的指数级增加,咱们必须对系统可承载的流量作到心中有数。对于QA来讲,须要找到精准、高效的系统容量评估方法。咱们碰到的难点包括:链路长、环节多、服务错综复杂,线下环境与线上差别大等等,基于测试有效性和测试成本考虑,咱们决定要作线上压测,并且要实现全链路的线上压测。
线上压测的总体方案
全链路压测的实现方案,与业界主流方案没有太大区别。根据压测流程,首先,场景建模,以便更真实的还原线上系统运行场景;其次,基础数据构造,应知足数据类型以及量级的要求,避免数据热点;以后,流量构建,读写流量构造或回放,同时对压测流量进行标记和脱敏;再以后,压测执行,过程当中收集链路各节点的业务运行状态、资源使用状况等;最后,生成压测报告。
基于全链路线上压测方案,能够根据业务需求,灵活地进行单链路压测、分层压测等。更为重要的是,基于压测咱们能够进行线上的故障演练,用于更加真实的验证系统限流、熔断等保护预案。
线上压测的效果
经过全链路线上压测,一方面让咱们对系统容量作到心中有数,另外一方面也让咱们发现了线上系统运行过程当中的潜在问题,并且这些问题通常都是高风险的。一样列举三类问题:基础设施优化,如机房负载不均衡、数据库主从延迟严重等;系统服务优化,如线程池配置不合理、数据库须要拆分等;故障预案优化,如限流阈值设置太低,有的甚至已经接近限流边缘而浑然不知等等。
持续运营体系的由来
智能支付的稳定性建设是做为一个专项在作,持续了近3个月的时间;在效果还不错的状况下,咱们从智能支付延伸到整个金融服务平台,以虚拟项目组的方式再次运转了3个月的时间。经过项目方式,确实能集中解决现存的大部分稳定性问题,但业务在发展、系统在迭代,稳定性建设必然是一项长期的工做。因而,QA牵头SRE、DBA、RD,创建了初步的稳定性持续运营体系,并在持续完善。
持续运营体系的总体方案
下面介绍持续运营体系的三大策略:
流程规范工具化,尽量减小人为意识因素,下降人力沟通和维护成本。
如:配置变动流程,将配置变动视同代码上线,以PR方式提交评审;代码规范检查落地到工具,尽量将编码最佳实践抽取为规则,将人工检查演变为工具检查。
质量度量可视化,提取指标、经过数据驱动相关问题的PDCA闭环。
如:咱们与SRE、DBA进行合做,将线上系统运维中与稳定性相关的指标提取出来,相似数据库慢查询次数、核心服务接口响应时长等等,并对指标数据进行实时监控,进而推动相关问题的解决。
演练压测常态化,下降演练和压测成本,具有常态化执行的能力。
如:经过自动化的触发演练报警,验证应急SOP在各团队实际执行中的效果。
基于以上三个策略,构建稳定性持续运营体系。强调闭环,从质量度量与评价、到问题分析与解决,最终完成方法与工具的沉淀;过程当中,经过平台建设来落地运营数据、完善运营工具,提高运营效率。
持续运营体系的效果
简单展现当前持续运营体系的运行效果,包含风险评估、质量大盘、问题跟进以及最佳实践的沉淀等。
将来规划
综上即是智能支付QA在稳定性建设中的重点工做。对于将来工做的想法,主要有3个方向。第一,测试有效性提高,持续去扩展故障样本库、优化演练工具和压测方案;第二,持续的平台化建设,实现操做平台化、数据平台化;第三,智能化,逐步从人工运营、自动化运营到尝试智能化运营。
做者介绍
勋伟,美团高级测试开发工程师,金融服务平台智能支付业务测试负责人,2015年加入美团点评。
招聘
若是你想学习互联网金融的技术体系,亲历互联网金融业务的爆发式增加,若是你想和咱们一块儿,保证业务产品的高质量,欢迎加入美团金融工程质量组。有兴趣的同窗能够发送简历到:fanxunwei#meituan.com。
发现文章有错误、对内容有疑问,均可以关注美团技术团队微信公众号(meituantech),在后台给咱们留言。咱们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注咱们吧!