天猫王德山谈性能测试

个人简介 王德山(淘宝花名:耿电),天猫性能评测负责人,性能技术专家。先后在花旗银行CSTS, IBM, Neusoft,从事专职性能测试和技术管理工作。专注于高性能分布式应用服务系统性能测试和前端Web性能测试,擅长超高并发的分布式应用、数据库性能测试,性能调优,容量评估,线上性能稳定预防。 早期投入C/S,C/S/S,B/S/S等架构应用服务系统的软件集成解决方案、ERP、Portal等产品性能测试和自动化测试,涉及保险、资源管理、银行投资证券、电子商务等行业领域。 曾经参与编写淘宝性能测试白皮书,普及性能测试知识,在Tcon和D2有分享性能专题。 软件生命周期中性能稳定无处不在,主张研发过程中处处关注产品应用性能和运行稳定,及时做性能监控,性能分析,性能优化,提倡bug植入和性能预案。 目前负责天猫性能评测团队,专注天猫所有产品线应用的性能评测,性能优化解决方案,容量评估,性能预案等工作。

作为InfoQ主办的全球顶级盛会,QCon在伦敦、北京、东京、纽约、圣保罗、 杭州、旧金山举办过多次,这次是首次走进中国首都北京。希望能给当 地的公司、技术社区和技术人员提供一流的学习、交流平台。

   

1. 今天在我旁边的这位是天猫猫性能测试的负责人王德山,请您做下自我介绍。

王德山:大家好,我是来自阿里巴巴——天猫的王德山,花名叫耿电,我现在主要负责天猫的性能测试团队,包括天猫所有产品应用的性能测试、性能稳定和容量稳定,谢谢。

   

2. 众所周知,就是这几年的双十一,淘宝和天猫表现让我们技术人员感到很振奋,面对如此高的一个负载和并发量,请问你们在此阶段都要评估哪些因素,制订哪些基准,如何根据这些事先评估好的指标对硬件和软件进行一个部署和规划的?

王德山:首先我想,现在天猫的双十一在互联网业界有一个很好的反映,现在这种模式也是被越来越越多的公司认可和尝试去推广。从性能角度来讲,从几个方面来看一下,第一个就是说,我们发起接受这个项目,他应该开始是从大众的需求、产品、营运和开发角度上,把测试作为出发点,帮我们介入双十一的挑战。我们性能角度有这么几个方面,一个是我们首先会评估当前的天猫这套应用体系的性能和容量支撑。第二个,因为产品是有需求的,我们对这个产品有准确的评估,会做一个比较有意思的预测,像10年、11年、12年,它的数量级是在整个的跨越甚至跳跃的。这对我们做性能测试或性能保障是一个比较大的挑战,正好接下来,我们聊聊这方面的行动:第一个就是对当前性能的容量评估,包括当前产品应用代码本身的健壮性、是否有瓶颈;第二,因为大促是一个比较烦杂、比较有挑战的一个事情,所以我们要做好一些保障;再有一个,专业技能方面就是预案,一个预案是我们预知当前所掌控的,另外一个是非掌控性的,我们要做一个后续的处理预案,出现类似异常的时候,我们从应用层面,或者从整个容量层面来做一个比较强的处理。最后就是说容量规划,需要非常有效,目前的跨机房的,包括网络流量的内容,是一个重头戏。

   

3. 那硬件方面你们是怎么来做?

王德山:硬件方面因为我们会有不同的业务需求,天猫现在的产品,对我们技术人员来讲是一个非常应该是非常狂热、非常有趣的一个课题。我可以举个例子,它能覆盖到当前每一个话题,像搜索类的,我们就是针对硬件的需求,需要有大内存、CPU,,第二类,就是那种算法和渲染,对CPU消耗的比较大的这一大类,我们会有不同的硬件机型来支撑;第三类就是目前这种比较流行的Java虚拟机这块,Java虚拟机也是非常大的方面,这时我们从性能优化的角度,从代码的角度,包括一些为了保险去做一些非侵入式的日志打点、监控的角度,我们这样配置能够更加合理,我们对于不同的产品要对症下药去做物理支持,从应用测试来讲,我们对他是一视同仁的,我们做的目标就是说在这种不同软硬件之间上,保证我们的性能稳定和用户体验。

   

4. 对于性能测试来说,您是建议在前期,规划就要做测试,还是在中后期,我们再把性能测试加进来,说一下你的方案?

王德山:首先我觉得这两种方式目前都会存在,因为我觉得第一个方面,这两个方式目前是平行都会存在的,第二个是有一定的倾向性,就是说我希望,把性能测试在开始的时候就能够接入进来,这是我在12年年终的时候,就会考虑从需求立项的时候我们性能测试团队就加入,产品的整个流程做一些变化,加入性能测试就需要往前做,因为这样我们才能从需求、商品的角度更好的做好本质工作,因为作为一个应用的测试人员,不了解业务的时候很难去推动工作的。另外一个,就是从性能保障角度,这个我觉得非常重要,因为我们有了产品的需求了,就说这些技术实现,因为性能测试时间会压缩,包括软件生命周期里面不同的变数,推定的两天时间让你做这个工作,可能在之后,一天,还有一夜,我们要做好更好的一些充分的准备工作,才能把工作有质量的完成,可是我觉得这种趋势是,性能测试在产品的立项,甚至在技术转型的时候,我们就会专注性能,目前做这种方式来进行。并且在整个应用服务系统周期中都存在性能监控,分析,性能优化至应用系统性能稳定。

   

5. 就是在我们线上应用的时候,然后我们需要进行的一些监控措施,那些阿里目前来用的一些检测的工具,是一些厂商的,还是组件,还是你们自己写的,在监控时候,很多人就需要考虑对服务性能的一个损耗,这块你们怎么做?

王德山:我觉得这应该是两个问题,第一个,通过阿里淘宝天猫经过累计我们目前以自主创新为主的,像目前我们在用的,就是一个是,也有两个方向,因为这工具为代表性的有很多,但是我可以用概念来描述一下,第一个就是,现在生产线应用的监控,包括一些这种报警,日志,容量。第二个,基于业务的监控,因为这个业务,不同的方向上,因为这个比较详细一些,甚至深入到产品里面去了,就是两大类,目前自主创新的这种工具来创新的,因为现在,就说商用购买的比较少,但是有一个方面,就是我们可以去通过一些开源的工具来借鉴,还有我们做好的,我们把它开源出去。

   

6. 阿里在开源这块贡献也很大?

王德山:这是跟这个公司的风格有关,我们做得很好了就要把它分享出去。

   

7. 对于产品损耗这块?

王德山:这个的确是一个非常重要的事情,因为刚才提到,我们在生产线上做一些监控,这样我可以追溯到09年的时候,09年我们在做一套比较大的监控系统,它是一个全方位的,基于各种应用后台的,从这种应用性能,应用的一些容量,用户体验,包括一些网络,还有覆盖不同业务,包括日志打点。刚开始,我们都是一种通过这种代理式的,还有侵入性,所有埋点,代码埋点,它是侵入性的,这是第一版,后续我们所说的,我们就是通过各种非侵入式的,甚至说尽量少侵入代码,或者少侵入本身方式来完成,我觉得这是一个趋势,因为当我们在生产线上去做这个工作时候,他本身会产生影响的,但是说,我们现在做得好,我们把它这种影响控制在范围之内,我觉得。

   

8. 这种非侵入式也可以让比如说项目人员,和你们这些监控人员可以隔离开,不会影响他们代码?

王德山:隔离的有专门的团队会做这方面的工作。

   

9. 比如说一旦我们的线上项目出现一些问题,它已经上线了,这时候需要怎么处理?

王德山:这是一个“惊喜”,带双引号的惊喜。当我收到这种信息的时候,一个是通过邮件,一个是通过手机短信、旺旺通知,要么线上报警,要么线上故障,当我们遇到这种报警的时候,作为性能测试人员,我们有责任去协助研发团队把这个事情搞清楚,大概有这样几个步骤:首先看,假如是一般的报警,我们去确认,排查问题解决掉。第二个,本身这个故障对业务产生了影响,造成了用户损害,我们需要立马修复这个BUG。还有就是从性能测试角度,有几个方面:一个是我们去协助开发一起来定位,通过各种的一些分析技术,像分析日志抓取缺陷,包括这种报警时的一些异常、用户的反馈,把这些信息收集起来,迅速的把它整理出有用的信息出来。第二个就是我们把这个问题在生产线上重现,,根据重现场景,捕获代码性能瓶颈,进而目标性优化。第三个就是,当我们把这些问题优化了以后,在线下做功能、性能的测试回归,确定没有问题了,通过语法预发测试、打补丁的方式去把性能瓶颈解决;杰茜莱就是故障的Review会议,我们要避免这种问题重演。

   

10. 你刚才也提到也会进行线下的性能测试,你比如说双十一,这时我们要做线下性能的测试的时候,你需要很大一个高并发量,这时候我们怎么来做这种硬件和软件的一个规划?

王德山:因为这个课题比较大一些,说到了软硬规划。硬件这块,我们也会参与,主要是运维团队来做相关的工作。而同类的软件应用在性能上来讲,因为它属于一个性能容量的事情,我们不去做。我们把这稍微精确化一些,比如这样的例子,某一个应用需要支持一亿的访问量,那我们的目标很明确,一个是从代码生成角度,我可以保证应用的代码是OK的、是没有瓶颈的,但是从另外一个角度看,因为现在这个应用是在一定的硬件基础之上的,只有应用所用的硬件固定下之后,才能做基准,那么在这个基础之上,代码方面性能到瓶颈了,我需要考虑扩容,扩容后我们才能够说达到一亿PV量时的性能,这块是通过各部门协调配合的一个事情。除了硬件,还有比较重要的是我们底层系统性能的支持,上层应用,和底层包括数据库等需要流畅的运转才可以,因为在这里有应用之间联动的影响,特别现在的分布式应用,因为现在的应用,都是有几十个应用、上千个应用来组合,就像一个类似蜘蛛网似的,通过交互通信来完成一个事务,所以说这块它是一个复杂的课题,但是我们通过核心交易链路作为主线来把控。

   

11. 你们现在是基于云的测试化,还是怎样?

王德山:这种云测试,就是我们性能这块还是比较少,在功能方面有探索,但是我不擅长这块,所以就省略过去。

   

12. 作为一个性能测试专家,对于开发人员,您建议他们写代码时要遵循怎样一个规则,或者有哪些好的推荐?

王德山:我觉得就说测试开发,在一个软件生命周期里边,尤其数据这块我们应该共同去维护,共同去完成目标,达成一定的共识,但是我把这个话稍微转一下,可能会更客观一点,就是开发的代码,我们去测,测试跟开发是为了共同的维护这个产品,没有你我,这是一个。另外就是我们对外用户来讲,我们天猫的产品用户体验是有保障的,在这块,我通过一个建议性的合作。从性能测试角度,优化建立驱动跟开发合作,共同维护产品,实现团队内共赢。第一个是我们现在有自己的性能测试BUG库,我们有充分的性能测试数据分析的源泉,我们希望把这些性能瓶颈BUG能够把它归类,通过模型的方式,通过分享的方式,通过代码自动化的方式,能够让我们减少代码的性能故障和性能瓶颈,这个应该是一个循序渐进的工作,因为有好多的驱动在里边。另外一个,就是我们跟开发加强沟通,因为代码最初是开发写的,测试我们有自己一个专业领域,需要更多沟通。假如说开发有一些代码问题被我发现了,可能对我们来说这是一个好事情,对开发来讲也是一个很好的途径,因为我觉得这里没有孤立,也没有一些冲突,本身就是为了代码的这种产品到最后用户体验服务的过程,我觉得大家都是在这种交流和一些沟通,也都是在前进中。 InfoQ:咱们的采访到此结束,也预祝天猫在今年能取得更优异的成绩。

你可能感兴趣的:(天猫王德山谈性能测试)