阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

网络开发优化:请求合并

282次阅读
没有评论

共计 1731 个字符,预计需要花费 5 分钟才能阅读完成。

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

今天,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: /getToken
response: 
{"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。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1731字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7797270
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...