Pingora 正式开源:基于 Rust 的超快、可靠的 Nginx 替代品

2 月 28 日,cloudflare 开源了其自研的 Nignx 替代品:Pingora。这是一个使用 Rust 打造的高速、可靠与可编程的网络系统。目前,cloudflare 已使用 Pingora 全面替代 Nginx 。经过实战检验,稳定处理每秒超过4000万的互联网请求,持续服务数年,每秒最多可处理一万亿个请求。下面就来了解一下 Pingora 的特别之处!

Cloudflare 是一个全球性的网络性能和安全公司,它提供了一系列服务来帮助网站和应用程序改善其在线体验、增加安全性并加速加载速度。Cloudflare 的主要服务包括:

  • 内容分发网络 (CDN):通过在全球各地分布的数据中心缓存和分发您的网站内容,帮助加速网站和应用程序的加载速度。
  • DNS 服务:提供可靠的 DNS 解析服务,确保用户能够快速地访问您的网站或应用程序。
  • 防火墙和安全性:保护您的网站免受 DDoS 攻击和其他网络威胁的影响,通过提供强大的防火墙和安全措施。
  • 负载均衡:智能地将用户流量分发到多个服务器,确保您的网站或应用程序在高流量下仍然保持快速和可靠。

2023 年 1 月,据 Netcraft 对上百万个站点的调查数据显示,在 Cloudflare 从第 3 位跃升至第 1 位,即在一个月内超过了 Apache 和 Nginx ,成为了最受欢迎 Web 服务器。

Pingora 是什么?

Pingora 作为一款功能强大的代理工具,不仅提供了构建HTTP/1、HTTP/2、TLS或TCP/UDP服务的库和API,还支持HTTP/1和HTTP/2的端到端代理、gRPC和Websocket代理。尽管HTTP/3的支持尚在规划中,但Pingora已经展现出其前瞻性和可扩展性。为了满足不同用户的需求,Pingora配备了高度可定制的负载均衡和故障转移策略。在安全方面,Pingora支持广泛使用的OpenSSL和BoringSSL库,确保服务符合FIPS标准,并采用了后量子加密技术,为用户提供坚实的安全保障。

Pingora的另一个亮点是其灵活的过滤器和回调函数机制。这使得用户能够根据自己的需求,完全自定义服务的请求处理、转换和转发过程。这一特性对于熟悉 OpenResty 和 Nginx 的用户来说将尤为亲切,因为Pingora的API设计直观且易于与OpenResty的 "*_by_lua" 回调函数对接。

在操作层面,Pingora提供了零停机时间的优雅重启功能,确保在升级过程中不会丢失任何传入请求。此外,Pingora还易于与Syslog、Prometheus、Sentry、OpenTelemetry等关键可观察性工具集成,帮助用户实时监控和优化服务的性能。


那什么情况下应该使用 Pingora 呢?

  • 安全至上:Pingora 是 C/C++ 服务的安全内存替代方案。通过 Pingora,您可以减少编码错误,降低内存安全问题的风险。这意味着将能够更专注于新功能的开发,而不必担心潜在的安全隐患。
  • 性能敏感:Pingora 以其快速和高效的性能而著称。得益于其多线程架构,Pingora 显著减少了 CPU 和内存资源的消耗。对于需要优化成本和速度的系统,Pingora 无疑是理想的选择。
  • 高度定制需求:Pingora 提供的 API 高度可编程,适用于构建定制和高级的网关或负载均衡器。无论需求有多么复杂,Pingora 都能提供强大而简单的实现方式。

有了 Nginx 为什么还需要 Pingora?

Pingora 是 Cloudflare 使用 Rust 构建的新 HTTP 代理,不仅提升了性能,还为Cloudflare客户带来了众多新功能。令人瞩目的是,它在实现这些的同时,仅需以往代理基础架构三分之一的CPU和内存资源。

随着Cloudflare业务规模的飞速扩张,其需求已经超越了 Nginx 的处理能力。尽管 Nginx 多年来表现出色,但随着时间推移,其规模上的局限性逐渐凸显。包括:

  • Nginx 架构影响性能: Nginx 的 worker(进程)架构导致每个请求只能由单个worker处理,造成了CPU内核之间的负载不平衡,从而降低了整体性能。此外,这种架构还可能导致执行CPU密集型或阻塞I/O任务的请求减缓其他请求的速度。另外,cloudflare 的用例依赖于高效的连接重用,以减少TCP和TLS握手的时间,加快请求的TTFB。然而, Nginx 的连接池与单个worker相对应,限制了连接的重用率。当增加更多的worker以进行扩展时,连接会分散在更多的孤立池中,导致连接重用率下降,TTFB增加,并增加了资源消耗。
  • 有些类型的功能难以添加: Nginx 作为 Web 服务器、负载均衡器或简单的网关表现出色,但对于更高级、定制化的功能需求,它存在一些局限性。在尝试围绕 Nginx 构建所需功能时,面临着与上游代码库保持一致的挑战,这并不容易实现。除此之外, Nginx 社区的活跃度有限,开发工作往往缺乏开源社区的支持和协作。这限制了我们从社区获取帮助和解决方案的能力。

为了追求更高的性能,并满足复杂环境中日益增长的功能需求,Cloudflare决定构建全新的解决方案——Pingora。

性能提升

经过对 Pingora 的实际应用与性能数据的收集,观察到了显著的性能提升。Pingora在处理HTTP请求时,特别是针对缓存未命中的情况,表现出了出色的性能。Pingora架构的创新之处在于其跨线程共享连接的能力,这显著提高了连接的重用率,并大幅减少了在 TCP 和 TLS 握手上所花费的时间。

根据数据,Pingora 将 TTFB(首字节时间)的中位数减少了 5 毫秒,而第 95 个百分位数更是减少了80毫秒。这并非因为代码运行速度更快,而是因为新架构更有效地管理了连接,从而减少了握手时间。此外,与旧服务相比,Pingora每秒的新连接数减少了三分之二。对于一个关键客户,连接重用率从87.1%大幅提升至99.92%,这意味着新连接的数量减少了160倍。换算成实际的时间节省,通过切换到Pingora,每天为客户和用户节省了相当于434年的握手时间。

更安全

在大规模分布式环境中,快速且安全地发布新功能是一项艰巨的任务,尤其是在每秒处理数百万个请求的情况下。在这样的环境下,传统的模糊测试和静态分析只能提供有限的保障。

为了增强系统的稳定性和可靠性,Pingora 选择了使用 Rust 语言,其内存安全语义确保了代码免受未定义行为的影响,从而增强了对服务正确运行的信心。这种保障能够将更多精力集中在服务更改与其他服务或客户来源的交互上,而不是担忧内存安全或难以诊断的崩溃问题。

自 Pingora 使用以来,已经处理了数百万亿个请求,而且至今尚未因为服务代码而导致崩溃。这证明了Rust在内存安全方面的优势以及 Cloudflare 团队在开发和维护中的努力。

更高效

在生产环境中,与旧服务相比,Pingora在相同的流量负载下实现了显著的资源消耗降低。具体来说,CPU消耗减少了约70%,而内存消耗减少了约67%。这一显著的节省主要源于几个关键因素。

首先,Pingora使用Rust编写的代码相较于之前使用Lua的代码,在运行效率上有显著的提升。Rust作为一种编译型语言,其性能通常优于解释型语言如Lua。

其次,Pingora的架构设计使得数据访问更加高效。在旧的 NGINX/OpenResty 架构中,Lua代码访问HTTP头时涉及多个步骤,包括从 Nginx C结构中读取、分配Lua字符串、复制到Lua字符串中,以及后续的垃圾回收。而在Pingora中,这种访问变得直接而高效,减少了不必要的中间步骤。

此外,Pingora采用的多线程模型使得跨请求共享数据更加高效。虽然NGINX也提供共享内存,但由于实施限制,每次访问都需要使用互斥锁,并且只能存储字符串和数字。相比之下,Pingora允许通过原子引用计数器直接访问大多数共享项目,从而提高了数据共享的效率。

最后,Pingora显著减少了新连接的数量,这也是CPU节省的一个重要方面。与通过已建立的连接发送和接收数据相比,TLS握手过程更加耗时和资源密集。通过提高连接重用率,Pingora能够减少新连接的需求,从而进一步降低资源消耗。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PingoraNginx 是两个不同的软件,用途和功能也有一些差异。下面是 PingoraNginx 的区别和优缺点对比: Pingora: Pingora 是一个开源的高性能HTTP服务器,旨在提供快速、可靠的Web服务。它是使用C++编写的,具有轻量级和高并发处理能力,适用于处理大量的静态内容。Pingora 的主要特点包括: 优点: 1. 高性能:Pingora 是为了提供高性能而设计的,能够处理大量的并发请求。 2. 轻量级:Pingora 的代码相对较小,占用较少的系统资源。 3. 静态内容支持:Pingora 特别适合处理静态内容,如HTML、CSS、JavaScript等。 缺点: 1. 功能有限:相对于其他全功能的Web服务器,Pingora 的功能相对较少,主要专注于提供静态内容。 Nginx: Nginx 是一个高性能的开源Web服务器和反向代理服务器。它也可以用作负载均衡器、HTTP缓存服务器和反向代理服务器等。Nginx 的主要特点包括: 优点: 1. 高性能:Nginx 以其高效的事件驱动架构而闻名,能够处理大量的并发连接和请求。 2. 强大的功能:Nginx 提供了丰富的功能,包括负载均衡、反向代理、HTTP缓存、SSL支持等。 3. 可扩展性:Nginx 可以通过扩展模块来增加额外的功能和定制化需求。 缺点: 1. 配置复杂:相对于其他简单的Web服务器,Nginx 的配置相对复杂,需要一定的学习和经验。 2. 动态内容处理:相对于静态内容,Nginx 的动态内容处理能力较弱,通常需要与应用服务器(如PHP-FPM)结合使用。 总结: Pingora 适用于需要快速、高性能的静态内容服务场景,而 Nginx 则更适合承担更复杂的任务,如反向代理、负载均衡和动态内容处理。选择合适的软件取决于具体的需求和使用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋の本名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值