随便聊聊,说说自己的认识。
自己水平有限,还望大家多多批评。
全链路压测平台(Quake)在美团中的实践:[https://tech.meituan.com/quake_introduction.html]
相信各位关心测试技术的,都会被这篇文章刷屏,没错,美团也开始说自己的全链路压测平台 Quake 了。
全链路压测平台不是新概念,滴滴说过,阿里说过(介绍 PTS 有广告的嫌疑),这次美团又说了。
我自己也写了一个基于 Jmeter 的全链路压测平台:
基于 Jmeter 的轻量级云压测平台的原理与实现 (一):开篇:[https://testerhome.com/topics/15612]
当然这个跟美团是没法比了,不是妄自菲薄,大环境就不一样,面对的流量就不一样,人力也不一样,当然技术也不一样。
美团这次技术解密真的是最到位的,真的是技术分享的态度,这和阿里的广告嫌疑,滴滴的欲言又止是不一样的。
美团的技术分享,真的干货挺多的,我经常看。
下面我想通过几个方面聊聊美团的全链路压测平台。
全链路压测平台主要有两个核心的也是最顶级的要求:
这导致了,必须线上搞压测,必须用线上的真实数据搞压测。
那么线上搞就容易搞出事情,所以技术含量还是要有的,还是很高的。
聊聊技术。
美团推广有很多技术关键点,说一些最关键的。
全业务要求流量必须是真实的,美团的做法是:
然后压测流量从数据库池子里来。
其实这个最早也是阿里提出来的,当然美团也提了,借鉴阿里的方式。
以上都不用改一行业务端代码,都是改的中间件如 Tomcat,改的是数据库和缓存连接池的代码,对业务代码的侵入性几乎没有。
然后压测数据根据测试标识,访问被隔离出来的 MySQL,Redis,RebbitMQ 等等这些测试数据库。
还可以进一步把隔离出来的(即带测试标识的)流量,只访问隔离出来的服务器,这样就不会污染整个线上服务器集群。
这里可能有同学会有思考了,测试标识加在哪?
那这一套线上压测,压测数据到底要准备什么?
主要准备两个地方:
那么还会有同学问,线上有几百上千台持久层集群,你都要备份一套,那得多少?
这地方美团没仔细提,是吧,成本还是有的不好提。我认为原因还是有几点:
所以持久层的备份不用那么膨胀,还行。
再谈谈影子区一般的技术:
美团用的是第二个,好处不少:
如果说上面两点和 Jmeter 其实没啥关系,那么压测核心实现这一点,真就是超越 Jmeter 的地方了。
美团用的是 NIO,悲剧的是,Jmeter 用的是 BIO。
好处不解释了,美团已经把 BIO 喷了一遍了,阿里的 PTS 也用的 NIO。
做法也不解释了,美团应该是探了不少坑的,自己写的时候再说吧。
有几点吧:
比较重要,核心还是依赖 Mtrace 提供的数据。
资源就是成本,但是也是项目的筹码。
一般机器管理都是运维的势力范围,但是文章中没提运维两字,可能是平台自己管理。
我比较倾向于是运维提供的 API,Quake 自己调用的,同时是运维给的权限。
依赖 CAT,依赖 Falcon(应该二次开发过)
JVM 调优什么的就不说了,JDK 发展很快,CMS 已经要被淘汰了。
客户端监控也是 Echarts 写的。
至少目前来看,得是有追求,有余力的公司吧。
阿里,滴滴,饿了么,云集微店,美团,这些公司有一个共性,都是支付场景比较高并发的公司,就是对钱非常敏感的公司。
支付场景,也就是支付相关的各个服务(订单,派送,入库出库等很多),相连密切,这样的场景比较复杂,还是高并发,自然对性能测试有高要求。
同时支付场景,是会改变库的数据的,这也要求线上测试必须做数据隔离,这也是全链路压测的核心。
文中有提到的:
没提测试报告是如何生成的,里面包含了什么,是什么形式的。
我觉得这反应了,美团内部的技术氛围真的浓厚,为什么这么讲?
意思就是大家各部门看压测图形,就都知道咋回事了,不用什么报告!
或者说,压测结果都是有留底的,直接线上查就可以了,真的方便可靠。
这个我也没看到,不过以它数据库存储压测数据来看,其实脚本是 SQL 语句就行了,我一点儿也不意外。
我一直在提大环境,说说大环境对这个工具的作用吧。
Quake 的脚本貌似很简单,但那也是分对谁,在美团,不用跟谁解释什么叫 RPC,什么是 Mtrace。
简单说就是工具推广不用考虑技术阻碍,这得省多少事儿。
文章后面一直强调各部门的支持,这是肯定的,没有 Mtrace,跨服务的真得从头来。
还有 CAT,rpc 框架等等成熟的技术。
同时,美团也提了,之前也有一个平台叫 Ptest ,至少也有帮助吧。
月平均压测次数达上万次,这样工具的投入才有意义,这才是真正的用户支持,这样才能发现问题。
负责人不是高级测试工程师,而是高级工程师,有理由相信,至少人家是想撇掉测试头衔的。
测试真的很尴尬,一亩三分地还被开发染指,抢走责任田。
整个团队(之前提是 4 个人)一个月开发出来核心,两周一个迭代,这开发强度不小啊。
真是有些感慨了,大公司的能量真的很大。
之前这里也有人提测试职业生涯规划什么的,我觉得 Quake 就是一个很好的说明例子。
测试的职业生涯真的不要那些毒鸡汤,什么推动了这个,推动了那个,成为核心竞争力,太毒了。
就说小公司能搞定这个 Quake 吗?
你能推动 Quake 吗?
前期要准备 Mtrace,要搞中间件。实现要搞数据转储 hive,搞 NIO,等等。
工具运营要搞各部门配合。
服务器上需要运维有成熟的灰度体系。
服务端开发要有熔断机制,消费降级等等。
工具使用上,需要架构组的配合。
别说你能推动了,CTO 能推动吗?
一个小公司,是微服务吗?分前台,中台,后台吗?有架构组吗?
你能搞定 Quake 技术栈,公司开发都围着你转,你认为可能吗?人心叵测啊少年!
就算推动了之后,还要 2 周一个迭代,累死累活啊!
最后的最后,公司给你多少 package 搞这些啊,你谁啊?
不是我负能量爆表,这真的都是事实。
就算你都搞定了,去面试的时候也是看你背景,还是看你年龄的兄 die,现实还是那么残忍!
一些明明是大公司大平台的功劳,非要记成是自己的能力,这真的不对。
就算退一步说,美团没有现在这个牵头人搞全链路压测平台,美团就没有 Quake 了?
真的很遗憾,没有你,美团可能会做的更好。
就不多说了。我不是想怼谁,而是自己要有分辨能力。
工作还是要一步一个脚印啊,共勉吧。