共计 3769 个字符,预计需要花费 10 分钟才能阅读完成。
前言
随着哈啰用户体量的一直增大,业务场景越发复杂化,尤其在目前已变成大众出行必不可少的基础设施的背景下,如何辨认线上零碎瓶颈、危险,保证系统的高可用曾经变得尤为重要,让技术更好的服务业务,发明更多的价值。
聊到全链路压测,对很多同学来说更关注它的技术实现细节,这没错。但全链路压测想要胜利的在生产环境施行、落地,其实也须要很好的组织和流程机制。本文也会着重从技术细节和流程机制两个方面来给大家介绍如何通过生产全链路压测来识别系统危险,保障高可用的。
对于全链路压测
为什么要在生产施行
首先,如果在线下做全链路压测,咱们须要部署和保护一套线下的全链路零碎,加上线下环境的不稳定性等个性,咱们会疲于保障线下零碎可用性上,投入老本极高;并且线下的服务器和存储以及其余基础设施资源规格和线上不统一,产出的压测后果并肯定可能真正领导咱们进行线上正当的容量预估和基准线设定的稳定性相干工作。
其次,很多同学可能都针对单接口、单链路或者单服务做压测,不论是线上还是线下,咱们会发现,其实等到线上全网流量真正起来之后还是会存在很多问题。因为线上流量和业务的复杂性,做这样的压测,咱们会遗漏掉很多流量对系统的影响,最终得出的压测接口也不能真正正当的领导保护线上零碎的稳定性。
再有,咱们的性能从一个月迭代一次到当初一周迭代一次,留给测试的工夫越来越短。功能测试工夫从之前的一周、两周缩短到当初三四天、两三天的工夫,那性能测试就没有方法按时上线,很有可能会呈现各种各样的性能问题,这会间接影响到公司的品牌影响力。
总之,咱们心愿通过生产全链路压测,使得生产零碎有足够的冗余和正当的预案来应答线上的复杂度和不确定性。
全链压测的作用
1、精准的容量评估和零碎基准线设定;
2、端到端的全链路巡检,被动发现线上问题和危险;
3、验证相干预案的合理性和时效性。
何时须要全链路压测
1、失常迭代测试实现,上线后呈现各种系统故障;
2、对线上零碎容量和资源预估只能依据 ” 重点服务、外围链路,资源多给点 ” 的经验之谈;
3、性能团队在尽力实现相干的性能测试,然而线上还是会有相干的系统故障呈现;
4、依据业务场景,比方 B 端业务可能全链路压测的诉求不是很大,C 端业务的大概率是须要做全链路的压测。
全链路压测演进
荒蛮期间
参加人员:非功能测试、业务开发 (单人)、DBA
这个阶段,次要针对外围开关锁链路进行压测,因为还没有整个链路具体的上下游依赖,以及业务影响,咱们只能通过一直压测来调整用户模型和流量模型,业务革新,来保障链路可能压通并达到目前压力,在此过程中,事先筹备到压测值班,再到压测问题定位和复盘,都只单人参加,其他同学对压测整个我的项目的过程以及实质并没有很分明,甚至是齐全不晓得。
动员期间
参加人员:非功能测试、业务开发 (多人)、中间件、DBA、大数据
在咱们外围链路可能失常进行压测后,咱们开始思考和扩充压测业务的范畴,使咱们可能真正的理解线上服务的容量、瓶颈以及危险。在这个阶段,咱们选取了占网关前 95% 的流量,也动员了更多的业务开发参加其中,通过全链路压测人让更多的人晋升风险意识。中间件同学的接入,让我也开始开始思考数据、日志隔离的问题,不断完善压测的技术计划。
标准化期间
参加人员:非功能测试、技术危险、业务开发
通过以上两个阶段,全链路压测在线上的施行流程曾经全副跑通,这个时候咱们更多的关注是如何让全链路压测变得更加标准和更加有效率,常规化,并且做出更加精准的线上容量预估和基准线的设定。咱们减少了很多标准和机制,一直的演习和欠缺,从以前的每次压测(数据预埋、压测、数据清理、复盘)4 天的工夫周期,缩减至 2 两天,并且建设起每月 2 次全链路压测(月中独自全链路压测,月底追随全业务线进行全链路压测)的惯例机制。
全链路压测最佳实际
上面咱们通过“技术细节”和“流程机制细节”两个方面来具体开展讲述全链路压测在的落地历程。
技术细节
压测拓扑视图
整体:
某业务线:
压测流量发动
从 2018 年开始,咱们开始进行生产全链路压测,出于之前并没有太多在生产应用 jmeter 进行分布式加压的实操教训,过后压测流量次要是通过 Jmeter 发动,以手动执行脚本为主。
从 2019 开始,通过线下对 Jmeter 工具的一直应用和一些个性的把握,性能测试同学逐渐开始全副用 Jmeter 来进行生产全链路压测,自研压测平台也在研发和调试中。
从 2021 开始,开始应用自研压测平台 pt-test 正式进行生产全链路压测。
压测流量结构
首先,咱们来看下业务场景。如上图,该业务线次要的业务有三个因素形成:经营区、用户、车辆,所以咱们次要须要结构的压测流量就是压测城市、压测用户、压测车辆,上面咱们来具体聊一下,这个三个数据是如何结构的。
- 压测城市选定
选取一块目前在业务上理论未应用的区域,划定为了经营区,并且依照产品模型,划定了相应的站点、标准停车区、禁停区等,还原线上的经营实情。
- 压测车辆
对于压测车辆,咱们本应该走车辆投放流程,造一批虚构车辆,然而因为思考到走正式投放流程,事件流较长,波及到的业务部门的人较多,不易推动,而且会产生很多无用的压测相干数据,故咱们最初抉择间接操作贮存介质,将相干须要的压测单车信息间接写入到数据库和 redis 中,造出一批虚构压测单车。
- 压测用户
压测虚构用户和压测虚构车辆做法雷同,也是通过间接操作贮存介质,来造一批虚构用户,通过对线上用户的特征分析,得出了用户模型。咱们的用户有持卡类型,非持卡类型,开明免密未开明免密等,通过相干对用户的骑行卡,免密签约 token 等数据提前预埋,来还原线上各类用户的占比,尽量使咱们的压测用户流量和实在流量凑近。
压测流量过滤
- 业务革新 + 压测用户特色辨认
针对一些业务场景须要对压测数据进行过滤,比方:投保,数据回流、超时订单完结等,咱们后期通过辨认压测用户标识,硬编码来过滤压测用户流量和数据,不让这些数据走到前面的业务逻辑中去。
- 中间件革新 + 压测流量标透传
为了彻底消除压测前业务开发和数仓信息不对等的状况产生,以及因为压测数据流入数仓,导致数仓模型的数据准确性受到重大影响,以及兼容后续其余方需对压测数据无感知的状况。故中间件针对压测进行了降级,反对了压测流量标识透传,保障在压测链路的每一环和每一个参与方在须要的时候都能够辨认压测流量。具体实现如下图:
流程机制细节
明确压测环节
正如前言局部提到的,想要将全链路压测在生产上高效率、可控的执行,并且压测常态化,咱们除了关注压测的一些技术实现外,咱们还须要一个欠缺且可执行的流程机制,以及模板化的文档。如下图,这边将整个压测生命周期分成了压测前、压测开始、压测完结,在各对应的节点也明确了操作流程标准和一些标准化、模板化文档,使整个压测过程落地变得执行可控和高效率。
明确参加人员职责
如下图,在压测的整个执行落地的各个环节,咱们明确各位参加同学的职责,晋升参加人员的专一度和压测的效率、成功率。
常态化机制建设
在公司微服务架构的技术背景下,一个服务从开发、构建、测试、集成到部署再到降级,都变得更加灵便、麻利了,以及可扩展性的进步等。但微服务架构并非银弹,也存在很多毛病。比方,零碎网络拓扑的复杂度变高,会引起一系列的高牢靠相干的问题和危险。如何提前发现这些问题和危险?这个也是咱们肯定要在生产进行全链路压测的理由,建设起常态化的压测机制。
目前公司为大小公布周,故这边依照每月两次(月中独自进行全链路压测,月底追随全业务线进行压测)的节奏进行常态化的生产压测。来提前发现生产问题和危险,以及验证线上预案。
将来
业务侧
零碎基准线设定
当初目前曾经达成历史峰值 2 倍压力的指标,后续筹备拉出一份,压测指标下,各个接口的 tps 的,用于推动各接口基准线设定,给限流以及压测终止的相干提供参考。
数据、指标隔离
目前压测数据隔离不便咱们还有很大欠缺,咱们的相干压测数据都落到了生产实在数据所在的贮存介质中,大量压测数据的沉积,占用了可用空间,影响了贮存介质的性能,同时针对某些数据咱们不得不进行压测后的清理,大大增加了压测操作的生命周期,升高了压测效率。后续会对影子表相干解决方案的落地进行推动。
业务指标这块也还没有进行隔离,压测期间会影响会导致实在指标的稳定,会造成咱们指标稳定的误判,从而放过了过后由线上实在业务、流量引起的稳定,给零碎稳定性埋下隐患。后续筹备推动针对压测指标和非压测指标进行重新配置。
平台侧
欠缺压测模型
咱们当初的压测流量模型的欠缺根本是靠每次的压测问题中剖析得出,没有提前得出非常贴近线上流量的模型,这样会导致咱们有相干线上实在场景是笼罩不到的,而且也有可能因流量模型和线上零碎容量不统一导致此次压测不能顺利完成。咱们目前也在与测试效力组探讨,流量录制接入压测的可能性,通过流量录制,录制反映链路流量的热力求,将非压测期间的热力求与压测期间的热力求比照,得出没有被压测流量笼罩的场景,通过调整压测入参,使得压测模型更加趋近生产。
压测生命周期平台化、自动化
这一块次要冀望压测平台在自动化不便更加欠缺,从压测接口模型、压力发动,到根因剖析,再到压测报告改良优化跟踪等方面,做得更加的自动化和平台化。
(本文作者:周铭敏)
本文系哈啰技术团队出品,未经许可,不得进行商业性转载或者应用。非商业目标转载或应用本文内容,敬请注明“内容转载自哈啰技术团队”。