看似简单的性能面试题,蕴藏杀机

这个问题的答案很容易回答,单机压测,即在一台PC机上执行性能压测脚本。多机压测,即使用多台PC机同时执行压测脚本。显而易见,多机压测对服务器产生的压力更大。

那对于12306这样的大型服务器到底应该如何去做性能压测呢?难道我弄一万台PC机进行多机压测吗?就算有一万台PC机也难以模拟出全国人民抢票的压力吧?那肿么办?

还记得派老师一句话吗?“越熟悉产品,办法越多”。这个问题需要剖析来看,12306的网站肯定不是一台服务器,肯定是一个集群,只有集群才可能支撑起全国人民抢票。一个集群肯定是由很多台小的服务器组成,这样问题就简单了。如果我们只是对单台小的服务器进行压测,然后乘以服务器的倍数(或者服务器的配置系数,因为服务器配置可能不一样)是不是就可以推演出集群可以承受的压力?当然,这只是估算,估算没有百分之百的准确。一般我们会在估算的基础上再多增加20%~30%的量来保证意外的发生。这是对大型集群压测的基本思路:“拆分”。越是巨大的事物越是由很多小部分组成,性能压测可以通过小部分的性能模拟来推演整体,这样压测成本大大降低。当然在每年春节抢票的时候,可真是全国人民来帮12306做压测,各个系统模块和整体数据一定要保留好,留作以后分析复盘。

另外,服务器集群的整体架构,作为性能测试人员也需要了解清楚。比如12306,春运抢票的业务可能是分散的,而并不是大家看到的都去访问www.12306.cn。这只是一个根域名,后面的服务器集群可能有好几个,比如:北京、上海、深圳。而不同的集群对应不同的车次。比如:开往东北的列车可能都分布在北京这个集群之上,而开往广州的列车可能都分布在深圳这个集群上。这样,在抢票过程中压力实际上是分散了。看上去好像全国人民都在访问12306,其实他内部的业务已经分流了。所以,在做服务器压测时,需要结合实际的业务展开,对一些热门的车次以及不同的集群进行压测,而不是一股脑的所有车次都要压测(以上都是我个人对12306设计的猜测和揣摩,并不代表12306的真实设计)。

讨论了多机压测和服务器设计,那单机压测到底有何意义呢?
单机压测和多机压测对比,肯定其压力是远远不够的。单机压测的意义在于快速的校验多线程或者互斥的问题。比如:在多人购买火车票时,由于开发人员的疏忽在修改数据库时忘记添加数据库锁。而该问题在单个用户测试时并不会出现问题,但是在有多个用户抢购同一张火车票时就有可能发生故障,而且这个BUG也是有随机性的。只有在多个用户抢购到同一张票时才会发生。所以这一类的测试,如果采用手工测试。首先,需要多个人同时配合而且还不一定能够在同时触发。那这类问题的最有效的测试方式就是单机压测或者多线程执行用例。若程序在多线程方面设计缺陷将会很快的发现问题,而并不需要等到真正的多机性能压测时才发现。

平时我们做压力测试基本一台压力机就可以满足条件,但是有些时候需要大量的并发用户,而一台机器资源是不够的,包括单机的内存、使用端口数量等,无法提供符合条件的大量并发用户,所以最好是通过多台PC机组成几个集群来对服务器进行压测,这时候就要引入多机压测。

猜你喜欢

转载自blog.csdn.net/paischool/article/details/89491700