加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

超高性能管线式HTTP请求(实践·原理·实现)

发布时间:2019-03-29 00:10:02 所属栏目:教程 来源:lulianqi15
导读:这里的高机能指的就是网卡有多快哀求发送就能有多快,根基上一样平常的处事器在一台客户端的压力下就会呈现明明延时。 该篇现实是先容pipe管线的道理,下面首要通过其高机能的测试实践,理会背后数据流量及道理。最后附带一个简朴的实现。 实践 先直接看比拟测
副问题[/!--empirenews.page--]

这里的高机能指的就是网卡有多快哀求发送就能有多快,根基上一样平常的处事器在一台客户端的压力下就会呈现明明延时。

该篇现实是先容pipe管线的道理,下面首要通过其高机能的测试实践,理会背后数据流量及道理。最后附带一个简朴的实现。

实践

先直接看比拟测试要领

测试内容单一客户的行使尽也许快的方法向处事器发送必然量(10000条)哀求,并吸取返回数据

对付单一客户端对处事器举办http哀求,一样平常我们的方法

1:单历程或线程轮询哀求(这个效能天然很低,缘故起因会讲到,也不消测试)

2:多条线程提前筹备数据守候信号(对客户端机能要求较高)

3:提前筹备一组线程同时轮询操纵

4:行使体系/平台自带异步发送机制(现实就是平台线程池的方法,发送与吸取行使从线程池中的差异线程)

对付测试方案1,及方案2测试中机能较低没有可比性,后头测试不会展示其功效

以下展示后头2种测试要领及当前要说的管线式的方法

  • 先讲管线式(pipe)测试方案(道理在后头会讲到),测试中行使100条管线(管道),现实上更少乃至一条管线也是能到达近似的机能,不外大都处事器nginx限定一条管可以一连发送request的数目(大部门是100也有部门会是200或是更高),每条管线发送100个哀求。
  • 然后是线程组的方法筹备100条线程(100条线程并不是许多不会对体系自己有明明影响),每条线程轮询发送100个request。
  • 异步方法的方法,10000所有提交发送线程,由线程池节制吸取。

测试情形:平凡家用PC,i5 4核,12G ,100Mb电信带宽

测试数据:

GET http://www.baidu.com HTTP/1.1

Content-Type: application/x-www-form-urlencoded

Host: www.baidu.com

Connection: Keep-Alive

这里就是测试最常用的baidu,假如测试接口机能不佳,大部门哀求会在应用处事器列队,难以直观提现pipe的上风(着实就是还没有效到pipe的手段,处事器就先阻塞了)。

下文中全部关于pipe的测试都是行使PipeHttpRuner (http://www.cnblogs.com/lulianqi/p/8167843.html 为该测试器材的下载地点,行使要领及先容)。

先直接看守道式的示意:(截图所有为windows自带使命打点器及资源打点器)

超高机能管线式HTTP哀求(实践·道理·实现)

超高机能管线式HTTP哀求(实践·道理·实现)

先表明下截图寄义,后头的截图也都是同样的寄义

第一副为使命打点器的截图实线为吸取数据,虚线为发送数据,取样0.5s,每一个正方形的刻度为1.5s(由于使命打点器画图计策速度上升太快过高的没有步伐表现,不外照旧可以看到时刻线)。

第二副为资源打点器,添加了3个采样器,赤色为CPU占用率,蓝色为收集吸取速度,绿色为收集发送速度。

测试中 一次原始哀求或许130字节,加上tcp,ip包头,10000条或许也只有1.5Mb(包头不会太多由于管道式哀求里会有多个哀求放到一个包里的环境,不外大部门处事器无法有这么快的相应速率会有大量重传的环境,现实上传流量也许宏大于理论值)。

一次的回包或许在60Mb阁下(由于会有部门毗连半途间断以是不必然每次测试城市有10000个完备回覆)。

可以看到行使pipe情势机能示意很是突出,总体完成测试仅仅行使了5s阁下

发送自己压力较量小,可以看到0.5秒即达到峰值,其拭魅这个时辰根基10000条request已经发送出去了,后头的流量首要来自于处事器端缓存守候(TCP window Full)来不及处理赏罚而照成是重传,后头会讲到。

再来看看response的吸取,根基上也仅仅行使了0.5s即到达了吸取峰值,行使或许5s 即完成了所有吸取,由于测试中cpu占用上升并不明明,而对付response的吸取根基上是从tcp缓存区读出后直接就存在了内容里,也没有涉及磁盘操纵(以是根基上可以说对付pipe这个测试并没有施展出其所有机能,瓶颈首要在收集带宽上)。

再来看下线程组的方法(100条线程每条100次)

超高机能管线式HTTP哀求(实践·道理·实现)

超高机能管线式HTTP哀求(实践·道理·实现)

下面是异步吸取的方法

超高机能管线式HTTP哀求(实践·道理·实现)

超高机能管线式HTTP哀求(实践·道理·实现)

很明明的差距,对付线程组的情势或许行使了25秒,而异步吸取行使了高出1分钟的时刻(异步吸取的模式是平台保举的发送模式,正常应用环境下机能黑白常良好的,而对付过高的压力不如自界说的线程组,首要照旧由于其行使了默认的线程池,而默认线程池不行能在短时刻开100条线程出来用来吸取数据,以是大量的回覆对线程池里的线程就会有大量的切换,通过配置默认线程池数目可以进步测试中的机能)。更为重要的是这2者中的无论哪一种方法在测试中,cpu的占用都险些是满的(等于说为了完成测试计较机已经满负荷事变了,很难再有进步)。

后头着实还针对jd,toabao,youku,包罗公司本身的处事器举办过测试,测试功效都是相同的,只要处事器不出题目根基上都有高出10倍的差距(假如客户端带宽足够这个差距会更大)。

下面我们再对接口情势的HTTP举办简朴一次测试

这里选用网易电商的接口(电商的接口一样平常可遭受的压力较量大,这里前面已经确认测试不会对其正常行使造成实质的影响)。

http://you.163.com/xhr/globalinfo/queryTop.json?__timestamp=1514784144074 (这里是一个获取商品列表的接口)。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读