
Cloudflare 近日宣布,已将公司核心子系统之一用 Rust 语言重写,实现响应时间缩短 10 毫秒、整体性能提升 25%。公司同时强调,Rust 不仅提升了系统性能,还增强了安全性,并缩短了开发周期。
在成功将 Pingora 子系统迁移至 Rust 之后,Cloudflare 的工程师决定从零开始重写公司最老、也是最关键的组件之一——FL,即“Cloudflare 的大脑”:
FL 是 Cloudflare 的中枢。当一个请求到达 FL 后,我们会在网络中运行各种安全与性能功能。它会应用每个客户独有的配置和设置,从执行 WAF(Web 应用防火墙)规则、DDoS 防护,到将流量路由至开发者平台和对象存储服务 R2。
Cloudflare 的架构师们决定基于公司内部开发的代理框架 Oxy 来构建新一代系统 FL2。Oxy 支持监控、软重载、动态配置加载与切换等功能。
尤其值得一提的是,Oxy 的内建“平滑重启”机制对代理系统至关重要。传统方式中,终止进程会导致所有活跃连接被强制中断;而 Oxy 则在需要关闭实例时,会停止接收新连接,但继续为现有连接提供服务,直到它们自然结束,从而实现无中断过渡。
对 Cloudflare 架构师而言,最大的挑战之一是:如何替换一个支撑了公司 15 年、仍在持续演进的运行系统。为了避免团队必须为旧版(基于 LuaJIT 的 FL)和新版(基于 Rust 的 FL2)各自重复开发功能,他们在 FL 内部创建了一个中间层,使得为 FL2 编写的 Rust 模块也能在旧系统中无缝运行。
这样一来,各团队无需维护两套逻辑,可以直接用 Rust 实现新功能,并逐步替换旧的 Lua 逻辑,而无需等待整个系统彻底迁移完成。
为了确保迁移过程顺利,Cloudflare 的架构师还制定了明确的测试与发布策略。测试环节使用名为 Flamingo 的系统,可同时对 FL1 与 FL2 发起上千次端到端测试请求。每次更新都会逐步上线,在不同阶段接受递增流量测试与性能基准对比,以确保性能与资源使用保持在可接受范围内。
另一个关键机制是 FL2 的回退机制。当 FL2 无法处理某个请求时,它会将该请求交给旧系统 FL1 处理。得益于这一机制,Cloudflare 能够在不影响整体稳定性的前提下,逐步增加 FL2 的实际流量占比。随着 FL2 的成熟,它处理的请求量持续上升,而回退至 FL1 的比例则相应下降。
Cloudflare 架构师指出,构建 FL2 的最大收益来自性能提升。这主要源于两方面:一是 FL2 完全使用高性能语言 Rust 编写,而不再像 FL1 那样混合使用 C、Rust 与 Lua;二是旧系统 FL1 在多语言间进行数据转换时耗费了大量时间。得益于此,FL2 仅需原系统一半的 CPU 资源,内存占用也不到一半。
此外,FL2 还从 Rust 的编译时安全机制中获益良多。Rust 严格的静态检查、代码规范、全面测试和严格的代码审查流程,使系统在运行过程中极少出现崩溃问题。目前报告的大部分故障都与硬件故障有关。
原文链接:








评论