一次性公布18部年度片单,华谊兄弟因缺钱而“负重前行”
06-18
来源:美团技术团队丨作者:欧龙数据源官网 | 今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰网丨阿里巴巴UC大学鱼丨新浪微博丨新浪观察丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区 国内度假属于低频业务通常与假期相关。节假日期间客流量较平日增加百分之五至百分之十以上。
有时,会给生产系统带来很大的风险。因此,在2019年春节前,我们基于美团基础压测平台Quake,将整个国内度假业务打通全链路压测,系统评估容量,发现隐患,最终保证了春节期间系统的稳定性。
节日。 。
在整个过程中,我们认识到全链路压测在整个系统的稳定性建设中占据着核心和重要的地位,也是最有效的解决方案。结合实际的营业假期频率(基本上平均每月一次),如果我们能够将其作为保证稳定性的常规手段,那么我们系统的质量也能得到很好的保证。
同时,为了解决周期性常态化压测过程中人力成本高、多个团队重复工作、压测安全不可控、风险高等痛点,我们提出了????自动化全链路压力测试。通过统一压测实施的具体动作,推动压测各个阶段的标准化和自动化,尽力提高整个流程的执行效率,最终达到常态化的目标,如图1所示:图1 自动化实现总体思路 另外,在全链路压测的整个周期中,压测安全性和压测有效性也是需要持续关注的质量属性。
基于这些考虑,如图2所示,我们对压测自动化需要解决的关键问题进行了分类和分解: · 如何实现基础流程的自动化,提高人的效率; · 如何自动进行压测验证,保证压测安全; ·如何计算压测置信度的量化,确保压测有效。图 2. 问题分析。
最后,基于美团基础压测平台Quake(主要提供整个系统的流量记录、回放、施压等功能),设计并实现了全链路自动化压测系统,实现针对不同业务的综合测试。提高链路压测效率,保障压测安全。
系统: ·提供链接排序工具,可以自动构建压测入口链接完整的依赖信息,辅助链接排序; ·支持链路标记和配置功能。对于不需要压测接入的依赖接口,可以配置该方法,无需在业务代码中嵌入压测判断逻辑,即可完成相关接口的Mock配置; ·提供抽象的数据构建接口,通过平台,用户可以配置任意的数据构建逻辑和流程; ·压测前/压测过程中,自动对压测业务和流量进行多重验证,确保压测安全; · 平日根据压测计划提供周期性的低流量压测验证,使得业务迭代变更带来的压测能够尽早发现安全风险; · 提供压力测试计划管理功能,通过系统自动调度和控制压力过程,释放人力;同时,强制预压测试也提高了安全性; · 一键压力测试,自动生成报告,收集链路入口和告警信息,并提供问题记录和跟踪功能。
系统设计 系统总体设计 图3 系统总体逻辑架构 系统总体逻辑架构如图3所示,主要包括链路构建/比对、事件/指标采集、链路治理、压测配置管理、压测验证检查、数据结构、压测计划管理、报告输出等功能模块。通过这些模块,我们为全链路压测的全流程提供支撑,尽力降低业务部门使用全链路压测的门槛和成本。
链接构建/比对:负责服务接口方法调用链接的构建、更新、存储。链路治理:基于构建的链路关系,提供链路中核心依赖、导出Mock接口标注、上下游分析、展示、导出Mock配置等功能。
压测配置管理:自动发现注册服务的Mafka(美团基于Kafka开发的综合分布式消息中间件解决方案)/Cellar(基于Tair的分布式KV存储服务)/Squirrel(基于Redis-Cluster模式)二次开发分布式缓存系统)/Zebra(美团数据库访问层中间件)压力测试配置,协助压力测试人员验证和配置相关配置项。压测验证检查:确保系统可以进行压测,通过多种验证手段和机制设计,保证压测的安全性。
数据建设:为不同业务压测实施准备基础数据和流量数据。压测计划管理:设定压测执行计划,依靠“压测控制”模块自动调度整个压测执行流程。
故障诊断:根据采集到的关键业务/服务指标、告警等信息,判断分析服务是否异常,是否终止压测。置信度评估:从数据覆盖率、链路覆盖率、技术指标等维度评估压测结果的置信度,即各评估维度与真实流量状况的相似度。
非功能需求描述: · 可扩展性 · 兼容不同业务线数据构建逻辑的差异。 ·能够支持不同的流量记录方式。
·安全 ·集成单点登录,按团队对用户进行分组,并展示压测服务信息。保存关键操作的操作日志。
·试压验证检查是保证试压安全的关键。支持定期压测验证,可以检测待压测服务的可测试性随时间的下降情况。
·复用性·从长远来看,链路构建、事件/指标采集/故障诊断等模块是稳定性领域可复用的基础设施,构建为独立的通用模块。约束说明: ·基于Quake构建,流量记录、回放、压力等均依赖Quake。
下面对一些关键模块的设计进行详细介绍。链接治理模块设计 图4 链接治理示意图 链接治理模块是在链接构建模块的基础上实现的。
链接构建模块,底层以闭包表的形式存储两个维度(服务和接口)的链接关系,并会自动构建或定期更新。链路管理模块主要提供链路入口选择、链路标注、服务出口分析、出口Mock配置等功能。
如图4所示,注册压测的服务构成了压测服务的范围,这也决定了各个环节的边界。通过系统自动构建的树形结构中的链接关系,可以辅助压力测试人员梳理整个链接。
解决了以往链接排序依赖翻码等低效手段,缺乏全链接视角无法实现完整排序的问题。等等问题。
图 5:插座模拟已配置。同时,可以根据接口对整个压测范围进行手动标注。
哪些需要mock,哪些不需要mock,这样就可以持续维护压测特有的链接信息。对于需要Mock的外部接口(图4中的C接口),待压测系统通过引入专有的SDK来获得导出配置的Mock的能力。
如图5所示,这里使用了美团九鱼Mock平台的基本能力,并使用JVM-Sandbox作为AOP工具,动态增强配置的需要Mocking的外部接口。调用接口时,判断是否为压测流量。
如果是,则使用Mock逻辑进行模拟延迟处理,并返回预先配置的响应数据。这种情况下,首先简化了导出Mock的操作,业务代码中的Mock逻辑0侵入;其次,将之前的local Mock和Mockserver两种方案替换为一种方案,方便统一管理;第三,在实际压测过程中,平台还可以通过SDK收集Mock逻辑执行数据,并自动与后台标记的Mock数据进行比对,以确保应该mock的导出确实被mock了。
图6 数据建设 数据建设模块是为了解决不同业务的基础数据和流量数据的差异化建设流程。提出了两个关键概念:数据构建逻辑和数据构建过程。
数据构造逻辑是细粒度的、可重用的数据构造基本单元,由一段Java代码表示。平台提供统一、抽象的数据构建接口。
基于Java动态编译技术,开发了Java版本的脚本引擎,支持构造逻辑的在线编辑和更新。同时,基于美团RPC中间件的泛化调用能力,构建了泛化调用工具,帮助用户将对外部基础数据构建接口的调用整合到一个数据构建逻辑中。
数据构建流程定义了生成基础压测数据和流量数据的整个过程。通过与Quake交互,获取原始真实的在线数据;构建了流程引擎的简化版本。
在统一设置过程中,如图6所示,在标准扩展槽中配置了不同类型的数据结构。逻辑和执行顺序用于定义整个数据构造执行过程;最后将构建的流量数据绑定到Quake压测场景,作为后续Quake压测的场景回放流量来源。
通过这样的设计,可以支持任意的数据构造逻辑,通用性强、灵活。同时,它集成了Quake现有的交通记录功能,一键执行数据构建过程,大大提高了效率。
压测验证模块设计 图7 美团服务压测验证图 保证压测的安全性一直是自动化的难点。之前的经验大多是在非生产环境进行压测或者预压测试的过程中,依靠不同业务负责人的手动确认。
在这里,我们为思考压测验证提供了两个新的视角:一是从待压测的服务系统的可压测性角度;另一种是从压测流量特征的角度。第一个角度,支持压测的服务需要隔离压测数据和流量。
对于不同的系统生态系统,需要满足不同的点。对于美团生态下的服务,可以进行压力测试的条件包括支持压力测试的组件版本、满足期望的影子存储配置等。
从这些条件出发,可以获得以下静态验证项: ·服务依赖中间件版本需求验证; ·斑马压测配置验证; ·Cellar/Squirrel压力测试配置验证; ·Mafka压力测试开关同步与验证; ·Service Mock逻辑存在验证。从第二个角度来看,就是要关注压测流程下会产生哪些独特的流量特征数据,并利用这些独特的数据来保证压测的安全性。
这里的数据主要有三类:美团分布式追踪系统(MTrace)中调用链路的压力测试标记数据(正常的压测链路应该一直有压力测试标记,直到压力测试范围的边界节点,请参考参见图4);调用标记为Mock的外部接口时上报的操作数据;基于监控系统获取的压测流量特有的监控数据。利用这些数据,我们设计了三个动态验证项来检测压测标记丢失、Mock出口被调用等异常情况: MTrace链路标记验证从压测链路入口开始,收集压测链路信息。
,验证压测标志信息传输是否符合预期。图8 MTrace链接标记验证图 ·服务Mock逻辑压测标记验证,通过增强的验证逻辑,将执行信息上报给平台,并与Mock配置时的标注数据进行对比进行验证。
图9 Service Mock压测与验证图 · 压测与真实链路进行对比验证。利用链路管理模块的能力构建链路,收集压测监控数据,重构链路,并与真实链路进行对比验证。
图10 压测与真实链路对比除了明确静态和动态压测验证规则外,在具体流程安排上,这些规则在压测时和平时都执行。不仅可以将压测和验证的压力分散到平时,还可以快速发现业务因代码迭代引入的新风险。
压测过程中,通过强制预压测试的流程设计以及静/动态压测验证项目的自动执行,保证安全。如果验证失败,就会发出警报,甚至在允许的情况下,也会直接终止设定的压测计划。
平日里,通过定期进行小流量压测验证,并对施压过程中的QPS进行个位数的精细控制,可以以最小的成本快速发现压测范围内压测安全性的退化情况。压力测试计划管理模块 压力测试计划管理模块旨在提供压力测试计划的预先设置,然后该模块可以自动调度和控制整个压力应用过程。
如图11所示,这里的压测计划是多个压测场景的组合,包括QPS增长计划等信息,主要分为预压测和正式压测两个阶段。自动执行压测计划,可以解决多场景组合压测运行时间较长、多场景压测QPS无法同步更改、压测方无法兼顾运行与维护等问题。
观察等,从而提高效率。同时,压测计划执行状态机中,只有预压测试正常执行后,状态才会转入正式压测的启动状态,提高了压测的安全性。
图11 压测计划执行 从图11可以看出,压测计划模块是整个自动化压测的核心,协调各个模块。执行特定计划任务时产生的事件,触发压测验证检查、压测进度广播、压测监控/告警数据采集,检测服务是否异常,并根据配置终止压测,从而出现故障时及时终止。
损害。最后,报告生成模块接收压测终止事件,汇总各种信息,自动生成包含压测基本信息等多维度信息的压测报告,节省压测后分析的时间。
案例分享以下是根据实际压测流程进行的案例分享。团队/服务注册·设置实施压测的虚拟团队以及压测范围内的应用服务。
链路管理 ·选择压测链路入口,可获取入口下方的接口链路关系树,方便排序。 ·清除需要Mock的外部接口并进行配置。
请参考“链路管理模块设计”部分。应用修改和压测配置 · 修改压测要访问的应用,满足“服务可压测条件”,参见图7。
· 压测应用依赖中间件配置,系统可以自动发现基于构建的链接信息。提供统一的配置和验证页面功能。
Quake准备·压力测试自动化系统基于Quake构建,流量记录、回放、施压等依赖于它。因此,您需要在Quake上配置用于记录流量的“流量任务”和执行压力测试的“压力测试场景”。
数据构建 · 配置数据构建逻辑。当然,现有的逻辑是可重用的单元。
你可以先检查一下现有的逻辑是否能够满足你的需求。 ·配置数据构建流程。
压力测试实施 ·设定压力测试计划,当开始时间到来时,系统将自动启动压力测试。 ·压测过程中,关注压测验证的告警信息并及时处理。
·压力测试结束后,您可以查看压力测试报告。记录并跟踪发现的问题。
总结与展望 目前,压测自动化系统已投入使用,美团酒店、国内度假所有团队均已接入,有效提升了压测效率。未来,我们将在两个大方向上继续打造和升级。
一是将全链路压测放在“容量评估与优化”领域,不仅注重整体系统的稳定性,也希望兼顾成本的平衡;另一方面是与稳定性的其他子领域,比如断层演练、弹性伸缩等进行生态融合,在更多场景下发挥压力测试的作用。最终,通过这些努力,线上系统的稳定性已经成为了板上钉钉的事情。
参考文献 [1] 全链路压测平台(Quake)在美团的实践 [2] 阿里巴巴 JVM-Sandbox [3] Dubbo 的泛化调用 [4] Java 的动态编译 作者简介 欧龙,美团工程师研发,加入美团2006年成立,目前主要负责稳定国内度假交易。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-06
06-18
06-18
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用