聊聊基于kylinTOP工具的HTTP2压力测试

1、http协议概述做这些简单的事情,也可以让性能测试工具播种下优质的基因,最终长成参天大树,成为行业的翘楚。
说到,那就应该先了解一下协议的发展历史。关于协议的历史,可以参考阮一峰老师的这篇博客文章 http 协议入门,里面介绍的比较详细了。简单来说先后存在09、10、11三个版本,我们目前上网使用最广泛的是11协议,发布于1997年,距今已经20多年了,至今仍然是访问网站的主流协议(真是老而弥坚啊)。11的报文格式如下:
request报文
response报文
http11的问题
协议早期为互联网的普及做出了巨大的贡献,构建了现代互联网的基础架构,但是由于协议制定的时间较早,在很多方面还是有着局限性,在互联网高速发展,信息爆炸的今天,难免有些捉襟见肘。主要体现在以下几个方面:
传输报文为ascii文本形式,对于 header不会进行压缩。这样对于可读性是比较友好,但对于计算机不太友好,此外传输效率较低
请求只能由客户端发起,不能由服务端发起。这种模式限制了一些主动推送或者有双工需求的使用场景,当然也有比如websocket之类的解决方案,但那严格来说已经不属于协议的范畴了。
同步阻塞通讯:其实在11中已经默认使用了持久连接(persistent connection),可以做到多个请求复用同一个tcp连接,同时利用管道机制(pipelining),可以让请求同时在一个tcp连接上发送,但是本质上还是一个请求响应模型,服务端仍然需要按照请求的顺序依次回复,不能乱序回复。这样要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(head-of-line blocking)。
由于队头堵塞问题的存在,在客户端要下载大量资源的情况下,不得不和服务器建立多个tcp连接(大部分浏览器允许最多建立6个和指定服务器的持久连接),达到并发传输的效果,而众所周知,建立和销毁tcp连接的成本是非常高昂的(如果是s就更高),同时也增加了服务端的资源消耗。
基于以上的这些痛点,催生出了2。
http2
spdy
2起源于谷歌的spdy项目(没错,又是谷歌-_-),于 2009 年年中发布,其主要目标是通过解决 http11 中广为人知的一些性能限制来减少网页的加载延迟(那些广为人知的限制我在上面都提到了)。具体来说,这个项目设定的目标如下:
页面加载时间 (plt) 减少 50%。
无需网站作者修改任何内容。
将部署复杂性降至最低,无需变更网络基础设施。
与开源社区合作开发这个新协议。
收集真实性能数据,验证这个实验性协议是否有效。
到了2012 年,这个新的实验性协议得到了 chrome、firefox 和 opera 的支持,越来越多的大型网站(如 google、twitter、facebook)和小型网站开始在其基础设施内部署 spdy。事实上,在被行业越来越多的采用之后,spdy 已经具备了成为一个标准的条件。
观察到这一趋势后,http 工作组 (http-wg) 将这一工作提上议事日程,吸取 spdy 的经验教训,并在此基础上制定了官方“http2”标准。在拟定宣言草案、向社会征集 http2 建议并经过内部讨论之后,http-wg 决定将 spdy 规范作为新 http2 协议的基础。2015 年初,iesg 审阅了新的 http2 标准并批准发布。
2、http2的压力测试关注点
现网中已经存在大量的基于http2协议的web服务,对于http2协议,浏览器访问web服务存在较大的差异,主要体现在相同的并发量的情况下,web服务会受到突发性http请求的冲击。主要原因是对于浏览器访问一个页面,http11协议,浏览器最并发量控制在6个以内。但对于http2的请求最高并量几乎没有限制,如下所示。
要对支持http2协议的网站进行压力测试,必须是基于http2协议的请求并发(一般支持http2协议的web服务,都会同时支持http11,与客户端之间建立链接时,必须进行握手,互方协商需要使用的协议,如果测试工具不支持http2协议,下发http11的协议请求,web服务器也可以正常提供服务,这时测试的结果就不是你想要的结果)。
要想证明性能测试工具下的http协议是http11还是http2,可以通过抓包工具抓取server heloo的报文进行确认。如下所示:server hello报文中的alpn next protocol:h2 ,是判断发送http请求协议版本的重要判断依据。
3、支持http2协议的压力测试工具
国内常用的jmeter,loadrunner 12性能测试工具,这两个均不支持http2协议的请求。下图是通过lr 1255导入chrome har包,发送http请求的抓包图。报文中没有alpn next protocol:h2的关键字(lr 没有采用ie录制脚本的原因是ie不支持http2)。目前国内阿里pts,wetest,华为cpts均不支持http2协议。本文采用奇林软件kylintop
4、http2压力测试
41、录制脚本
本次以脚本录制网站案采用:wwwustceducn (中国科学技术大学)
打开http2开关,点击确认,弹出如下对话框,输入要录制的url
录制生成如下脚本
调试脚本
调试过程可以看到http请求的瀑布图,几科所有http请求都是同时并发。目前kylintop工具在处理http2协议的http的请求并发模型依据请求的父子关系,按照一定的算法进行并发。从并法的瀑布图看,与http2协议的标准相一致(http2标准并发是按照尽可能的并发,除非两个请求有依赖关系。最高并发可以达到300都有可能)。