为何测试时性能吊炸天而上线却惨不忍睹?

Posted TIM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为何测试时性能吊炸天而上线却惨不忍睹?相关的知识,希望对你有一定的参考价值。

转自:冬瓜哥

为何测试时性能吊炸天而上线却惨不忍睹?

无数次,让各个存储厂商的售前、售后、架构师头痛的一件事情就是:明明前期测试的时候性能强悍到报表,SPC1之流登顶,结果用户实际业务部署之后发现,性能惨不忍睹。厂商出动顶级架构师优化,结果还是不行,无力回天,甚至直接退货。

到底是什么原因导致这类事件?可以明确的讲,90%以上的原因就是因为两个字:时延。纵观性能测试,哪个不是“提高队列深度”、“增加线程数量”。具体体现为IO测试软件里的诸如“Outstanding IO Depth”或者“Queue Depth”以及“Job Quantity”、“Woker Quantity”等类似参数。测试人员往往把这些值加高,其作用就是充分利用系统IO路径上各处的并发度。正如上文中所说,如果IO测试软件每次就发送一个IO就等在那,那么性能就是惨不忍睹。这些参数恰恰就是让IO测试软件采用异步IO的方式来发送IO,批量下发大量IO,一下子把IO路径上各处的队列压满,底层的并发度自然就能够利用起来。同理,那些业界拼性能的公开测试,套路都一样,就是增加并发度。冬瓜哥看来,这毫无意义,这就像弄它一万台烂机器,每台机器只跑1000的IOPS,那么整个系统的IOPS就是一千万一样滑稽。松耦合,高并发,测出来的性能当然吊炸天了,不仅炸了天,只要愿意,砸足够的钱,宇宙都可以无敌。

那么,现实中的各类应用系统,比如数据库、ERP、OA等等传统企业常用的系统,他们的IO Style是什么样子?我们往往都在说“OLTP”、“OLAP”,这是前人们对传统IT业务的分类,这个分类今天依然适用。OLTP就是所谓Online Transaction Processing”在线交易类,此处的“交易”并不是指狭义的拿钱买东西的交易,而是指一种“有人在焦急的等待恨不得马上返回状态”的业务,比如数据库查询、更新,网上购物,网聊等,都算OLTP场景,也就是实时性很强的场景;而OLAP中的A就表示Analysis,在线分析类,比如“计算一下本季度销售数据出n个报表并根据某模型预测下一季度销售额”该类业务场景并不要求实时性,也很难做到实时性,其需要读入大量数据做运算,有些甚至需要十几个小时的运行时间,基本快有点超算的意思了,该类场景有个时尚点的词叫做“大数据分析”。

可以很明显的看到,OLTP业务对IO的要求是时延和吞吐量兼具,而OLAP场景一般只要求吞吐量。同时,OLTP类业务发出同步模式的IO的比例远高于OLAP类业务,因为实时性场景下,很多时候必须一步一步的来,比如点击购买按钮,付款后,才能走下一步,没有任何电商为了实现批量下发IO获得高吞吐量而在你点击购买按钮之后不等你付款就直接让商家打包包裹去了。同步IO是最难优化的IO场景。一般都是OLTP类业务会遇到性能问题,就是因为其对时延有要求,自己还时不时就发送同步IO。

咋办?既然原因找到了,就是同步IO呗,那么同步IO最怕的就是时延大,所以提升同步IO场景的性能,唯有降低IO路径时延,别无他法。怎么降低时延?什么诸如“虚拟化网关”之类,如果非常在乎性能,那趁早别用;LVM?如果不是极度要求管理便捷性,也不要用;软Raid?这东西增加的时延笔虚拟化网关和LVM都高,趁早也不要用;虚拟机?也增加时延。多路径软件?也增加时延;走网络交换机访问存储系统?改用点对点直连,也能节省几百纳秒的时延。反正你就看吧,IO路径上能砍掉的全砍掉。再不行,就得使用户态驱动的模式,把IO直接在用户天下发给HBA,但是这个不是一般人能玩的,只有一些专用系统可能这样去玩。

疯了!都砍掉了,代价必然是管理便捷性越来越差。是的,就看你要性能还是管理性了。这还没完呢!还有一招更狠的,把外部存储系统直接砍掉把!啥?外部存储系统也增加IO时延了?是的,在缓存不命中的时候,其时延比单盘还要高。我……,没道理把?

来,冬瓜哥给你讲讲。服务器拿什么连接到磁盘的?HBA啊。接本地磁盘一般用什么HBA?SASHBA啊!SAS HBA速率是多少?12Gbx4=48Gb/s啊!好,那么接外置存储系统用什么HBA?一般是FC HBA啊,速率16Gb/s。好,那么SAS HBA是不是直接接磁盘了,而FC HBA还要至少经过下面这些角色才能到磁盘:FC交换机、外置存储系统控制器(本质上就是服务器)前端HBA、控制器OS内核、控制器上的数据缓存(就是DDR RAM)、用户态/内核态IO处理程序、后端HBA、JBOD上的SAS Expander、SAS磁盘。哎呦我……,说的连我自己都怕了,一笔IO请求在不命中存储系统缓存的情况下,后面还要经历这么多角色,时延能不大么?反观本地盘场景下,IO直接从SAS HBA控制器到SAS盘了,就一跳,时延当然低了!原来如此,SAS HBA+本地盘的方式,在吞吐量上当然比不了动辄上千块盘的外置存储系统,但是时延上绝对是有优势的(相比外置存储系统缓存不命中前提下,命中则没有优势)。那么在随机读场景下,缓存命中率非常低,这么说SAS HBA+本地盘的方式的优势会显现的更加明显了?是的。所以冬瓜哥说,不行可以考虑直接砍掉外置存储系统。额,呵呵。酸爽不?

最狠的,当然,就是直接上存储领域的核武,终极大法:SSD!果不其然,爽了。

以上是关于为何测试时性能吊炸天而上线却惨不忍睹?的主要内容,如果未能解决你的问题,请参考以下文章

吊炸天,springboot的多环境配置一下搞明白了!

吊炸天,springboot的多环境配置一下搞明白了!

吊炸天,springboot的多环境配置一下搞明白了!

零基础学习软件测试从懵逼到吊炸天之基础与进阶篇

吊炸天的 Kafka 图形化工具 Eagle,必须推荐给你!

Sublime Text 3设置吊炸天PHP开发环境