积跬步至千里:QUIC 协议在蚂蚁集团落地之综述

谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议 在TCP里,如果一个segment传递丢失,那么后续segment乱序到达,也不会被应用层使用,只到丢失的segment重传成功为止,因此TCP实现的HTTP2的多路复用能力受到制约。QUIC解决了上面的歧义问题。与采用Sequence Number 标记不同的是,其使用的Packet Number标记严格单调递增,如果 Packet N 丢失了,那么重传时 Packet 的标识不会是 N,而是比 N 大的数字,比如N+M,这样发送方接收到确认消息时就能方便地知道 ACK 对应的是原始请求还是重传请求。 阅读详情

自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连接迁移”等诸多优势,并将成为下一代互联网协议:HTTP3.0 的底层传输协议,蚂蚁集团支付宝客户端团队与接入网关团队于 2018 年下半年开始在移动支付、海外加速等场景落地 QUIC。

本文是综述篇,介绍 QUIC 在蚂蚁的整体落地情况。之所以是综述,是因为 QUIC 协议过于复杂,如果对标已有的协议,QUIC 近似等于 HTTP + TLS +TCP,无法详细的毕其功于一役,因此我们通过综述的方式将落地的重点呈现给读者,主要介绍如下几个部分:

  • QUIC背景:简单全面的介绍下 QUIC 相关的背景知识

  • 方案选型设计:详细介绍蚂蚁的落地方案如何另辟蹊径、优雅的支撑 QUIC 的诸多特性,包括连接迁移等

  • 落地场景:介绍 QUIC 在蚂蚁的两个落地场景,包括:支付宝客户端链路以及海外加速链路

  • 几项关键技术:介绍落地 QUIC 过程中核心需要解决的问题,以及我们使用的方案,包括:“支持连接迁移”、“提升 0RTT 比例", "支持 UDP 无损升级”以及“客户端智能选路” 等

  • 几项关键的技术专利

本文也是 QUIC 协议介绍的第一篇,后续我们会把更多的落地细节、体验优化手段、性能优化手段、安全与高可用、QUIC 新技术等呈现给大家。

【注】蚂蚁 QUIC 开发团队包括:支付宝客户端团队的梅男、苍茫、述言,以及接入网关的伯琴、子荃、毅丝。

QUIC 背景介绍

鉴于读者的背景可能不同,在开始本文之前,我们先简单介绍下 QUIC 相关的背景知识,如果您对这个协议的更多设计细节感兴趣,可以参见相关 Draft:https://datatracker.ietf.org/wg/quic/documents/

一、QUIC 是什么?

简单来说,QUIC (Quick UDP Internet Connections) 是一种基于 UDP 封装的安全  可靠传输协议,他的目标是取代 TCP 并自包含 TLS 成为标准的安全传输协议。下图是 QUIC 在协议栈中的位置,基于 QUIC 承载的 HTTP 协议进一步被标准化为 HTTP3.0。

二、为什么是 QUIC ?

在 QUIC 出现之前,TCP 承载了 90% 多的互联网流量,似乎也没什么问题,那又为何会出现革命者 QUIC 呢?这主要是因为发展了几十年的 TCP 面临 “协议僵化问题”,表现在几方面:

  1. 网络设备支持 TCP 时的僵化,表现在:对于一些防火墙或者 NAT 等设备,如果 TCP 引入了新的特性,比如增加了某些 TCP OPTION 等,可能会被认为是攻击而丢包,导致新特性在老的网络设备上无法工作。

  2. 网络操作系统升级困难导致的 TCP 僵化,一些 TCP 的特性无法快速的被演进。

  3. 除此之外,当应用层协议优化到 TLS1.3、 HTTP2.0 后, 传输层的优化也提上了议程,QUIC 在 TCP 基础上,取其精华去其糟粕具有如下的硬核优势:

三、QUIC 生态圈发展简史

下图是 QUIC 从创建到现在为止的一些比较重要的时间节点,2021 年,QUIC V1 即将成为 RFC,结束百花齐放的态势。

介绍完 QUIC 相关背景,之后我们来介绍蚂蚁的整个落地的内容,这里为了便于阐述,我们用蚂蚁 QUIC 的 一、二、三、四 来进行概括总结,即 “一套落地框架”、“两个落地场景”、“三篇创新专利保护”、“四项关键技术”。

一套落地框架

蚂蚁的接入网关是基于多进程的 NGINX 开发的 (内部称为 Spanner,协议卸载的扳手),而 UDP 在多进程编程模型上存在诸多挑战,典型的像无损升级等。为了设计一套完备的框架,我们在落地前充分考虑了服务端在云上部署上的方便性、扩展性、以及性能问题,设计了如下的落地框架以支撑不同的落地场景:

在这套框架中,包括如下两个组件:

  1. QUIC LB 组件:基于 NGINX 4层 UDP Stream 模块开发,用来基于 QUIC DCID 中携带的服务端信息进行路由,以支持连接迁移。

  2. NGINX QUIC 服务器:开发了 NGINX_QUIC_MODULE,每个 Worker 监听两种类型的端口:

    (1)BASE PORT ,每个 Worker 使用的相同的端口号,以 Reuseport 的形式监听,并暴露给 QUIC LB,用以接收客户端过来的第一个 RTT 中的数据包,这类包的特点是 DCID 由客户端生成,没有路由信息。

    (2)Working PORT,每个 Worker 使用的不同的端口号,是真正的工作端口,用以接收第一个 RTT 之后的 QUIC 包,这类包的特定是 DCID 由服务端的进程生成携带有服务端的信息。

当前框架支持的能力包括如下:

  1. 在不用修改内核的情况下,完全在用户态支持 QUIC 的连接迁移,以及连接迁移时 CID 的 Update

  2. 在不用修改内核的情况下,完全在用户态支持 QUIC 的无损升级以及其他运维问题

  3. 支持真正意义上的 0RTT ,并可提升 0RTT 的比例

为何能支持上述能力,我们后面会展开叙述

两个落地场景

我们由近及远的两个落地场景如下:

场景一、支付宝移动端落地

如下为我们落地架构的示意图,支付宝手机客户端通过 QUIC 携带 HTTP 请求,通过 QUIC LB 等四层网关将请求转发到 Spanner (蚂蚁内部基于 NGINX 开发的 7 层网关),在 Spanner 上我们将 QUIC 请求 Proxy 成 TCP 请求,发送给业务网关(RS)。

具体的方案选型如下:

  • 支持的 QUIC 版本是 gQUIC Q46。

  • NGINX QUIC MODULE 支持 QUIC 的接入和 PROXY 成 TCP 的能力。

  • 支持包括移动支付、基金、蚂蚁森林在内的所有的 RPC 请求。

  • 当前选择 QUIC 链路的方式有两种 :

    1. Backup 模式,即在 TCP 链路无法使用的情况下,降级到 QUIC 链路。

    2. Smart 模式,即 TCP和 QUIC 竞速,在 TCP 表现力弱于 QUIC 的情况下,下次请求主动使用 QUIC 链路。

在此场景下,通过使用 QUIC 可以获得的红利包括:

  1. 在客户端连接发生迁移的时候,可以不断链继续服务

  2. 客户端在首次发起连接时,可以节省 TCP 三次握手的时间

  3. 对于弱网情况,QUIC 的传输控制可以带来传输性能提升

场景二、海外加速落地

蚂蚁集团从 2018 年开始自研了海外的动态加速平台 AGNA(Ant Global Network Accelerator)以替换第三方厂商的加速服务。AGNA 通过在海外部署接入点:Local Proxy(LP) 以及在国内部署接出点:Remote Proxy (RP)的方式,将用户的海外请求通过 LP 和 RP 的加速链路回源国内。如下图所示,我们将 QUIC 部署在 LP 和 RP 之间的链路。

在海外接入点上(LP),每一个 TCP 连接都被 Proxy 成 QUIC 上的一个 Stream 进行承载,在国内接出点上(RP), 每一个 QUIC Stream 又被 Proxy 成一个 TCP 连接,LP 和 RP 之间使用 QUIC 长连接。

在此场景下,通过使用 QUIC 可以获得的红利包括:

  1. 通过 QUIC 长连接的上的 Stream 承载 TCP 请求,避免每次的跨海建联。

  2. 对于跨海的网络,QUIC 的传输控制可以带来传输性能提升。

三篇关键专利

到目前为止,我们把落地过程中一些创新的技术点通过申请专利进行了保护,并积极在 IETF 进行标准化分享我们的研究成果,包括:

专利一

我们将落地场景 2 中,通过 QUIC Stream 进行四层代理的手段来进行海外回源的加速方法进行专利保护,提出:“一种基于 QUIC 协议代理的的链路加速方法”,目前此专利已经获得美国专利授权,专利号:CN110213241A。

专利二

将我们落地框架中的 QUIC LB 组件作为专利进行保护,提出:“一种无状态、一致性、分布式的 QUIC 负载均衡设备”,目前此专利还在受理中。由于通过 QUIC LB 可以很好的支持 QUIC 协议的连接迁移问题,所以目前 IETF QUIC WG 上有关于 QUIC LB 相关的草案,我们目前已经参与到 Draft 的讨论和制定中,后序相关的方案也会继续推广到云上产品。

专利三

将我们解决的 UDP 的无损升级方法进行专利保护,提出 “一种 QUIC 服务器无损升级方案”,目前此专利还在受理中。由于 UDP 无损升级问题是一个业界难题,当前有些手段需要在用户态进行跳转,性能损失较大,我们的方案可以在我们的落地框架中解决当前问题,关于这个方案的细节我们再后面的关键技术中进行介绍。

四项关键技术

在整个的落地中,我们设计的方案围绕解决几个核心问题展开,形成了四项关键技术,分别如下

技术点1.优雅的支持连接迁移能力
先说 连接迁移面临的问题 ,上文有提到,QUIC 有一项比较重要的功能是支持连接迁移。这里的连接迁移是指:如果客户端在长连接保持的情况下切换网络,比如从 4G 切换到 Wifi , 或者因为 NAT Rebinding 导致五元组发生变化,QUIC 依然可以在新的五元组上继续进行连接状态。QUIC 之所以能支持连接迁移,一个原因是 QUIC 底层是基于无连接的 UDP,另一个重要原因是因为 QUIC 使用唯一的 CID 来标识一个连接,而不是五元组。

如下图所示,是 QUIC 支持连接的一个示意图,当客户端出口地址从 A 切换成 B 的时候,因为 CID 保持不变,所以在 QUIC 服务器上,依然可以查询到对应的 Session 状态。

然而,理论很丰满,落地却很艰难,在端到端的落地过程中,因为引入了负载均衡设备,会导致在连接迁移时,所有依赖五元组 Hash 做转发或者关联 Session 的机制失效。以 LVS 为例,连接迁移后, LVS 依靠五元组寻址会导致寻址的服务器存在不一致。即便 LVS 寻址正确,当报文到达服务器时,内核根据五元组关联进程,依然会寻址出错。同时,IETF Draft 要求,连接迁移时 CID 需要更新掉,这就为仅依靠 CID 来转发的计划同样变的不可行。

再说 我们的解决方法,为了解决此问题,我们设计了开篇介绍的落地框架,这里我们将方案做一些简化和抽象,整体思路如下图所示:
  1. 在四层负载均衡上,我们设计了 QUIC LoadBalancer 的机制:

    1. 我们在 QUIC 的 CID 中扩展了一些字段(ServerInfo)用来关联 QUIC Server 的 IP 和 Working Port 信息。

    2. 在发生连接迁移的时候,QUIC LoadBalancer 可以依赖 CID 中的 ServerInfo 进行路由,避免依赖五元组关联 Session 导致的问题。

    3. 在 CID 需要 Update 的时候,NewCID 中的 ServerInfo 保留不变,这样就避免在 CID 发生 Update 时,仅依赖 CID Hash 挑选后端导致的寻址不一致问题。

  1. 在 QUIC 服务器多进程工作模式上,我们突破了 NGINX 固有的多 Worker 监听在相同端口上的桎梏,设计了多端口监听的机制,每个 Worker 在工作端口上进行隔离,并将端口的信息携带在对 First Initial Packet 的回包的 CID 中,这样代理的好处是:

    1. 无论是否连接迁移,QUIC LB 都可以根据 ServerInfo,将报文转发到正确的进程。

    2. 而业界普遍的方案是修改内核,将 Reuse port 机制改为 Reuse CID 机制,即内核根据 CID 挑选进程。即便后面可以通过 ebpf 等手段支持,但我们认为这种修改内核的机制对底层过于依赖,不利于方案的大规模部署和运维,尤其在公有云上。

    3. 使用独立端口,也有利于多进程模式下,UDP 无损升级问题的解决,这个我们在技术点 3 中介绍。

技术点2.提升 0RTT 握手比例

这里先 介绍 QUIC 0RTT 原理。前文我们介绍过, QUIC 支持传输层握手和安全加密层握手都在一个 0RTT 内完成。TLS1.3 本身就支持加密层握手的 0RTT,所以不足为奇。而 QUIC 如何实现传输层握手支持 0RTT 呢?我们先看下传输层握手的目的,即:服务端校验客户端是真正想握手的客户端,地址不存在欺骗,从而避免伪造源地址攻击。在 TCP 中,服务端依赖三次握手的最后一个 ACK 来校验客户端是真正的客户端,即只有真正的客户端才会收到 Sever 的 syn_ack 并回复。

QUIC 同样需要对握手的源地址做校验,否则便会存在 UDP 本身的 DDOS 问题,那 QUIC 是如何实现的?依赖 STK(Source Address Token) 机制。这里我们先声明下,跟 TLS 类似,QUIC 的 0RTT 握手,是建立在已经同一个服务器建立过连接的基础上,所以如果是纯的第一次连接,仍然需要一个 RTT 来获取这个 STK。如下图所示,我们介绍下这个原理:

  1. 类似于 Session Ticket 原理,Server 会将客户端的地址和当前的 Timestamp 通过自己的 KEY 加密生成 STK。

  2. Client 下次握手的时候,将 STK 携带过来,由于 STK 无法篡改,所以 Server 通过自己的 KEY 解密,如果解出来的地址和客户端此次握手的地址一致,且时间在有效期内,则表示客户端可信,便可以建立连接。

  3. 由于客户端第一次握手的时候,没有这个 STK,所以服务度会回复 REJ 这次握手的信息,并携带 STK。

    理论上说,只要客户端缓存了这个 STK,下次握手的时候带过来,服务端便可以直接校验通过,即实现传输层的 0RTT。但是真实的场景却存在如下两个问题:

    1. 因为 STK 是服务端加密的,所以如果下次这个客户端路由到别的服务器上了,则这个服务器也需要可以识别出来。

    2. STK 中 encode 的是上一次客户端的地址,如果下一次客户端携带的地址发生了变化,则同样会导致校验失败。此现象在移动端发生的概率非常大,尤其是 IPV6 场景下,客户端的出口地址会经常发生变化。

    再介绍下我们的解决方法。第一个问题比较好解,我们只要保证集群内的机器生成 STK 的秘钥一致即可。第二个问题,我们的解题思路是:
    1. 我们在 STK 中扩展了一个 Client ID, 这个 Clinet ID 是客户端通过无线保镖黑盒生成并全局唯一不变的,类似于一个设备的 SIMID,客户端通过加密的 Trasnport Parameter 传递给服务端,服务端在 STK 中包含这个 ID。

    2. 如果因为 Client IP 发生变化导致校验 STK 校验失败,便会去校验 Client ID,因为 ID 对于一个 Client 是永远不变的,所以可以校验成功,当然前提是,这个客户端是真实的。为了防止 Client ID 的泄露等,我们会选择性对 Client ID 校验能力做限流保护。

    技术点3. 支持 QUIC 无损升级
    我们知道 UDP 无损升级是业界难题。无损升级是指在 reload 或者更新二进制时,老的进程可以处理完存量连接上的数据后优雅退出。以 NGINX 为例,这里先介绍下 TCP 是如何处理无损升级的,主要是如下的两个步骤:
    1. 老进程先关闭 listening socket,待存量连接请求都结束后,再关闭连接套接字

    2. 新进程从老进程继承 listening socket , 开始 accept 新的请求

    而 UDP 无法做到无损升级是因为 UDP 只有一个 listening socket 没有类似 TCP 的连接套接字,所有的收发数据包都在这个 socket 上,导致下面的热升级步骤会存在问题:

    1. 在热升级的时候,old process fork 出 new process 后,new process 会继承 listening socket 并开始 recv msg。

    2. 而 old process 此时如果关闭 listenging socket, 则在途的数据包便无法接收,达不到优雅退出的目的。

    3. 而如果继续监听,则新老进程都会同时收取新连接上的报文,导致老进程无法退出。

    这里介绍下相关的解决方法。针对此问题,业界有一些方法,比如:在数据包中携带进程号,当数据包收发错乱后,在新老进程之间做一次转发。考虑到接入层上的性能等原因,我们不希望数据再做一次跳转。结合我们的落地架构,我们设计了如下的 基于多端口轮转的无损升级方案,简单来说,我们让新老进程监听在不同的端口组并携带在 CID 中,这样 QUIC LB 就可以根据端口转发到新老进程。为了便于运维,我们采用端口轮转的方式,新老进程会在 reload N 次之后,重新开始之前选中的端口。如下图所示:
    1. 无损升级期间,老进程的 Baseport 端口关闭,这样不会再接受 first intial packet, 类似于关闭了 tcp 的 listening socket。

    2. 老进程的工作端口,继续工作,用来接收当前进程上残余的流量。

    3. 新进程的 Baseport 开始工作,用来接收 first initial packet, 开启新的连接,类似于开启了 tcp 的 listening socket。

    4. 新进程的 working port = (I + 1) mod N,  N 是指同时支持新老进程的状态的次数,例如 N = 4, 表示可以同时 reload 四次,四种 Old, New1, New2, New3 四种状态同时并存,I 是上一个进程工作的端口号,这里 + 1 是因为只有一个 worker, 如果 worker 数有 M 个,则加 M。

    5. 建好的连接便被 Load Balancer 转移到新进程的监听端口的 Working Port 上。

    技术点4.客户端智能选路

    尽管落地 QUIC 的愿望是好的,但是新事物的发展并不是一帆风顺的。由于 QUIC 是基于 UDP 的,而 UDP 相比于 TCP 在运营商的支持上并非友好,表现在:

    1. 在带宽紧张的时候,UDP 会经常被限流。

    2. 一些防火墙对于 UDP 包会直接 Drop。

    3. NAT 网关针对 UDP 的 Session 存活时间也较短。

    同时,根据观察发现,不同的手机厂商对于 UDP 的支持能力也不同,所以在落地过程中,如果盲目的将所有流量完全切为 QUIC 可能会导致一些难以预料的结果。为此,我们在客户端上,设计了开篇介绍的 TCP 和 QUIC 相互 Backup 的链路,如下图所示,我们实时探测 TCP 链路和 QUIC 链路的 RTT、丢包率、请求完成时间、错误率等指标情况,并根据一定的量化方法对两种链路进行打分,根据评分高低,决定选择走哪种链路,从而避免寻址只走一条链路导致的问题。

    做个总结

    本文主要综述性的介绍了 QUIC 在蚂蚁的落地方案、场景以及一些关键技术。关键技术上,主要介绍了我们如何通过创造性的提出 QUIC LB 组件、以及多端口监听的机制来优雅的支持 QUIC 的连接迁移机制、QUIC 服务端的无损升级等,依赖这套方案我们的接入网关不需要像业界一样依赖底层内核的改动,这极大的方便了我们方案的部署,尤其在公有云场景下。除了连接迁移以外,我们还提出了 0RTT 建联提升方案、客户端智能选路方案,以最大化 QUIC 在移动端上的收益。截止当前,QUIC 已经在支付宝移动端以及全球加速链路两个场景上平稳运行,并带来了较好的业务收益。

    未来规划

    两年来,我们主要以社区的 gQuic 为基础,充分发挥 QUIC 的协议优势,并结合蚂蚁的业务特征以最大化移动端收益为目标,创造性的提出了一些解决方案,并积极向社区和 IETF 进行推广。在未来,随着蚂蚁在更多业务上的开展和探索以及HTTP3.0/QUIC 即将成为标准,我们会主要围绕以下几个方向继续深挖 QUIC 的价值:

    1. 我们将利用 QUIC 在应用层实现的优势,设计一套统一的具备自适应业务类型和网络类型的 QUIC 传输控制框架,对不同类型的业务和网络类型,做传输上的调优,以优化业务的网络传输体验。

    2. 将 gQUIC 切换成 IETF QUIC,推进标准的 HTTP3.0 在蚂蚁的进一步落地。

    3. 将蚂蚁的 QUIC LB 技术点向 IETF QUIC LB 进行推进,并最终演变为标准的 QUIC LB。

    4. 探索并落地 MPQUIC(多路径 QUIC) 技术,最大化在移动端的收益。

    5. 继续 QUIC 的性能优化工作,使用 UDP GSO, eBPF,io_uring 等内核技术。

    6. 探索 QUIC 在内网承载东西向流量的机会。

     延伸阅读

    QUIC(Quick UDP Internet Connection)协议概述 QUIC协议的概述 阅读详情

    相关推荐

    快速UDP网络连接之QUIC协议介绍

    QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。由于原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。新的传输层协议通常会经过严格的设计,分析和评估可重复的结果,证明候选协议对 现有协议的正确性和公平性,开发新的传输层协议和它在操作系统进行广泛部署之间 通常需要花费数年的时间。

    琅嬛福地 4649

    QUIC协议原理详解

    QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。1.1 什么是QUIC。.........

    Lce的专栏 1万+

    kaggle社区LLM Classification Finetuning

    预测用户在一个由大型语言模型(LLMs)驱动的聊天机器人之间的正面交锋中会偏好哪些回应。获得来自聊天机器人竞技场(Chatbot Arena)的对话数据集,其中不同的LLMs对用户的提示生成答案。通过开发一个胜出的机器学习模型,帮助改进聊天机器人与人类的互动方式,并确保它们更好地符合人类的偏好。实际上是进行一个序列的分类。

    m0_73542617的博客 1934

    QUIC详解

    1. QUIC是什么 QUIC(全称Quick UDP Internet Connections)是谷歌公司制定的一种基于 UDP 协议的低时延互联网传输协议,它提供了多项改进,旨在加速HTTP传输并使其更加安全,目标是想最终取代TCP和TLS协议。 可以用一个公式大致概括如下: TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API。 ...

    Arlingtonroad的博客 1万+

    AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

    本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

    QINJIEEE的博客 1107

    基于4G cat.1的低功耗车牌识别摄像头模组介绍

    在消费类摄像头领域,4G低功耗相机已经非常普遍,在可视门锁,婴儿看护,户外监控等领域都获得了很好的应用.但是在工业领域,低功耗相机的应用还不是那么广泛.这里要介绍一款基于4G cat.1的低功耗车牌识别摄像头模组,在待机状态只有MCU和毫米波雷达以1Hz的频率工作,功耗低至500uA,并可以通过4G模块远程唤醒模组.

    bindaz的专栏 1651

    「 直播预告 」走进下一代互联网协议:HTTP3.0

    他来了他来了,他带着 HTTP3.0 走来了!不知道大家对于我们的伯琴老师还有没有印象?孔令涛(花名:伯琴),蚂蚁集团技术专家,主要从事四七层协议优化,网关开发等工作。大家是不是脑海瞬间对...

    金融级分布式架构 168

    Revit获取族预览图

    最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

    weixin_44631419的博客 1757

    QUIC 协议在蚂蚁落地综述

    积跬步至千里:QUIC 协议在蚂蚁集团落地之综述自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。鉴于 QUIC 具备“0RTT 建联”、“支持连...

    梦醒人间 1130

    改进后的yolov8导出进行部署到rk3588上时,导出为onnx格式报错aten::fft_fft2算子不支持导出...如何解决?

    🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

    **My Coding Family** 1801

    在 FlexSim 中建 AGV 小车模型时,如果设定“每次充电需要 2 小时才能充满”,应该如何配置 AGV 的充电功能?

    🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

    **My Coding Family** 883

    「 直播倒计时 」走进下一代互联网协议:HTTP/3

    刚刚过去的七夕节,不知道是不是一只“孤寡”青蛙陪你度过的?如果是那也太可怜了……不用伤心,让我们跟着伯琴老师走进下一代互联网协议:HTTP/3中去忘掉“孤寡孤寡”!不知道大家对于我们的伯...

    金融级分布式架构 149

    Unity 多渠道分包工程化实践(大白话版):从“手工打包”到“一键出 30 个包还不翻车”

    Unity多渠道分包工程化实践摘要(150字) 本文系统探讨Unity多渠道包自动化构建方案,提出基于BuildPipeline的工程化体系。核心包括:1)通过ScriptableObject/JSON管理渠道参数(包名、签名、SDK配置等);2)结合命令行与环境变量实现CI集成;3)开发通用Builder脚本支持资源动态替换与参数注入。重点分享了Android渠道包的签名配置、图标自动替换、宏定义注入等关键技术实现,并给出Jenkins流水线集成案例。该方案可支持日均数百个渠道包的自动化构建,显著提升分发

    本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 278

    喜报!SOFAStack 社区荣获2021 年度云原生技术创新解决方案/产品奖

    “5月26日,由中国信息通信研究院主办,云计算开源产业联盟、云原生产业联盟、云原生计算基金会(CNCF)支持的“云原生产业大会”在北京成功举办。”在 2021 云原生产业大会上,SO...

    金融级分布式架构 490

    RT-DETR-R18 的轻量化 Trick:剪枝与量化在模型中的应用

    RT-DETR-R18轻量化技术通过结构化剪枝、混合精度量化和知识蒸馏的组合优化,实现了显著模型压缩效果。摘要如下: RT-DETR-R18模型通过创新轻量化技术组合,在保持46.2% mAP精度的前提下,将模型大小压缩至2.1MB(压缩率78%),计算量降至3.2 GFLOPs(减少78.2%),实现移动端28ms实时推理(加速37.8%)。核心技术包括:1)渐进式结构化剪枝系统,通过L1范数重要性评估和动态剪枝调度;2)混合精度量化策略,对关键层保留FP16精度;3)教师-学生知识蒸馏框架保持模型表达能

    走向CTO的路上... 1196

    数学建模模型总结

    这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

    2021-05月报

    0、产品设计 1、基础知识(编程语言、计算机理论基础) 深入理解Java的Lambda原理 Kafka原理篇:图解kakfa架构原理 有了HTTP,为什么还要RPC? 长连接网关技术专题 (四):爱奇艺 WebSocket 实时推送网关技术实践 从重复到重用 10问10答:你真的了解线程池吗? 2、流媒体相关技术 WebRTC 噪声抑制模块揭秘 实时音视频技术的演进与应用 流媒体的未来——视频技术如何演变 玩转

    天空24的专栏 304

    LinePhone3.2.7(android端最新版本) sip客户端

    SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

    SOFA Weekly | SOFARegistry 发布 V6-alpha 代码,QA 整理

    SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)是...

    金融级分布式架构 222

    ssm框架搭建

    这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

    为什么说 QUIC 协议是现代化网络通信的未来之路及如何实现QUIC服务器

    QUIC协议你知道多少,一篇文章告诉你答案。

    小曾同学的博客 2775

    QUIC 协议详解

    本文尽量用通俗易懂的语言介绍了 QUIC 协议实现原理,目的是让大家对 QUIC 有一个基本的了解,当然,这只是 QUIC 协议的冰山一角,更详细具体的内部实现还需要深入研究标准文档和源码,如果文中有描述不对的地方,欢迎批评指正,多多交流。客户端发送的 5 个数据包(56789)服务器都收到了,并且回应了 5 个 ACK,但是第 5 个数据包的 ACK 丢失了,导致客户端的发送窗口无法向前移动,也就无法发送新的数据,这就是 TCP 层的队头阻塞问题。那拥塞窗口的大小是如何计算的?

    优秀技术文章收录 5019

    QUIC详解(基于UDP的低延时网络传输层协议)

    一、QUIC 协议概述 Quic 全称 quick udp internet connection [1],“快速 UDP 互联网连接”,(和英文 quick 谐音,简称“快”)是由 Google 提出的使用 udp 进行多路并发传输的协议。 Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势: 减少了 TCP 三次握手及 TLS 握手时间; 改进的拥塞控制; 避免队头阻...

    恬静释然的博客 9281

    QUIC的优势与缺陷

    被寄予厚望的下一代互联网传输协议,QUIC究竟有哪些优点呢? 总结如下:多路复用:QUIC升华了HTTP/2中的多路复用技术,实现了基于互相独立的多流(多通道)数据传输,从根本上解决了TCP存在的队头阻塞问题。快速握手:即使不使用TLS,TCP建连过程也至少需要经过三次握手。而QUIC融合了握手和密钥协商交换的过程,从而实现了“初次光临1-RTT回头客0-RTT”的建连速度,大大提高了握手效率,这对于短连接频繁或者时延较高的场景非常有用精准的RTT计算:TCP由于受到“重传报文仍然使用原始报文的序列号(se

    H3C的博客 5364

    QUIC协议

    本文尽量用通俗易懂的语言介绍了 QUIC 协议实现原理,目的是让大家对 QUIC 有一个基本的了解,当然,这只是 QUIC 协议的冰山一角,更详细具体的内部实现还需要深入研究标准文档和源码,如果文中有描述不对的地方,欢迎批评指正,多多交流。客户端发送的 5 个数据包(56789)服务器都收到了,并且回应了 5 个 ACK,但是第 5 个数据包的 ACK 丢失了,导致客户端的发送窗口无法向前移动,也就无法发送新的数据,这就是 TCP 层的队头阻塞问题。那拥塞窗口的大小是如何计算的?

    ducanwang的博客 2340

    QUIC协议连接原理和特性

    QUIC全称 Quick UDP Internet Connection(快速UDP互联网连接),是由Google提出的使用UDP协议进行多路并发传输的协议。目的是保证可靠性的同时降低网络延迟。QUIC相比现在广泛应用的HTTP/2.x + TCP + TLS协议主要有这些优势:减少了TCP三次握手及TLS握手时间、改进的拥塞控制、避免HOL(队头阻塞)的多路复用、连接迁移、前向冗余纠错。

    you_you_lu的博客 3192

    传输层协议之QUIC

    QUIC(Quick UDP Internet Connections)是一种由Google设计和推动的传输层协议,旨在提供更快、更安全、更可靠的互联网连接。QUIC基于UDP协议,相较于传统的基于TCP的协议,具有更低的连接建立时延、更好的多路复用能力、内置的安全性和更好的拥塞控制等特点。

    qq_42241500的博客 1876

    QUIC:革新网络传输的新一代协议

    QUIC的出现标志着网络协议领域的一次重大突破。它不仅融合了TCP、TLS和HTTP/2的优点,还通过创新的设计解决了这些传统协议的诸多问题。本文将深入探讨QUIC协议的方方面面,包括其起源、核心特性、工作原理、优势、面临的挑战,以及在现实世界中的应用和未来发展前景。

    nihaio25的博客 3280

    【亲测免费】 探索下一代TCP:Java实现的QUIC协议库——Kwik

    探索下一代TCP:Java实现的QUIC协议库——Kwik 项目简介 Kwik 是一个完全由Java编写的QUIC(Quick UDP Internet Connections)协议实现。作为一个快速、安全且高效的传输层协议,QUIC是HTTP/3的基础,并被广泛视为TCP的升级版。Kwik起初仅作为客户端库存在,但自2021年5月起,它已支持客户端和服务器双重角色。 项目技术分析 QUIC的优...

    gitblog_00056的博客 1445
    上一篇: 金融级能力成核心竞争力,服务网格驱动企业创新
    下一篇: 【直播预约】下一代机密计算即将到来:性能比肩普通应用
    SOFAStack
    博客等级 码龄7年 747粉丝 389原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值