InfoQ|阿里淘系自研标准化协议库 XQUIC 首次公开:直播高峰期卡顿可降低 30%( 二 )
XQUIC 是什么、为什么选择自研 + 标准XQUIC 是阿里自研的 IETF QUIC 标准化实现 , 这个项目由淘系架构网关与基础网络团队发起和主导 , 当前有阿里云 CDN、达摩院 XG 实验室与 AIS 网络研究团队等多个团队参与其中 。
现今 QUIC 有多家开源实现 , 为什么选择标准协议 + 自研实现的道路?我们从 14 年开始关注 Google 在 QUIC 上的实践(手机淘宝在 16 年全面应用 HTTP/2) , 从 17 年底开始跟进并尝试在电商场景落地 GQUIC [4], 在 18 年底在手淘图片、短视频等场景落地 GQUIC 并拿到了一定的网络体验收益 。 然而在使用开源方案的过程中或多或少碰到了一些问题 , Google 的实现是所有开源实现中最为成熟优秀的 , 然而由于 Chromium 复杂的运行环境和 C++ 实现的缘故 , GQUIC 包大小在优化后仍然有 2.4M 左右 , 这使得我们在集成手淘时面临困难 。 在不影响互通性的前提下 , 我们进行了大量裁剪才勉强能够达到手淘集成的包大小要求 , 然而在版本升级的情况下难以持续迭代 。 其他的开源实现也有类似或其他的问题(例如依赖过多、无服务端实现、无稳定性保障等) 。 最终促使我们走上自研实现的道路 。
为什么要选择 IETF QUIC [5] 标准化草案的协议版本?过去我们也尝试过自研私有协议 , 在端到端都由内部控制的场景下 , 私有协议的确是很方便的 , 但私有协议方案很难走出去建立一个生态圈 / 或者与其他的应用生态圈结合(遵循相同的标准化协议实现互联互通);从阿里作为云厂商的角度 , 私有协议也很难与外部客户打通;同时由于 IETF 开放讨论的工作模式 , 协议在安全性、扩展性上会有更全面充分的考量 。
因此我们选择 IETF QUIC 标准化草案版本来落地 。 截止目前 , IETF 工作组草案已经演化到 draft-29 版本(2020.6.10 发布) , XQUIC 已经支持该版本 , 并能够与其他开源实现基于 draft-29 互通 。
XQUIC 整体架构和传输框架设计XQUIC 是 IETF QUIC 草案版本的一个 C 协议库实现 , 端到端的整体链路架构设计如下图所示 。 XQUIC 内部包含了 QUIC-Transport(传输层)、QUIC-TLS(加密层、与 TLS/1.3 对接)和 HTTP/3.0(应用层)的实现 。 在外部依赖方面 , TLS/1.3 依赖了开源 boringssl 或 openssl 实现(两者 XQUIC 都做了支持、可用编译选项控制) , 除此之外无其他外部依赖 。
本文插图
图 2. XQUIC 端到端架构设计和内部分层模块XQUIC 整体包大小在 900KB 左右(包含 boringssl 的情况下) , 对于客户端集成是较为轻量的(支持 Android/iOS) 。 服务端方面 , 由于阿里内部网关体系广泛使用 Tengine(Nginx 开源分支) , 我们开发了一个 ngx_xquic_module 用于适配 Tengine 服务端 。 协议的调度方面 , 由客户端网络库与调度服务 AMDC 配合完成 , 可以根据版本 / 地域 / 运营商 / 设备百分比进行协议调度 。
XQUIC 传输层内部流程设计如下图 , 可以看到 XQUIC 内部的读写事件主流程 。 考虑到跨平台兼容性 , UDP 收发接口由外部实现并注册回调接口 。 XQUIC 内部维护了每条连接的状态机、Stream 状态机 , 在 Stream 级别实现可靠传输(这也是根本上解决 TCP 头部阻塞的关键) , 并通过读事件通知的方式将数据投递给应用层 。 传输层 Stream 与应用层 HTTP/3 的 Request Stream 有一一映射关系 , 通过这样的方式解决 HTTP/2 over TCP 的头部阻塞问题 。
本文插图
图 3. XQUIC 读写事件主流程设计考虑到 IETF QUIC 传输层的设计可以独立剥离 , 并作为 TCP 的替代方案对接其他应用层协议 , XQUIC 内部实现同样基于这样的分层方式 , 并对外提供两套原生接口:HTTP/3 请求应答接口 和 传输层独立接口(类似 TCP) , 使得例如 RTMP、上传协议等可以较为轻松地接入 。
推荐阅读
- 阿里|阿里焦虑,饿了么推“百亿补贴”,外卖市场狼烟再起
- |BATJ罕见联手!一公司被百度京东腾讯阿里联合申诉,怎么了?
- 阿里巴巴|高水平的管理者都遵守的6条管理圣经,读懂这些,管理越来越顺
- 百度|百度网盘龟速下载?阿里进军网盘市场:不限速下载!
- 互联网|阿里CCO推“网购新人服务计划”提供直播教学服务
- 阿里巴巴|闲鱼开启“百日专项行动”,整治潜在擦边球商品
- 互联网|京东停用申通发货,阿里拒绝接入京东物流是“分手”主因?
- 京东|电商财报“三国杀”:拼多多用户年底超阿里?
- 广电|阿里、国网入股“新广电” 千亿级巨头呼之欲出
- 阿里|阿里“收网”?
