每一年双十一,对买家来讲是一场买买买的剁手之旅,但对于电商公司的技术人员来讲,倒是一次严峻的技术期末考。如何保证系统在预估的流量洪峰来临时,既能保证用户的买买买不受影响,前端
促进业务及营销活动的目标达成,又能用尽量少的成本投入保障系统的稳定可用性,是技术童鞋必须面对的挑战。我司在双十一来临的最后关口完成了整个核心链路的全链路压测,后端
大幅提升了核心链路的服务性能,并发布了最终优化版本。在双十一期间,也取得了必定的成果,期间包括技术、运营、产品、行政等各部门都为之付出了不少努力。缓存
下面的内容,是从启动到双十一这段时间,咱们在双十一项目上所作的关于全链路压测的一些实践。性能优化
从项目kickoff到双十一活动开始,第一次双十一大促,咱们面临着巨大的挑战。架构
电商业务自己比较复杂,且当前阶段咱们微服务架构下,各个服务间依赖高,调用关系复杂,且没有较为清晰的链路梳理,理论上来讲,只有一部分系统才是核心链路。并发
因此,面临的第一个挑战,就是从错综复杂的系统中梳理出核心业务链路。微服务
按照业内的实践经验和方案,全链路压测都是在生产环境进行,这样测试的结果才能更贴近实际的生产场景。工具
但因为咱们是第一次进行全链路压测,所以只能选择折中方案——按照生产环境当前的配置,搭建一套等配镜像环境。性能
镜像环境从资源准备到服务部署联调都比较耗时,且成本高昂,这逼迫咱们必须拿到更好的结果,才能提升ROI。测试
为了尽量使压测场景更贴近真实的生产场景,须要对核心链路的流量模型进行比较准确的评估和模型确认。
因为各服务间依赖较高,且调用关系复杂,这对咱们提出了新的挑战——如何评估出更接近真实场景的流量模型。
从双十一启动到结束,须要同时开展的任务较多。好比服务拆分、耦合任务迁移、DB&Redis垂直拆分、正常版本迭代、全链路压测及性能优化,以及新的业务线不断拓展,这些都是咱们须要面对而且克服的困难。
一、任务规划
项目kickoff后,在技术负责人牵头下迅速肯定了本次双十一大促的TODO项。主要是以下几项:
前端:降级点确认、容错保护、监控数据接入;
后端:核心链路梳理、监控&服务保护接入、专项预案、
测试:资源准备、压测模型梳理、压测方案、全链路压测、预案演练、线上功能验证;
基础架构:架构优化、网关替换、DB垂直拆分、基础设施接入(链路追踪、监控、报警......);
资源保障:容量规划、镜像环境搭建、服务部署联调、线上扩容;
二、估时排期
确认任务规划后,各个技术团队迅速组织协调资源投入了各自的工做。因为双十一迫在眉睫,且待办事项较多,故按照时间进行任务估时倒排。
在准备阶段,按照任务规划拆解出来的细化任务进行同步开展,下面是准备阶段咱们开展的主要事项。
一、核心链路梳理
各业务研发团队的owner对咱们目前的核心业务链路进行了梳理,主要包括:首页、商品、订单、支付、用户、风控、优惠券、大促活动、基础服务。下面为示意图表:
二、镜像环境准备
因为本次压测是在和生产等配的镜像环境进行,至关于从零开始搭建一套环境,不管是资源准备、服务部署仍是服务联调验证,都耗费了较多的时间,从中也发现了咱们以前的一些不足,累积了不少经验。
三、压测任务排期
根据大促任务规划,性能测试同窗从中拆解出了较为详细的压测任务,并进行排期,同时积极主动的推进了整个压测任务的开展实施。
四、专项预案沟通
专项预案主要包括以下几项:限流、降级、熔断、脉冲、破坏性验证五种场景。在服务治理这一项,基础架构的同窗接入了sentinel进行相关管理。
五、大促指标沟通
为保证压测流量和生产预估流量对齐,由技术负责人牵头,和运营产品同窗进行了屡次沟通,确认了本次双十一大促活动相关的活动场次、时间段、优惠券投放量、预估DAU等相关关键指标。
六、压测模型梳理
压测模型的梳理,主要包括核心业务链路的优先级、调用依赖关系、流量模型转化(漏斗模型)等,限于保密措施,这里不过多介绍。
七、流量模型梳理
关于流量模型,建议梳理出核心交易链路对应的依赖大图,并粗估双十一峰值数据,做为接下来压测、性能优化的技术目标。
八、线上容量评估
为了在压测开展前对目前线上的服务容量有一个初步的了解,须要对各个核心服务、消息队列、缓存以及DB的容量进行了梳理汇总。
九、线上链路监控
监控就是咱们的眼睛,有了监控,才能快速发现问题并定位修复问题。这一点,基础架构的同窗为此作了不少工做。好比:链路追踪监控的Cat、可视化监控大盘Grafana以及更多的监控组件。
十、压测数据准备
为了尽量保证压测数据的真实性,咱们的解决方案是复制生产库的数据,进行脱敏和可用性验证,用来作压测的基础数据。在数据脱敏和可用性验证这点须要高度重视。
十一、资损防控梳理
因为如今双十一大促活动主要玩法都是优惠券以及满减相关,且涉及到订单支付业务,所以资损防控也是准备阶段的重中之重。
十二、肯定性能水位
为了精确测定各服务单机的水位性能,并留存必定的buffer做为流量高峰时刻的缓冲,结合业内经验和咱们当前的系统状况,最终肯定以单机40%的水位性能做为线上扩容和容量规划的验收标准。
1三、输出测试方案
前期作了至关多的准备工做,在正式开展全链路压测以前,性能测试同窗输出了本次双十一全链路压测的测试方案,经过评审后,全链路压测工做就能够正式开展。
在全链路压测实施阶段,根据测试场景和采用的测试策略,咱们主要进行了以下的工做。
一、单机单链路基准测试
在目前的微服务架构下,总体链路的性能瓶颈,取决于短板(木桶原理)。所以,单机单链路基准测试的目的,是在全链路压测开始前进行性能摸底,定位排查链路瓶颈。
二、单机混合链路水位验证
单机混合链路压测的目的,是排查上下游调用依赖的瓶颈,并以此测试结果做为限流预案的基准值。
三、全链路压测演练
全链路压测做为备战双十一的重中之重,是今年双十一大促项目的基础保障。在整个实施阶段,须要不断的压测,排查定位分析问题并进行优化,对最终的线上发布和容量规划提供了支持。
四、专项演练
专项演练主要是针对服务限流降级熔断以及高可用、服务扩容进行验证。进行演练的目的主要有以下几项:
①、验证预案是否生效;
②、针对预案设定阈值进行测试调优;
③、验证预案生效时服务自己的性能表现;
④、针对上述专项场景进行实战演练;
五、稳定性测试
稳定性测试的目的,是验证系统处于负载状况下,可否长时间提供稳定可用的服务能力。
六、每日问题复盘
在备战双十一期间,会针对天天压测发现的问题进行复盘追踪,尽量让性能问题及时解决。
通过闭关做战半个月,针对咱们的核心业务链路,进行了多轮的压测和性能优化,各系统qps已经基本达到了预约的目标(等比例),TPS总体提高3倍以上。
在双十一峰值流量期来临以前,作最终的线上扩容和优化版本发布。针对双十一,咱们还作了预案的梳理并提早执行、服务降级、缓存预热、job任务降级错峰处理。
整个过程当中,大部分同窗都是没有全链路压测实战经验的,但每一个人都迸发出了巨大的能量。整个过程当中发现了不少存在的问题,但仍是有不少是值得改进的地方,好比:
时间紧促,留给性能瓶颈定位和优化的时间太少,后续能够考虑测试左移;
对一些问题定位排查工具的使用姿式应该熟练,对流量的预估应该更加准确;
项目的推动方面得积极主动,你们都应该有owner意识;
总之,生产的稳定性是服务的基石,尤为对咱们性能来讲稳定压倒一切!
4、将来的规划
为了保障明年的618大促、双11大促,同时为了应对业务快速发展,访问流量的剧增,咱们已经开展了全链路压测平台的建设工做,后续会不断投入精力去完善,但愿能够将压测变成:
轮询化:线上链路测试机器人,实时监控,检测生产服务;
常规化:减小人力成本投入;
平常化:尽量白天完成压测工做,毕竟熬夜不利于身体健康;
图形化:链路压测规划图形化展现,与业务结合,一键完成数据准备工做。
以上就是我经历的一次从零开始的全链路压测过程当中的一些经验和收获,内容仅供参考。。。