Pingora 深度解析:为什么 Cloudflare 用 Rust 重写了 Nginx 时代的代理架构
Cloudflare 公开 Pingora 时,最抓眼球的数字是:在相同流量下,新的代理系统比旧系统少用了约 70% CPU 和 67% 内存。 看到这个数字,很多人的第一反应可能是:是不是 Nginx 不行了?是不是 Rust 天生就比 C 快很多? 都不是。 我们真正要回答的是:Cloudflare 为什么会觉得原来的 NGINX/OpenResty 代理不够用了?Pingora 又改掉了哪些最贵的地方? 后面就顺着这个问题往下走。先看 Pingora 是什么,再看 Nginx 在普通场景里为什么很好用,最后再看 Cloudflare 这种规模下,连接池、线程模型和业务逻辑会怎样把成本放大。 可以先带着三句话往下读,后面会一层层展开: Cloudflare 替换的是他们内部深度改造过的 NGINX/OpenResty 代理,不是说 Nginx 在所有场景下都慢。 Pingora 开源版更像“用 Rust 写代理服务的工具箱”,不是一个直接读取 nginx.conf 的 Nginx 替代品。 重点不是“Rust 打败 Nginx”,而是连接复用、线程共享和复杂代理逻辑这些具体问题。 1. Pingora 不是一个新的 Nginx 如果你平时用 Nginx,可能会自然地把 Pingora 想成“另一个服务器软件”。但这样理解会有点偏。 Pingora 更像一套用 Rust 写代理服务的工具箱。它帮你处理连接、TLS、HTTP 协议、负载均衡、连接池、优雅升级这些通用能力;你的业务逻辑则写在 Rust 回调里。 它不是单个二进制 Web 服务器,而是一组 crate: crate 作用 pingora-core 底层协议、服务运行、监听器、连接器、优雅升级 pingora-proxy HTTP 代理生命周期和 ProxyHttp 回调接口 pingora-pool 高并发连接池 pingora-runtime Tokio runtime 封装,支持 work-stealing 与 no-steal 模式 pingora-load-balancing 负载均衡、健康检查、选择算法 pingora-cache / pingora-memory-cache 缓存相关能力 这些名字不用急着都记住。先有一个印象就够了:Pingora 把“写代理服务”拆成了一组可以组合的 Rust 库。 ...