问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

超极速优化:网络开发中的请求合并!

发布网友 发布时间:2024-10-03 19:48

我来回答

1个回答

热心网友 时间:2024-10-24 06:50

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,非公众号转载保留此声明。

今天,xjjdog来分享网络开发中的一个超级技巧。它可以把两个请求合并为一个请求,使得服务在弱网环境中性能得到极大的改善。

说开了很容易,但却很难想到。

需求

如果我有大量的物联网设备,比如说100万台。如果这些设备平均每10秒产生一个请求,那么QPS就是10W,这对于任何公司来说都是一个不小的规模了。

涉及到交易等有变更的需求,为了实现幂等操作,通常会提前申请一个交易号(或者说token),来进行唯一的交易请求。

这样,完成一个交易,需要至少发起两个请求。一个是申请token,一个是拿着token做交易。

虽然说生成token很快,但它是从网络上传输的。且不说现在都是异步模型,就拿网络延迟来说,就是一个大的问题。它可能硬生生的把服务质量给降了下去,增加了不确定性,也增加了编码的复杂性。

有什么办法来加快这个过程吗?

从HTTP中学习经验

大多数人都知道,TCP有三次握手和四次挥手的机制。这种冗长的对话虽然保证了连接的可靠性,但却损失了不少性能。HTTP从一到三各个版本,都是在尽量减少HTTP连接的个数,也在减少交互的次数。

在比较早的HTTP1.0实现中,如果需要从服务端获取大量资源,会开启N条TCP短链接,并行的获取信息。但由于TCP的三次握手和四次挥手机制,在连接数量增加的时候,整体的代价就变得比较大

在HTTP/1.1中,通过复用长连接,来改善这个情况,但问题是,由于TCP的消息确认机制和顺序机制以及流量控制策略的原因,资源获取必须要排队使用。一个请求,需要等待另外一个请求传输完毕,才能开始

HTTP/2采用多路复用,多个资源可以共用一个连接。但它解决的只是应用层的复用,在TCP的传输上依然是阻塞的,后面的资源需要等待前面的传输完毕才能继续。这就是队头阻塞现象(Head-of-line blocking)

QUIC,也就是HTTP3,抽象出了一个stream(流)的概念,多个流,可以复用一条连接,那么滑动窗口这些概念就不用作用在连接上了,而是作用在stream上。由于UDP只管发送不管成功与否的特性,这些数据包的传输就能够并发执行。协议的server端,会解析并缓存这些数据包,进行组装和整理等。由于抽象出了stream的概念,就使得某个数据包传输失败,只会影响单个stream的准确性,而不是整个连接的准确性。

请求黏贴

其实,我们参考TCP的三次握手就可以了。TCP的握手和挥手流程都差不多,但为什么握手是三次,但挥手是四次呢?

原因就是TCP把SYN和ACK两个报文,合并成一个返回了。

我们可以把token看作是序列号,然后把它黏贴在正常的请求里返回就可以了。

比如,原来的请求是。

一、获取token

request: /getTokenresponse: {"token": "12345"}

二、提交请求

request: /postOrder{"token": "12345","other": {}}response:{"status": 200}

合并后的请求是。

request: /postOrder{"token": "12345","other": {}}response:{"status": 200,"token": "12346"}

只需要在每次请求返回的时候,不论成功还是失败,都附加一个新的token到客户端。客户端缓存这个token,然后发起下个请求。

通过这个方法,就可以把两个请求合并为1个请求,完成我们的优化目标。

End

在网络编程中,减少网络交互是一个非常重要的优化,尤其是在弱网环境中。虽然这个技巧很简单,但它很难被想到。优化效果也是巨大的,毕竟减少了一次网络交互。

它有一个响亮的名字,那就是三连环。意味着前后请求的衔接,永不断环。

作者简介:小姐姐味道 ?(xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:

1. 玩转Linux2. 什么味道专辑 ?

3.?蓝牙如梦 4.?杀机! 5.?失联的架构师,只留下一段脚本 6.?架构师写的BUG,非比寻常 7.?有些程序员,本质是一群羊!

小姐姐味道

不羡鸳鸯不羡仙,一行代码调半天

338篇原创内容

原文:HTTPs://juejin.cn/post/7101627686291767309
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 如果公司借壳上市,那原公司会停盘吗,如果一直持有那个公司的股票呢... ...升级软件或下载老出现 合并极速升级文件失败 这是怎么了 怎么办啊... 怎样用万用表测电风扇电机好坏 我的系统是装在c盘,为什么其他盘里也有受保护的系统文件,可以删除... 手机文件夹无法删除,请帮我看看 小米内存卡有没有人帮我看看哪些可以删除的?有效有追分。 病毒文件能删吗?高手帮我看看啊!~ ...什么文件,居然占了我16G,又不敢乱删,谁帮我看看是什么文件... 请问力杰数码客服是多少? 请问力杰客服是多少? 请问力杰客服电话是多少? 请问力杰数码客服电话是什么? 力杰U100智能移动电源怎么操作? 力杰V8新充电宝,刚买来就充电,充了很久都没充进去,问客服,说先把虚电... Author 中文意思什么意思? 无线网卡是按照多少钱一个小时算的 涨知识了,知道吃炸酱面为什么要放菜吗 我在大连读书 想买个无线上网卡 包月得那种 只用一个月 而且不是天天用... 无线上网一个月包月多少钱?或者限市时包月也可以... 笔记本用无线网卡上网多少钱一小时?包月呢?包年呢?(只想了解安徽滁州和... 请问上网卡是包月的还是包小时的,还是用多少算多少?哪一种划算呢? 电风扇的电容用数字万用表怎么检测 迅雷极速版突然下载失败了怎么办? 360mobilemgr.exe(手机助手)如果关闭开机自启或直接关闭进程,插入手机... 侠盗飞车在哪下载手机版 VC苹果版:iPhone iOS下载安装《罪恶都市》侠盗飞车GTA的方法 wifi显示"已连接,不可上网"是怎么回事? 网吧如何快速下载gta5 复地哥德堡森林交通状况 长春站有有到复地哥德堡森林二期的公交车吗 复地哥德堡森林的交通状况 ...侠盗猎车手罪恶都市下载(苹果怎么下载侠盗飞车罪恶都市手机版... 关于篮球阻挡(专业人士请进,最好是专业裁判) 关于篮球打手犯规 专业人士进 开机显示americanmegatrends是什么意思? 亚硫酸都有哪些注意事项 亚硫酸安全信息 亚硫酸二甲酯安全信息 亚硫酸操作处置与储存 亚硫酸的法规信息 足球比赛中A 方带球被防守人员绊倒倒地,为了球权倒地故意手球犯规,该被...