Yeap CDN 新一代边缘:我们为什么选择 Rust
我们把 CDN 边缘节点换成了基于 Rust 和 Pingora 自研的新版本。这篇文章讲讲它给你的网站带来了什么:更快的连接、秒级生效的配置、更强的隔离与安全。
过去一年,我们把 Yeap CDN 的边缘节点从 OpenResty(nginx + Lua)逐步迁移到了一套用 Rust 编写、基于 Cloudflare 开源框架 Pingora 的自研边缘。目前绝大多数流量已经由新边缘承载,剩余节点正在按计划切换。
这篇文章不讲太多底层细节,主要回答一个问题:换了新边缘,对你的网站意味着什么?
为什么要换
旧架构由 nginx 配置、Lua 脚本、C 模块和嵌入式 JavaScript 四部分拼成。它跑得很快,但每加一个按域名生效的功能,都要在好几层里同时改动;配置写错了也常常不报错,只是悄悄不生效。随着功能越来越多,我们需要一个更统一、更可靠的基础。
我们选择 Rust 有三个原因:
- 内存安全:缓冲区溢出、悬垂指针这类在 C 代码里最常见的崩溃和漏洞,在 Rust 中从语言层面就被排除了。
- 强类型配置:每个域名的配置在下发到节点时都会被严格校验,字段拼错或类型不对会被明确拒绝,而不是静默失效。
- 可测试:整个边缘是一个单一语言的程序,现在由一千多个自动化测试覆盖,每次发布前都会完整运行。
你能直接感受到的变化
更快的连接
新边缘支持 HTTP/3(QUIC),在移动网络和高丢包环境下更稳定。TLS 会话票据在节点重启后依然有效,回访用户可以跳过完整握手,首屏更快。
配置秒级生效
你在控制台修改缓存、防火墙或页面规则后,新配置会在几秒内推送到所有边缘节点,并以原子方式切换:正在处理的请求继续使用旧配置,新请求立即使用新配置,节点不需要重启,也不会中断连接。
精确的缓存控制
缓存键支持按查询参数归一化、排序、白名单和黑名单。清除缓存时可以精确到某个带参数的变体,也可以一次清掉同一路径的全部变体。
边缘上的安全防护
WAF 规则集、限速、Bot 指纹识别和地域 / IP 规则都在边缘执行,恶意请求在到达你的源站之前就会被拦下,每一次拦截都会记录对应的规则,方便排查。
真正隔离的边缘函数
Edge Workers 运行在独立的 WebAssembly 沙箱中,每次执行都有独立的内存和严格的 CPU 时间上限。一个租户的脚本出问题,不会影响其他租户,也不会拖垮节点。
性能怎么样
在模拟真实浏览器的流量下(TLS + HTTP/2 + 压缩),新边缘的吞吐与尾延迟都优于同等配置的 nginx。主要原因是它直接缓存压缩后的内容,命中时不需要再做一次压缩。
为了做到这一点,我们没有把 Pingora 当成黑盒,而是在它的基础上做了深度定制,针对缓存命中这条最热的路径做了专门优化。
平滑迁移,对你透明
新旧边缘使用同一套控制面和同一份配置,日志格式也与原来逐字段一致,所以迁移过程中你不需要做任何改动:域名、证书、缓存规则和防火墙规则都会自动生效。
接下来
新边缘为我们打开了很多以前很难实现的能力。接下来的文章会分别介绍 HTTP/3 与 TLS 会话复用的实现、缓存清除如何做到变体级精确,以及我们的 DNS 是怎样为你的域名分配名称服务器的。
如果你还没有体验过,可以在控制台添加一个站点,CDN 免费版即可使用新一代边缘。
在 Yeap Cloud 上构建
新用户即享 DNS 与 CDN 免费套餐。
继续阅读
10 分钟把网站接入 Yeap CDN 并开启免费 HTTPS
一步一步把现有网站放到 Yeap CDN 后面:添加域名、配置源站、用 CNAME 或 NS 接入、申请免费 Let's Encrypt 证书、选择 SSL 模式并强制 HTTPS,最后用 curl 验证。
我们的 DNS 如何为你的域名挑选名称服务器
每个托管在 Yeap DNS 的域名都会分到一对名称服务器。这对 NS 要稳定、要分散、还必须真的能应答。本文介绍我们基于稳定哈希的分配方式,以及为什么"状态是意图,心跳才是事实"。
缓存清除实用指南:从缓存键到变体级精确清除
清除了缓存却还是命中?大多数时候问题出在缓存键上。本文解释 Yeap CDN 的缓存键如何构成、查询参数的几种模式,以及带与不带查询参数的 URL 清除分别会清掉什么。