抛弃 TCP 和 QUIC 的 HTTP

news2024/11/18 21:52:49

下班路上发了一则朋友圈:
在这里插入图片描述

周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享,基本重复了此前那篇 It’s Time To Rep… 的格调,花了一多半时间喷 TCP…

Ousterhout 关于 Homa 和 TCP 之间的论争和论证,诸多反复回执,非常精彩:Is It Time to Replace TCP in Data Centers? && Response to Ivan Pepelnjak’s Blog Post && …

但本文我要说点和 Homa 有关又无关的东西,关于 HTTP 的。我觉得 HTTP 非常适合用 Message-Based protocol 传输。从 RFC2068 1.4 说起:

HTTP only presumes a reliable transport; any protocol that provides such guarantees can be used;

紧接着下面一段多余了:

In HTTP/1.0, most implementations used a new connection for each request/response exchange. In HTTP/1.1, a connection may be used for one or more request/response exchanges, although connections may be closed for a variety of reasons.

上面这段话的 connection 关键词深入人心,让人觉得理所当然。

HTTP 是个无状态协议,天然应被 Message-Based transport 承载,非常自然且合理,why not?所以根本不需要 QUIC,甚至不再需要 TCP。

Homa 号称 RPC-Oriented,但也可以 HTTP-Oriented,每一对 Request/Response 类似一次 RPC。不限于 Homa,任何一个 Message-Based transport 承载 HTTP 都是高尚的。

采用 Message 承载 HTTP,其生命周期和 HTTP 的无状态对应,限制在一次 Request/Response,也就再也无需 TCP 连接管理了。

传输层为每次 Request/Response 生成单机唯一的 Message ID,将 Request/Response 映射到 Message,将 Message 映射到 packet 完成 packetization,以 Message ID 区分,即可并行多个 Request/Response。走这条路线,可直接消除 TCP 的问题,也就没了 QUIC 存在的必要。

HTTP/1.0 多条 TCP 连接并行处理多个 Request/Response,考虑 TCP 连接开销不可扩展,HTTP/1.1 允许多个 Request/Response 复用同一条 TCP 连接,但连接复用引入了 HTTP HoL blocking,比如短 Response 跟在长 Response 后面,为解决 HTTP HoL blocking,HTTP/2 引入二进制分帧多路复用,但引入了 TCP HoL blocking,为了解决 TCP HoL blocking,搞出了 QUIC。

若一开始使用 Message 模式并行处理 Request/Response,问题消失,就没有创建多条 TCP 的必要,自然就不会遭遇连接开销过大问题,接下来的一连串问题都不存在。遗憾的是,HTTP/1.0 一开始采用了 TCP。

这一切的根源在于一开始用一个有状态的 byte stream 协议去承载一个无状态的 Message 交互,结果最终 QUIC 虽然 UDP-Based,却也成了 TCP-Like,造化弄人。

Message 承载 HTTP 可能让人觉得奇怪,可将 HTTP 换成 RPC 就变得很自然,明明一回事,这就是先入为主的力量。
随便就是两个问题,若 Response 有 2GB,Message 如何装得下,若 Response 只 1KB,丢了就没有足够的 packet 触发 fast retransmit。说到底还是在用 TCP 思维解决 Message 问题。

必须要明确,TCP fast retransmit 是大量报文一起发送时顺带的恩惠,不是必须的,如果 TCP 只发生 1 个报文,便不会触发 fast retransmit。至于 2GB 的 Response,虽然怎么看它都像一条流,但它其实还是 Message:
在这里插入图片描述

采用 Message 承载 HTTP 并不仅仅因为它解决了连接管理问题,更不是因为它看起来更合理,还有一个很重要的优势,Ousterhout 在分享 Homa 时也提到了,Message-Based 可以利用多核优势并行处理,提高计算资源利用率。

至于说 Message-Based 拥塞控制,今晚没时间写了,明天详细聊下 L4S。

好归好,但历史和现实的力量往往更强大。

HTTP 标准化前,只有 TCP 满足 “reliable” 需求,著名的 Web Server 全假设 HTTP 被 TCP 承载,浏览器根本没有动力和动机偏向 UDP,到 HTTP 标准化时,就有了 “most implementations used a new connection…” ,注意修饰词,most implementations,但实际上是 all implementations。

之前说过,若不是 Google 同时掌控 App Server 和 Chrome Browser,QUIC 同样很难演进,可即便是 QUIC,依然还是 TCP-Like,还是没能突破老路子。

TCP 的影响力渗透到了每一根汗毛,即使 Amazon SRD 也在 “纠正 TCP 的问题”,各个新的旧的 transport 都在被 TCP 牵绕,却几乎从来没能另辟蹊径解决根本核心的问题,也许这个问题和 TCP 根本就没关系,就像本文说的 HTTP。

任何一个新协议都要试图解决 TCP 的某个或某些问题而不是解决 TCP 上层逻辑真正的问题,这才是真正的问题。

以前就了解过 Homa,但只有听 Ousterhout 亲自讲的时候才会有仪式感,他不止一次提到 Message 如何如何比 byte stream 好,比如边界清晰,并行处理,负载均衡…但他也说了,Homa 是专治 DataCenter 的各种不服的,而不打算去卷公网… 可我 don’t think so. 我觉得 Message-Based protocol 可以更好承载 HTTP 在公网上传输(运营商友好性是问题,但这是后话),我觉得 HTTP 和 RPC 是一回事,无状态乒乓协议真不适合用 byte stream 承载,无论 TCP 还是 QUIC。我还是觉得现在几乎所有 transport 都被 TCP 影响了,任何一个新协议都要试图解决 TCP 的某个问题而不是解决 TCP 上层逻辑真正的问题。回头看,很多使用 TCP 的应用并不是非要用 TCP,而是没有别的选择借用 TCP,时间久了就成事实上的 TCP-Based。重新审视这些 “借用” 是高尚的。

浙江温州皮鞋湿,下雨进水不会胖。

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

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

相关文章

DAY15|102.二叉树的层序遍历。。。。等层序遍历的十道题

102.二叉树的层序遍历 代码随想录中的这题java和c不太一样 class Solution {public List<List<Integer>> resList new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {checkFun01(root,0);return …

NVIDIA- cuSPARSE(四)

cuSPARSE logging 日志记录机制&#xff0c; 可以通过在启动目标应用程序之前设置一下环境变量来启动cuSPARSE日志记录机制&#xff1a; CUSPARSE_LOG_LEVEL<level> level的取值&#xff1a; 0 Off 日志记录关闭1 Error只有报错会被记录2Trace启动CUDA内核的API调用将记…

网络应用程序设计(idea版)——实验四:会话管理

目录 实验预习报告 一、实验目的 二、实验原理 三、实验预习内容 实验报告 一、实验目的 二、实验要求 三、实验内容与步骤 实验预习报告 一、实验目的 1. 了解Web服务器对客户会话跟踪的各种方法&#xff1b; 2. 重点掌握使用HttpSession对象跟踪会话的方法&#…

OCAF——数据结构机制 Sample2

Email:dev_as@163.com Another example is the application for designing table lamps. The first label is allocated to the lamp unit. The tree definition of Lamp The root label cannot have brother labels. :[Root : (0)],根节点没有兄弟节点 Consequently, var…

ch5_4程序查询方式_程序中断方式_DMA方式

程序查询方式的流程 程序查询方式的接口电路 1. 程序查询方式 程序查询方式&#xff0c;需要通过cpu中的寄存器&#xff0c;完成数据从io设备到内存之间的传输。 1.1 程序查询方式流程 保存寄存器的内容&#xff1a; 如果寄存器中的数据是有用的&#xff0c;需要对寄存器中…

剑指offer:关于二叉树的汇总(c++)

1、重建二叉树&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建二叉树并返回。 2、树的…

可以顺畅使用不输Chatgpt的AI

一前言 虽然chatgpt不错&#xff0c;但是如果在咱们国家&#xff0c;想使用起来还是有一定的门槛的&#xff0c;又要科学上网&#xff0c;又要申请账号&#xff0c;申请账号还要申请虚拟手机号接收验证码&#xff0c;难道就没有适合普通人使用的AI了吗&#xff0c;直到我发现了…

数字化时代,企业如何做好数字营销

在数字化的影响下&#xff0c;市场竞争愈发激烈&#xff0c;产品和服务的研发生产也加快了节奏&#xff0c;各行业之间的边界也日渐模糊&#xff0c;跨领域、跨赛道也成为数字化转型企业的常态&#xff0c;就像那句话&#xff0c;打败你的不一定是对手&#xff0c;这就是数字化…

AI 时代,提示词便是生产力

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

AIGC技术周报|图灵测试不是AGI的智力标准;SegGPT:在上下文中分割一切;ChatGPT能玩好文字游戏吗?

AIGC通过借鉴现有的、人类创造的内容来快速完成内容创作。ChatGPT、Bard等AI聊天机器人以及DallE 2、Stable Diffusion等文生图模型都属于AIGC的典型案例。「AIGC技术周报」将为你带来最新的paper、博客等前瞻性研究。 牙科的未来&#xff1a;从多模态大型语言模型窥探 ChatGP…

Java基础教程之Object类是怎么回事?

前言 在前面的文章中&#xff0c;壹哥跟大家说过&#xff0c;Java是面向对象的编程语言&#xff0c;而在面向对象中&#xff0c;所有的Java类都有一个共同的祖先类&#xff0c;这就是Object。那么Object都有哪些特性呢&#xff1f;今天壹哥就简单跟大家分析一下。 -----------…

刷题记录|Day55● 392.判断子序列 ● 115.不同的子序列

● 392.判断子序列 题目描述 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"…

pure-admin九州权限系统地址简单读

分成页面权限(ex:权限管理page) & 标签节点权限(ex:下载按钮) 【九州地址娜娜手机&#x1d54d;找看看kwk3589提供】以下是范例&#xff1a; /*** admin &#xff1a; 管理员角色* common &#xff1a; 普通角色*/const permissionRouter {path: "/permission"…

C++之入门之缺省参数函数重载引用

文章目录前言一、缺省参数1.缺省参数的概念2.缺省函数的分类&#xff08;1&#xff09;全缺省参数&#xff08;2&#xff09;半缺省参数3.使用注意二、函数重载1.函数重载的概念3.函数重载的原理--名字修饰(name Mangling)三、引用1.引用的概念2.引用特性3.引用的使用前言 重新…

工地人员工装穿戴识别系统 opencv

工地人员工装穿戴识别系统通过pythonopencv网络模型AI视频智能分析技术&#xff0c;工地人员工装穿戴识别算法模型可对施工现场人员是否佩戴合规穿戴进行自动识别预警。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉处理开源软件库&…

堆来咯!!!

堆是什么&#xff1f; 是土堆吗&#xff1f; 那当然不是啦~ 堆是一种被看作完全二叉树的数组。 那么什么是完全二叉树呢&#xff1f; 如果二叉树中除去最后一层节点为满二叉树&#xff0c;且最后一层的结点依次从左到右分布&#xff0c;则此二叉树被称为完全二叉树。 堆的特…

开源自动化测试框架有哪些?怎么选择适合自己的

目录 前言 一、Selenium 二、Appium 三、Robot Framework 四、Cypress 五、TestCafe 六、Nightwatch.js 七、JUnit 八、Pytest 总结&#xff1a; 前言 开源自动化测试框架是现代软件开发和测试领域中不可或缺的一部分。它们使得测试人员能够快速、准确地执行测试用例…

Mysql(十) -- 常见问题处理

1. MySQL数据库cpu飙升的话你会如何分析 重点是定位问题。 使用top观察mysqld的cpu利用率 切换到常用的数据库使用show full processlist;查看会话观察是哪些sql消耗了资源&#xff0c;其中重点观察state指标定位到具体sql pidstat 定位到线程在PERFORMANCE_SCHEMA.THREADS中…

HuggingGPT强势来袭,LLM+专家模型,迈向更通用的AI

出品人&#xff1a;Towhee 技术团队 超级组合&#xff1a;HuggingFace ChatGPT HuggingGPT强势来袭。人类仿佛距离真正的AGI又更近了一步。 HuggingGPT是浙江大学与微软亚洲研究院的联手研究&#xff0c;发布之后迅速引发关注&#xff0c;已经开源。 它的使用非常简单&#x…

计算机时间旅行者:NTP如何帮助计算机在时间上保持同步?

应用场景&#xff1a; NTP&#xff08;网络时间协议&#xff09;是一种用于同步计算机时钟的协议&#xff0c;它可以让多台计算机在网络上保持同步的时间。因此&#xff0c;NTP可以应用于各种需要时间同步的应用程序中&#xff0c;例如&#xff1a; 计算机网络&#xff1a;在…