Learning eBPF the Hard Way: 从 nginx eBPF 的实现说起
| 82 minute read
聊了聊为什么想写这个新系列,以及为什么喜欢 eBPF 技术,然后就是通过介绍 Reuseport eBPF 方案是怎么解决 UDP 热更新问题的技术细节,以及分析 nginx eBPF 实现和缺陷,来回顾了自己当初由于不了解 eBPF 加载器背后原理而踩过的坑。最后,还较为深入的分析了 Cloudflare 新出的 udpgrm 开源项目
Read more ⟶
Linux 服务端 UDP 网络编程:无损热更新
| 61 minute read
通过当年一个棘手的需求来介绍 Established-over-unconnected 技术方案,讲述 Linux 服务端高并发场景下如何进行 UDP 网络编程,怎么确保实现无损热更新,更重要的是在不同内核版本下会存在哪些坑,以及结合内核 TCP、UDP 数据包如何匹配对应套接字的代码实现细节,解释如何应对这些问题
Read more ⟶
用 Rust 从零开始写 QUIC:实现连接迁移
| 52 minute read
在讨论连接迁移之前,先介绍了一下 QUIC 是怎么实现面向连接的,然后再分析了一下 QUIC 连接迁移的设计细节,并且对比其他协议类似的方案,比如说 WebRTC Mobility 等。关于具体的代码实现,重点分析了连接迁移的经典场景,并且讨论了 feather-quic 本次实现中可以提供哪些方式供开发者使用连接迁移功能,以及 feather-quic 目前的一些缺陷。最后,因为本次大部分代码都是依赖 AI 生成的,所以趁热打铁聊一聊对大模型生成代码这件事情的想法和感悟
Read more ⟶
用 Rust 从零开始写 QUIC:MTU 探测
| 65 minute read
从传输层协议为什么需要 MTU 探测说起,重点分析了为什么 IP 分片会导致传输层性能下降甚至影响可用性,接着讨论 MTU 探测常见的实现方式,以及有趣的实现细节,再分析下 QUIC 在实现 MTU 探测的时候,是怎么解决 TCP 面对的问题,也顺带着聊了聊 GSO TSO GRO 相关的内核优化技术,最后给了一些关于日常家用 MTU 配置的建议
Read more ⟶
用 Rust 从零开始写 QUIC:实现 QUIC 连接关闭和错误处理
| 31 minute read
首先,按照惯例,先踩一踩 TCP,分析一下 QUIC 连接关闭设计为什么会比 TCP 要好很多。另外,实现了 QUIC 协议栈中各种异常需要关闭连接的情况。最后,这个项目的第一阶段算是初步完成了,说一说到目前为止的一些感受
Read more ⟶
线上故障应急处理:4 年多 on call 经验总结
| 51 minute read
我最近在处理一个客户的线上工单问题时,发现自己不知不觉犯了一个方向性的小错误,这让我有点开始反思自己,考虑到我第一份工作 4 年多时间一直在高强度的 on call,我其实觉得自己还是很擅长故障应急和客户紧急工单处理,所以我想总结一下我当初积累的经验教训,给自己提一个醒。同时也记录下当初自己是如何从五花八门的故障中学习经验教训,快速成长的
Read more ⟶
用 Rust 从零开始写 QUIC:实现 QUIC 多路复用流传输和流量控制
| 33 minute read
这里,终于开始实现 QUIC 核心能力: QUIC 多路复用流传输,同时实现了流量控制,确保在 QUIC 传输数据的过程中,能够严格按照 QUIC 协议规范工作, 并且优化了项目的结构,新增了一些集成测试来确保项目质量
Read more ⟶
用 Rust 从零开始写 QUIC:Reliability
| 33 minute read
对比了 TCP 和 QUIC 在 Reliability 实现的区别,详细描述了实现 QUIC Reliability 能力的相关细节,考虑了后续要如何加强测试,提升项目质量
Read more ⟶
用 Rust 从零开始写 QUIC:实现 TLS 1.3 握手和 QUIC-TLS Key Update
| 25 minute read
实现一个 TLS 1.3 的简单客户端版本,协商出 TLS 1.3 密钥来给 QUIC-TLS 使用,另外支持了 QUIC-TLS Key Update 的能力,同时顺带支持了 SSLKEYLOG 的密钥导出功能,方便后续使用 WireShark 等工具
Read more ⟶