当前位置: 首页 > news >正文

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级


在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发的基于 Rust 的新一代代理服务——Pingora。
在这里插入图片描述

一、弃用 Nginx 的原因

在这里插入图片描述

(一)架构限制影响性能

Nginx 作为一款高性能的 HTTP 和反向代理服务器,多年来一直是 Cloudflare 的核心组件之一。然而,随着 Cloudflare 业务规模的迅速扩张,Nginx 的架构局限性逐渐显现。Nginx 的 worker(进程)架构导致每个请求只能由单个 worker 处理,这不仅造成了 CPU 内核之间的负载不平衡,还使得执行 CPU 密集型或阻塞 I/O 任务的请求会减缓其他请求的速度。此外,Nginx 的连接池与单个 worker 相对应,限制了连接的重用率。当增加更多的 worker 进行扩展时,连接会分散在更多的孤立池中,导致连接重用率下降,增加了资源消耗。

(二)功能扩展困难

Nginx 虽然在 Web 服务器、负载均衡器或简单的网关方面表现出色,但对于更高级、定制化的功能需求,其扩展性存在明显不足。Cloudflare 在尝试围绕 Nginx 构建所需功能时,面临着与上游代码库保持一致的挑战,这并不容易实现。此外,Nginx 社区的活跃度有限,开发工作往往缺乏开源社区的支持和协作。

二、Pingora 的优势

(一)性能提升

Pingora 采用 Rust 编程语言开发,Rust 的内存安全和高性能特性使其在处理高并发请求时表现优异。Pingora 的多线程架构允许跨所有线程共享连接,从而实现更好的连接重用率,减少了 TCP 和 TLS 握手的时间。实际数据显示,Pingora 的 TTFB(第一个字节时间)中位数减少了 5 毫秒,第 95 百分位数减少了 80 毫秒。对于一个主要客户,Pingora 将连接重用率从 87.1% 提高到 99.92%,减少了 160 倍的新连接。

(二)效率优化

在生产环境中,Pingora 在相同流量负载的情况下,消耗的 CPU 和内存资源分别减少了约 70% 和 67%。Rust 代码的运行效率高于旧的 Lua 代码,多线程模型也使得跨请求共享数据更加高效。

(三)安全性增强

Rust 的内存安全语义保护 Cloudflare 免受未定义行为的影响,使其相信服务将正确运行。这使得 Cloudflare 能够更多地关注服务更改将如何与其他服务或客户来源进行交互,以更高的节奏开发功能,而不用背负内存安全和难以诊断崩溃的问题。

三、Pingora 的使用示例

Cloudflare 官方提供了一个简单的 Pingora 使用示例,展示了如何快速构建一个负载均衡器:

use pingora_core::services::background::background_service;
use pingora_core::server::configuration::Opt;
use pingora_core::server::Server;
use pingora_core::upstreams::peer::HttpPeer;
use pingora_core::Result;
use pingora_load_balancing::{health_check, selection::RoundRobin, LoadBalancer};
use pingora_proxy::{ProxyHttp, Session};
use std::sync::Arc;pub struct LB(Arc<LoadBalancer<RoundRobin>>);#[async_trait::async_trait]
impl ProxyHttp for LB {type CTX = ();fn new_ctx(&self) -> Self::CTX {}async fn upstream_peer(&self, _session: &mut Session, _ctx: &mut ()) -> Result<Box<HttpPeer>> {let upstream = self.0.select(b"", 256).unwrap();let peer = Box::new(HttpPeer::new(upstream, true, "one.one.one.one".to_string()));Ok(peer)}
}fn main() {let opt = Opt::from_args();let mut my_server = Server::new(Some(opt)).unwrap();my_server.bootstrap();let mut upstreams = LoadBalancer::try_from_iter(["1.1.1.1:443", "1.0.0.1:443"]).unwrap();let hc = health_check::TcpHealthCheck::new();upstreams.set_health_check(hc);upstreams.health_check_frequency = Some(std::time::Duration::from_secs(1));let background = background_service("health check", upstreams);let upstreams = background.task();let mut lb = pingora_proxy::http_proxy_service(&my_server.configuration, LB(upstreams));lb.add_tcp("0.0.0.0:6188");my_server.add_service(lb);my_server.add_service(background);my_server.run_forever();
}

在这个示例中,Pingora 使用 Rust 的异步编程特性,通过简单的代码实现了负载均衡器的基本功能。它展示了 Pingora 的灵活性和开发效率,同时也体现了 Rust 在处理高并发网络服务时的优势。

四、Pingora 的 GitHub 链接

Cloudflare 已经正式开源了 Pingora 框架,源代码采用 Apache License,托管在 GitHub。以下是 Pingora 的 GitHub 仓库链接,你可以在这里查看代码、提交问题或参与贡献:

  • Pingora GitHub 仓库地址:https://github.com/cloudflare/pingora

五、总结

Cloudflare 从 Nginx 转向 Pingora 是一个具有里程碑意义的决策。Pingora 不仅在性能、效率和安全性方面显著优于 Nginx,还为 Cloudflare 提供了更强大的功能扩展能力。随着 Cloudflare 将 Pingora 开源,这一技术变革有望为整个互联网行业带来新的启示和机遇,推动更多企业探索更高效、更安全的网络服务解决方案。


相关文章:

  • std::ratio 简单使用举例
  • Cell的复用及自定义Cell
  • 【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
  • EasyImage实战:结合内网穿透技术实现私有图床部署过程
  • 创客匠人:赋能创始人IP打造,破局知识变现的黄金路径
  • Android实践:查看远程文档
  • 接口自动化测试-效果展示
  • 2025年文化交流与创新教育国际会议(ICCEIE 2025)
  • 合成来源图以在入侵检测系统中进行数据增强
  • RAG质量评估
  • 【易飞】通过信息传递触发时机复制生成品号实现复制品号自动带出原自定义字段数据
  • 马克思主义与社会科学方法论通俗版
  • MeanFlow:何凯明新作,单步去噪图像生成新SOTA
  • DAY 19 常见的特征筛选算法
  • 本周四19点,《国产网络音频传输的今天和明天》开讲!
  • 软件工程教学评价
  • 性能测试|有限元软件分析——以Abaqus隐式静力学求解为例
  • 【JavaSE】多线程基础学习笔记
  • 网络基础概念(网络基础)
  • Excel表格数据导入数据库
  • 网站开发语言统计/百度官方入口
  • 上海行业网站建设/百度软件商店
  • 店铺只做商品展示网站怎么做/网络营销推广技术
  • 百货店怎么做网站送货/免费发帖推广的平台
  • 文化创意有限公司/天津百度快照优化公司
  • 工程建设国家标准网站/排名优化公司电话