低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

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

2020 年 7 月 06 日

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

近日,快手自研高性能服务器 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 报文管理,实现性能提升。



自研升级 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 协议在全球的推广和优化。


2020 年 7 月 06 日 14:564942
用户头像
小智 前 InfoQ 主编

发布了 400 篇内容, 共 318.7 次阅读, 收获喜欢 1762 次。

关注

评论 6 条评论

发布
用户头像
单台服务器性能如何? 和tcp对比, 集群概念大小不知
2020 年 08 月 02 日 19:41
回复
用户头像
“性能提升了50%” 是指什么性能?nginx 的处理能力?
2020 年 07 月 08 日 11:02
回复
忽略此问题,文章开头提到了 50% 的服务端性能提升
2020 年 07 月 08 日 11:05
回复
用户头像
IA2C 算法只在弱网环境提升比较明显么?那网络良好的情况下与 BBR、Cubic 相比如何
2020 年 07 月 08 日 11:01
回复
准确讲应该是弱网下收益显著,网络良好时,收益不那么显著,但也有收益。毕竟网络非常好时,什么算法都能达到高吞吐 、低延迟的效果,优化空间本来就不大。优化更多的是为了提升网络不那么好的用户的体验。
2020 年 07 月 13 日 21:04
回复
用户头像
集群规模多大呢?
2020 年 07 月 07 日 11:43
回复
没有更多了
发现更多内容

盘点2020 | 百度AI的2020

百度大脑

盘点2020

字节4面斩下2-2Offer,完美收官!入职就是30K16薪

Java成神之路

Java 程序员 架构 面试 编程语言

怎么提升写代码的能力

阿里巴巴云原生

程序员 个人成长 方法论 云原生 自我思考

阿里面试必问题:Spring+MyBaits+微服务+Dubbo+Kakfa带解析

Java成神之路

Java 程序员 架构 面试 编程语言

Kubernetes安装篇(上):基于Minikube方式部署本地环境

xcbeyond

Kubernetes 安装 minikube 28天写作 Kubernetes从入门到精通

限量!腾讯高工用4部分讲清楚了Spring全家桶+微服务

996小迁

Java 架构 面试 springboot SpringCloud

中国工业的基础设施“重化工业”是怎么发展起来的

JiangX

供应链 工业 28天写作 制造

CopyOnWriteArrayList 读写分离,弱一致性

叫练

弱一致性 读写分离; Vector; fail-fast; fail-safe

年底跳槽挂了阿里和美团,却收获拼多多Java岗offer,分享三面总结

Java成神之路

Java 程序员 架构 面试 编程语言

安装Android系统 missing operating system

mengxn

android

首次公开!阿里技术团队编写的“大厂面试参考指南”v1.0版本

Crud的程序员

Java 程序员 架构

架构师训练营第八周作业

zamkai

SpringCloud 从入门到精通 12---Nacos配置中心

Felix

案例集锦|科技赋能,华为云GaussDB助千行百业数字化转型

华为云开发者社区

数据库 华为云 企业应用

年末得到美团/京东/蚂蚁金服Java岗内推,分享我的6点面试经验

Java成神之路

Java 程序员 架构 面试 编程语言

新年Flag 中奖名单公布|如何科学的从55人中随机选出11个中奖名额

InfoQ写作平台官方

活动专区

阿里架构师深入讲解Android开发!教你一种更清晰的Android架构!BAT大厂面试总结

欢喜学安卓

android 程序员 面试 移动开发

从根上理解高性能、高并发(五):深入操作系统,理解高并发中的协程

JackJiang

网络编程 高并发 协程 高性能 即时通讯

dubbo-go 白话文 | 从零搭建 dubbogo 和 dubbo 的简单用例

阿里巴巴云原生

Java 云原生 dubbo 中间件 dubbogo

基于gRPC的注册发现与负载均衡的原理和实战

Kevin Wan

go 微服务发现 微服务治理 go-zero

一文带你学会AQS和并发工具类的关系2

伯阳

Java AQS 多线程 lock

量化交易自动炒币机器人系统开发搭建

薇電13242772558

策略模式 区块链+

没搞清楚网络I/O模型?那怎么入门Netty

云流

Java 后端 io

云原生 DevOps 的 5 步升级路径

阿里巴巴云原生

Serverless 容器 DevOps 微服务 云原生

腾讯P7给2年开发女朋友吐血整理面试题合集:Java虚拟机+Tomcat等

Java成神之路

Java 程序员 架构 面试 编程语言

给跨专业程序员的一些建议

Ryan Zheng

「回血赠书」Python入门书单,新年全力扬帆

博文视点Broadview

[如果公司要招一个高级版你]给资深/晋升后的岗位写一个理想岗位模型(Job Model)

🌸 Nancy ma🌸

产品经理训练营

有内味了!阿里内部Tomcat高阶调优笔记成功刷新了我的认知

Java架构之路

Java 程序员 架构 面试 编程语言

限量!阿里甩出878页性能优化笔记阿里甩出878页性能优化笔记!

Java架构之路

Java 程序员 架构 面试 编程语言

大厂必问Redis:肝完这份阿里出品“Redis神技”还说你不会Redis?

Java架构之路

Java 程序员 架构 面试 编程语言

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

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