3

快手自研 kQUIC 高性能服务器,集群 QPS 破千万

 3 years ago
source link: https://www.infoq.cn/article/HcU6S4h1yBxJXq7fixP5
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

近日,快手自研高性能服务器 kQUIC 已全面上线,集群峰值 QPS 突破千万。kQUIC 是快手结合自身业务特点,自研打造的支持 QUIC/HTTP/HTTPS 多协议同层接入的高性能服务器,在短视频场景下针对行业痛点做了系列优化,未来 InfoQ 记者还将就此话题进行深入采访,敬请关注。

据了解,kQUIC 自 19 年上半年开始研发,年底灰度上线,20 年 6 月峰值 QPS 突破千万,历时一年有余。kQUIC 针对性地对数据压缩、网络传输拥塞控制等进行了优化,传输耗时平均降低 10% 以上,服务端处理性能提升了 50%。

QUIC(Quick UDP Internet Connections)协议是谷歌制定发布的基于 UDP 的新一代互联网传输协定,下一代 HTTP/3 协议标准也是从 QUIC 演进而来,国内外众多互联网企业均有研究和使用实践。

QUIC 相比 HTTP(s) 有几大优势:

  • 首先,QUIC 在应用层实现了基于 UDP 的可靠传输,能够在使用多路复用机制的同时避免 TCP 的队首阻塞问题;
  • 其次,QUIC 改进了握手机制,大部分场景下可以 0-RTT 建立安全链接进行数据加密发送;
  • QUIC 还同时设计了连接迁移的新特性,可以保证在用户的网络地址发生变化时,比如 WIFI 和 4G 切换,业务请求依然能够被继续处理,不需要重新发起请求;
  • 此外,QUIC 的传输控制机制是在应用层处理的,相比 TCP 在内核中处理的方式更加灵活、更方便贴近业务场景做自定义优化,比如可以应用更先进的算法进行双端加速。

目前业界已有一些 QUIC 协议的通用开源解决方案,但对快手所处行业独特的短视频 + 直播业务的特性而言,都存在一定的短板。为此,快手选择了自研,对 QUIC 协议栈进行大量适配改造以满足业务诉求和用户体验。

自研内核、算法、网络库和服务端架构

下图为服务端方案整体架构,从 Nginx 内核集成 QUIC 协议栈,实现多协议同层接入,到 Linux 内核优化 UDP 报文管理,实现性能提升。

ZvQR3au.png!web

自研升级 Nginx 内核,支持多协议接入:目前,业界普遍大规模使用了 Nginx 作为 7 层的接入服务器,但 Nginx 尚不支持 QUIC 协议。快手自研升级 Nginx 内核,在 Nginx 内核里嵌入了 QUIC 协议栈,完成了 Nginx 和 QUIC 的有机融合,不管是 HTTP/HTTPS 还是 QUIC,都能使用 Nginx 原生的所有处理逻辑,保留全部业务逻辑处理功能的同时可以灵活升级 Nginx 和 Chromium 版本,并进行了一系列的针对性优化,性能提升了 50%。

无损的配置热更新:Nginx 的配置热更新机制不能支持 UDP 业务的配置无损更新,为此调研了改造应用层和改造内核两种实现路径,最终实现了基于内核 session 映射表的配置无损热更新机制。相比在应用层改造 Nginx 的方案而言,本方案既不需要改造 Nginx 的 UDP 收发机制,又充分保留了在 UDP socket 上使用 sendmmsg 和 gso 的能力,可以减少发送 UDP 报文的开销,提升性能。

自研全新网络拥塞控制算法:网络拥塞控制算法直接影响着网络传输的性能,与用户请求的成功率、响应时间等有非常大的关系。业界默认采用的 cubic、bbr 等算法,在大规模用户与复杂的网络环境面前,存在很多问题。快手设计了一套全新的拥塞控制算法 IA2C,替换默认算法,在弱网环境下,提升明显。

统一的客户端网络库:对 QUIC 协议的支持是需要客户端和服务端统一设计的,很多优化也需要双端配合,快手客户端网络库的设计也采用了新的办法。区别于一般 APP 使用开源网络库 OKHTTP 和 AFNetwork,无法支持跨平台的做法,快手网络库在设计之初就把跨平台作为一个重要的目标,完全采用 C++ 编写,不仅为快手主站的双端提供统一的网络优化解决方案,还通过中台输出统一了各个新业务的网络接入层,为快手系产品持续全面的网络优化提供了有力保障。

接入层统一单层架构和稳定保障:快手最早采用了 QUIC 代理和应用网关分离的多层架构,存在运维成本、资源成本以及稳定性成本增加的问题,为此技术团队对架构做了大幅简化,采用 QUIC/HTTP/HTTPS 同层接入方案,同时特别制定了从压测到实验、从线上小流量灰度再到线上逐步全量加容灾集群建设的方案。在降低各项成本的同时,充分保证了系统稳定性,实现了线上用户千万量级请求的稳定接入。

数据驱动的迭代放量策略:快手的相关服务上线放量需要有严格的数据指标衡量,快手技术团队构建了完善的服务端、客户端性能指标体系和监控看板,设计了科学的 A/B 测试方案,配合专业的实验室测试方法,可以科学地论证架构改进和算法收益,制定放量策略,支持项目快速的迭代优化和稳健上线。在整个大规模上线过程中,没有出现一次影响用户的事故。

快手 kQUIC 服务端技术负责人沈坤表示,kQUIC 是快手在探索先进的标准协议并进行大规模优化过程中取得的重要成果,目前已经取得了良好的业务收益,客户端实验反馈显示,QoE 和 QoS 指标都取得了显著收益,未来在适当时机将对行业开源,为行业提供丰富的应用实践经验参考,支持 QUIC 协议在全球的推广和优化。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK