AS深圳2018 《QUIC协议在腾讯的实践和优化》 罗成

1. QUIC在腾讯的实践和优化 罗成 腾讯专家工程师
4. 个人介绍 2011-2015 百度 • 百度统一前端 • 百度安全搜索 2015-现在 腾讯 • 腾讯TEG基础架构部 • 腾讯安全网关Secure Tencent GateWay 连续三年参加 • 2016《HTTPS在腾讯的优化》 ArchSummit • 2017《WEB加速,协议先行》
5. 内容大纲 QUIC特性简介 QUIC开源调研及实现架构 QUIC性能优化 QUIC在腾讯的应用和收益
6. 什么是QUIC? l Quic Udp Internet Connection l Google 2013 l (HTTP2 + TCP + TLS) over UDP HTTP2 TLS TCP HTTP over QUIC QUIC Quic crypto 类TCP传输控制 UDP IP
7. QUIC核心特性 0RTT建连 客户端 QUIC握手 HTTP数据 服务端 1RTT 全用户态传输控制 用户空间 Quic 协议栈 内核空间 UDP/IP 协议栈 用户程序 Frame管理 安全加密 传输和拥塞控制 UDP IP 网卡 避免队头阻塞的多路复用 客户端 QUIC连接 服务端 应用层 数据 丢失的 消息 CHLO 握手消息 SHLO 握手消息 应用层 数据
8. QUIC在Google的应用 +30% 全部流量 -8% 搜索延时 -18% Rebuffer rate
9. QUIC网络及客户端支持情况 0 ISP封禁 客户端支持QUIC的统计
10. 服务端如何实现QUIC?
11. 实现QUIC的几点困难 l 协议很复杂 25 Ø TCP的可靠性,拥塞控制 20 Ø TLS的安全性 Ø HTTP2的多路传输 15 l 要求高 Ø 高可靠性,高并发性,强实时性 10 l 快速变化(1版本/1.5月) 5 Ø 最新版本quic43 1 Ø Google or IETF ? 0 Ø TLS1.3 or QUIC Crypto ? QUIC版本历史 10 9 8 7 12 11 21 20 19 18 17 16 15 14 13 23 22 QUIC版本历史
12. 服务端开源方案的选择 libquic&& go-quic Caddy&& Quic-Go Stellite&&lsquic 巨坑 性能低 功能少 功能弱 难维护
13. Proto-Quic 的优点 https://www.chromium.org/quic 跨平台 功能全 面 权威标准
14. Proto-Quic 的问题 维护成 本高 开发成 本高 示例简 单 性能弱 数千个文 件 无开放的 API 数百万行 代码 Toy 单请求
15. Nginx + Chromium ?
16. Nginx框架分析 HTTP2 UDP Epoll tcp stream udp datagram l 多进程 l Epoll事件驱动 Nginx master l 高内聚的HTTP OSS ... ssl openssl dtls 协议处理 l 可扩展的第三方 Http2状态机 模块 http1.1 状态机 Modules && filters UPSTREAM负载均衡 业务RS集群
17. Chromium框架分析 browser进程 IO线程 event_base_loop ProcessPublicResetP acket Packet Framer:: ProcessPacket ProcessPublicHeader Visitor-> OnUnauthenticatedPublicHeader Bool l 多进程 DoIdleWork DoWork MessagePumpLibevent::Run MessageLoop::Run RunLoop::Run IPC render进程 IPC render进程 IPC render进程 Y ProcessPacketSequence Number visitor_-> OnUnauthenticatedHeader Resource Dispatcher Resource Dispatcher Resource Dispatcher Version mismatch Y N Reset flag N ProcessDataPacket ProcessUnauthentica tedHeader DecryptPayload visitor_-> OnPacketHeader visitor_-> OnProtocolVersionMismatch l Epoll异步事件驱动 l 模块解耦 Switch Frame type 重点介绍stream l ProcessStreamFrame 高内聚的 ProcessPacket ProcessFrameData visitor_-> OnPacketComplete() visitor_>OnStreamFrame
18. Nginx + Chromium可行性分析 Nginx Event Driven l Multi process l HTTP State Machine l Modules &&filters l Epoll Event Driven l Multi process l Epoll Event Driven l Modules l QUIC&&HTTP Stack
19. Nginx-Quic的实现架构 l 高性能 Ø 多进程 Ø 全异步事件驱动 l 强大的功能 OSS Ø 支持Nginx全部指令 Ø 支持QUIC全部特性 l 稳定性 Ø 同步更新 Nginx master HTTP2 QUIC tcp stream Epoll udp datagram ... ssl boringssl quic crypto Http2 quic http1.1 状态机 Modules && filters UPSTREAM负载均衡 业务RS集群 Process UDP Packet Process Packet QuicFramer Chromium Network Stack QuicStream QuicSpdy Stream
20. 性能优化
21. 多进程UDP处理的问题 l Reuseport Ø 3.9以上 客户端 Quic Stream M UDP Packet N Quic Stream M UDP Packet N + 1 内核空间 用户空间 socket 客户端 Quic Stream M Quic Stream M UDP Packet N UDP Packet N + 1 内核空间 用户空间 socket1 socket2 socket3
22. QUIC多进程连接迁移的问题 IP:1.1.1.1 ID:12345...32 IP:2.2.2.2 ID:12345...32 l 连接迁移 内核空间 Ø 客户端IP/Port发生 变化后,连接依然保 持 l reuseport失效 用户空间 socket1 socket2 socket3
23. 应用层如何实现连接迁移? 单进程接收 多进程共享 多线程 客户端 ID:12345...32 Ip变化后 ID:12345...32 进程1 接收数据 按照Id转发 ID:12345...32 ID:12345...32 客户端 ID:12345...32 Ip变化后 ID:12345...32 客户端 ID:12345...32 Ip变化后 ID:12345...32 接收处理 数据 接收处理 数据 接收处理 数据 接收处理 数据 共享内存 接收处理 数据 接收处理 数据 接收处理 数据
24. RPS/RFS内核解决方案分析 IP:1.1.1.1 ID:12345...32 IP:2.2.2.2 ID:12345...32 l Receive Packet Steering l Receive Flow Steering ID哈希 内核空间 用户空间
25. REUSEID方案 IP:1.1.1.1 ID:12345...32 IP:2.2.2.2 ID:12345...32 l REUSEPORT->REUSEID 内核空间 用户空间 socket1 socket2 socket3
26. 多机接入的QUIC连接迁移 l 四层ID哈希 l 七层会话保持 IP:1.1.1.1 ID:12345...32 IP:2.2.2.2 ID:12345...32 用户从4G进入 WIFI,IP发生切换 公网 TGW根据ID调度 相同ID落到相同STGW TGW TGW TGW IP:1.1.1.1 ID:12345...32 IP:2.2.2.2 ID:12345...32 STGW STGW STGW STGW STGW STGW 长连接保持 IP:2.2.2.2 ID:12345...32 IP:1.1.1.1 ID:12345...32 RS RS RS RS RS RS RS RS RS
27. QUIC的1RTT和0RTT握手 1RTT 客户端 服务端 ClientHello • CHLO • SNI • PDMD ServerHello • REJ • SCFG • STK ClientHello • CHLO • SCID • PUBS 应用数据 1RTT ServerHello • SHLO • PUBS 2RTT 0RTT 客户端 服务端 ClientHello • CHLO • SCID • PUBS 应用数据 ServerHello • SHLO • PUBS 0RTT关键: 通过SCID查 找到SCFG 1RTT
28. 0RTT命中率低的原因 多机接入 客户端 多进程接入 客户端 CHLO SCID A CHLO SCID A CHLO SCID A CHLO SCID A TGW TGW TGW TGW STGW A SCFG A STGW B SCFG B STGW C SCFG C worker A SCFG A worker B SCFG B worker C SCFG C
29. 0RTT命中率提升95% Ip和id哈希 客户端 多进程共享 客户端 Master生产 CHLO CHLO CHLO SCID A CHLO SCID A TGW TGW IP哈希 STGW A SCFG A STGW B SCFG B STGW C SCFG C CHLO SCID A TGW CHLO SCID A TGW worker A worker B SCFG ALL worker C TGW Ip id哈希 TGW stgw SCFG 生产 消费 M A S T E R 工 作 进 程 1 工 作 进 程 2 stgw SCFG 生产 消费 M A S T E R 工 作 进 程 1 工 作 进 程 2
30. QUIC异步代理计算架构 客户端 客户端 l 性能提升3.5倍 ①CHLO ③ 返回SHLO :Proof ④对称加密的应用数据 Nginx +boringss ② 本地RSA同步计算 生成Proof ⑤对称加解密 \ CPU ⑥ 统一转换成HTTP ①CHLO ③ 返回SHLO :Proof ④对称加密的应用数据 Nginx +boringss ⑤对称加解密 CPU ② RSA异步 代理计算 生成Proof ⑥ 统一转换成HTTP
31. QUIC在腾讯的应用
32. QUIC在腾讯内部业务的应用 l Qzone首页 l Qzone挂件商城 l QQ会员 l 腾讯视频 l…
33. 腾讯云CLB率先支持QUIC l 业界第一个支持QUIC 的云厂商 Ø 17年8月 l Google LB宣布支持 QUIC Ø 18年6月 SPDY QUIC HTTP2 HTTPS HTTP TCP UDP Cache Cache CLB CLB CLB HTTP2-> QUIC-> HTTP1.1 HTTP1.1 HTTPS-> HTTP1.1 TCP/UDP 硬件加 速卡 空闲 CPU RS RS RS RS RS RS RS RS
34. 欢迎试用腾讯云CLB QUIC
35. 腾讯云CLB QUIC Demo l CLB Quic demo Ø https://github.com/tenc entyun/clb-quic-demo l 源自cronet, 仅供参考
36. 欢迎交流:端到端的网络性能优化 “腾讯架构师” “孩子,篮球,吃鸡,技术”