了解一下HTTP1.1 Pipelining技术

        为什么谈HTTP1.1 Pipelining呢?主要问题根源还是来源于Beetlex参加了techempower的测试。先看一下以下两项测试的结果:

以上分别是.net平台的Json和Plaintext的测试结果,其实Plaintext最高能跑700多万RPS已经完全超了对网络IO读写损耗的认知,即使10G的光卡也不可能每秒承载1400万的IO R/W。Beetlex在其他测试结果都非常不错,但在最基础的Plaintext得到了最差的结果!为了解决这一问题我看了N次aspcore的框架代码看有没有细小的差异引起问题,结果经过N次的尝试一年后还是无法解决。。。

发现问题

        最近我翻看了techempower针对20轮的测试说明,其中有一条说是要废弃Plaintext项,说这一个项并不符合实际应用需求。后来看了一下评论的一项

在这里我才看到了HTTP/1.1的pipelining描述。。。后来查了一下资源才发现techempower好像在2015年单独为Plaintext测试项引入pipelining模式,主要用于测试框架在带宽上的吐吞能力,而beetlex在实现HTTP1.1里并没去实现它!看到这信息后心里瞬间无数的草尼马飘过。。。,原因这一年针对这一问题的解决方法完全是姿势不对!

Pipelining模式有什么好?

        在这里先说一下HTTP/1.1的基础通讯模式,就是发起一个请求后等待响应后再发起下一个请求;这样每个请求响应最少占用一个网络读和网络写的操作。在pipelining模式下的操作则是可以同时发起多个请求,然后等待多请求同时响应,这就意味着多请求响应可以合并到一个网络读写上,这样的性能提供是巨大的.由于pipelining模式的使用是非常有限,只允许GET和HEAD请求,所以很多语言的HttpClient组件并不支持这种方式。

从上图可以了解到,非pipelining模式下,三个请求最少占用3次IO读写,而使用pipelining后则可以缩减成1次IO读写,这样有多少性能提升可以查看《评估服务基础性能应该参考那些指标?》。对http1.1的pipelining了解 发现techempower的Plaintext测试之所以有这么高的响应能力并不是为了反映服务器的网络IO高效,而是通过pipelining模式实现的一个高带宽吞吐的技巧测试,由于不具备实用性所以才在讨论中提议废弃它。

总结

        由于没有了解techempower的细节导致一直踩在这坑上,整整浪费了大量的时间去查看实现问题;由于姿势不对未能解决问题,但在调整过程中也尝试各种线程队列调整和测试收获还是有的,更重要的一点是BeetleX不再为这一问题而烦恼。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法题目——子序列和问题(poj-3061)(尺取法)

题目链接:POJ-3061 题意:给定一个序列,使得其和大于或等于S,求最短的子序列长度。 问题分析: 1.首先序列都是正整数,当子序列和大于等于S时,已经没有必要再将右端点继续向右移动。因为再向右移动,序列的长度一定会大于此时的长度 2.所以,当子序列和小于S时,右端点向…

读书 | 数字化转型的道与术(下)

【数字化转型】| 作者 / Edison Zhou这是EdisonTalk的第313篇学习总结 最近在阅读钟华老师的新作《数字化转型的道与术》,记录和总结了一些学习笔记和感想,整理成文分享与你,本文为下半部分,希望能对也在参与数字化转型的各位童鞋…

算法题目——读书知识点统计问题(POJ-3320)(尺取法)

题目链接:poj-3320 问题:杰西卡是一个非常可爱的女孩,受到许多男孩的追捧。最近她有个问题。期末考试快到了,但她几乎没花什么时间。如果她想通过考试,她必须掌握一本厚厚的教科书中包含的所有思想。那本教科书的作者和其他作者一样,对这些观点极为挑剔,因此有些观点被…

GraphQL:面对复杂类型

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进&#xff0c…

为什么建议学生积极参与开源项目?

喜欢就关注我们吧!“ 你参与过开源项目吗?” 随着开源技术对信息产业的积极影响进一步扩大,越来越多的面试官将是否参与开源项目作为考核开发者能力的一项基本指标。对于求职者来说,参与开源能为简历增色不少 ,增加赢得…

微服务技术栈及分享计划

前言上一篇对微服的演变、优缺点进行了概述,对于业务复杂项目,微服务算是比较合适的解决方案;对于咱们开发者来说,有好的解决方案肯定要跟进学习,但不能盲目追崇流行技术,目的还是为了解决问题。这里就把As…

PAT乙级题目——1002写出这个数

问题分析:1.数据比较大,并且输入数据时没有停顿,所有使用字符串来存储数据 string str""; cin>>str;2.使用字符串数组来存储每个数字的拼音 string S[10]{"ling","yi","er","san"…

Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整

作者:李彬,赵雪枫,金融科技工程师,架构师社区特邀作者!应用服务性能调优,是每个系统投产前都需要关注的问题,系统及软件层面的调优方法均有大量文章介绍,但在所有招数使出后&#xf…

PAT乙级——1001害死人不偿命的(3n+1)猜想(太简单)

#include<iostream> using namespace std;int main(){int n;int ans0;//记录走过的步数 cin>>n;while(n!1){if(n%20){ans;nn/2;}else{ans;n(3*n1)/2;}}cout<<ans;return 0; }

好的重构方法才能摆脱“屎山”

大家好&#xff0c;我是Z哥。最近在整理一些项目&#xff0c;所以相关的文章写的多了些。之前的相关文章有《聊聊单元测试》&#xff0c;感兴趣的话可以点击文末链接去阅读。这次整理项目的时候&#xff0c;做了比较多的codereview和重构。好久没做这么高强度了重构了&#xff…

在 Asp.Net Core 中使用 worker services

ASP.Net Core 3.0 Preview 3 新增了一个 worker services&#xff0c;那什么是 worker services 呢&#xff1f;它如同 windows服务 或者 Linux守护进程 一样的后台服务&#xff0c;在 Visual Studio 中提供了一个专门创建 worker services 的模板&#xff0c;如下图&#xff…

react全局状态管理_rxv: 在React中用Vue3的reactivity包实现状态管理。

前言React的状态管理是一个缤纷繁杂的大世界&#xff0c;光我知道的就不下数十种&#xff0c;其中有最出名immutable阵营的redux&#xff0c;有mutable阵营的mobx&#xff0c;react-easy-state&#xff0c;在hooks诞生后还有极简主义的unstated-next&#xff0c;有蚂蚁金服的大…

VS Code 变身约会利器!以码会友,轻松找到心仪的TA!

在韩老师的《Visual Studio Code 权威指南》一书中&#xff0c;我向大家推荐了许多好用的插件&#xff0c;其中也不乏许多摸鱼插件&#xff0c;刷知乎、炒股票、看电影、听音乐、追番、看小说&#xff0c;一应俱全。前不久&#xff0c;韩老师还给大家推荐过一款“小霸王”插件&…

机器学习——常用算法的总结

机器学习常用算法总结 机器学习——常用算法的总结学习方式一、监督式学习&#xff1a;1、分类2、回归补充——线性回归与逻辑回归二、非监督式学习&#xff1a;三、半监督式学习&#xff1a;四、强化学习&#xff1a;算法类似性一、回归算法&#xff1a;二、基于实例的算法三、…

机器学习——决策树学习

机器学习——决策树学习一、什么是决策树二、决策树的学习过程特征选择&#xff1a;决策树生成&#xff1a;剪枝&#xff1a;三、决策树的一个具体的实例导入数据python strip() 函数和 split() 函数的详解及实例数据处理提取到训练集中的标签给数据的每一列添加上标签&#xf…

微软:Excel公式是世界上使用最广泛的编程语言

喜欢就关注我们吧&#xff01;文|一君微软近日推出了一项 Excel 公式构建的新功能 LAMBDA&#xff0c;正则测试阶段。LAMBDA 允许使用 Excel 自身的公式语言自定义功能&#xff0c;而过去&#xff0c;Excel 中需要通过 JS 等语言编写自定义函数。同时&#xff0c;LAMBDA 还可以…

机器学习——文件的读取

机器学习——文件的读取(一).txt文件的读取(二)excel文件读取操作(一).txt文件的读取 txt的链接 链接&#xff1a;https://pan.baidu.com/s/1fIAUdCDTpR7TiqLHZtx1yg 提取码&#xff1a;0929 python strip() 函数和 split() 函数的详解及实例 一直以来都分不清楚strip和split…

linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...

索引优化建议在MySQL中要尽可能使用覆盖索引进行检索&#xff0c;只访问索引的查询(索引列和查询列一致)&#xff0c;减少select * 可提高查询效率覆盖索引(Covering Index)理解方式一:就是select的数据列只用从索引中就能够取得&#xff0c;不必读取数据行&#xff0c;MySQL可…

使用 Azure WAF 羞辱黑客的智商

点击上方蓝字关注“汪宇杰博客”导语还记得之前给大家介绍过的《使用 Azure Web 应用防火墙拦截黑客攻击》吗&#xff1f;今天我又带来了一个有趣的 Azure WAF 小技巧&#xff0c;可以让你爽一把。好奇的黑客今天 Azure Application Insights 上发现了一段集中时间的404错误&am…

机器学习之乳腺癌问题(SVM)

机器学习之乳腺癌问题SVM题目所需的代码及数据利用SVM建模SVM调参题目所需的代码及数据 链接&#xff1a;https://pan.baidu.com/s/1bS7Ku_PUfcimiVkmLz9Fzw 提取码&#xff1a;0929 利用SVM建模 import matplotlib.pyplot as plt import pandas as pd import numpy as npfro…