Pingora正式开源:超强的Nginx替代品,每秒可处理4000万请求!

更新日期: 2024-02-29阅读: 309标签: 开源
2 月 28 日,Cloudflare 开源了其自研的 Nignx 替代品:Pingora。这是一个基于 Rust 打造的高速、可靠与可编程的网络系统。目前,Cloudflare 已使用 Pingora 全面替代  Nginx 。经过实战检验,Pingora 每秒稳定处理超过 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能够减少新连接的需求,从而进一步降低资源消耗。

Github:https://github.com/cloudflare/pingora
原文:前端充电宝,作者:CUGGZ 

链接: https://www.fly63.com/article/detial/12669

为什么我们从来不去感谢开源项目维护者

一个开源项目维护者必须一年到头无偿地做这么多复杂繁琐的工作。当我们很方便的使用开源项目时,太容易忘记项目维护者的辛苦付出了,有时候,开源项目维护者真的需要你对他说一声谢谢。

Emoji开源库推荐_支持emoji表情的js的开源项目总汇

Emoji(表情符号)的使用到处都有,想通过js为自己的网页添加Emoji吗?今天就为大家整理在Github上最受欢迎的Emoji开源库,让自己的页面显示Emoji。

我是如何创造“开源”这个词的

开源软件open source software创立 20 周年的纪念日。由于开源软件渐受欢迎,并且为这个时代强有力的重要变革提供了动力,我们仔细反思了它的初生到崛起。

高效学习开源项目的五大步骤!

得益于开源运动的蓬勃发展,众多技术顶尖的公司、团队或者个人通过开源的方式向技术社区贡献了许多优秀的开源项目,一方面大大促进了整体技术的发展

开源的本质是什么,免费还是自由?

开源的本质是什么,免费还是自由?国内的很多软件公司或研究机构对开源的热情仅限于免费的代码,而绝少深度参与开源社区的活动。我们对于开源始终是利用多,而贡献少,从国内发起的有一定影响力的开源项目如果不是完全没有,恐怕也是凤毛麟角。

高效实用的.NET开源项目

很多人也想了解一下最新和感觉有用的.NET开源项目,最近准备面试为了有料说,在网上找到了一些开源的项目,个人觉得还不错,所以给大家分享一下,共同进步。

传说这个是 35 个最好用 Vue 开源库

无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。对于开发者来说,如果没有这些开源软件包,很难想象我们的生活会变得多么疲惫不堪,而且靠咖啡度日也会成为家常便饭。所幸的是,随着 Vue.js 和 Nuxt.js 社区的不断壮大,每天都会出现一些很好的软件包。

微软WPF开源了

在去年的 Microsoft Connect(); 开发者大会上,微软宣布开源三种主要的 Windows UX 技术,其中就包括了 Windows Presentation Foundation (WPF),除此之外还有 Windows Forms 和 Windows UI XAML 库 (WinUI)

12种开源Web安全扫描程序

Arachni是一款基于Ruby框架构建的高性能安全扫描程序,适用于现代Web应用程序。XssPy一个基于Python的XSS(跨站脚本)漏洞扫描器。w3af,从2006开始使用python开发的开源项目,可以用在window和linux环境下

Github 上 36 个最实用的 Vue 开源库

任何一个开发者,都是十分喜欢使用开源软件包的。因为它使开发工作变得更快速、高效、容易。如果没有开源软件包,开发工作将变得疲惫不堪,不断的重复造轮子!下面整理了 Github 上 36 个实用的 Vue 开源库,建议收藏!

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!