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

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

喜欢的话点点赞收藏一下谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇率都是受哪些因素影响?央行有哪些政策

汇率都是受哪些因素影响的呢?很多外汇交易员相信都会有这样的疑问,Anzo Capital昂首资本提醒各位交易员,其实外汇汇率变动会受到很多不同的因素,甚至有些因素是相反、自我矛盾的方向的因素的影响,而不仅仅是通货膨胀的…

c++ for 循环语句

循环语句 在C中,有几种循环语句可用于重复执行一段代码,直到满足指定条件为止,主要有 for 循环、while 循环、do-while 循环三种循环语句。三者区别: 循环类型特点for 循环1. 适用于已知循环次数的情况,循环次数事先…

高刷显示器 - HKC VG253KM

🔥🔥 今天来给大家揭秘一款电竞神器 - HKC VG253KM 高刷电竞显示器!这款显示器可是有着雄鹰展翅般的设计灵感,背后的大鹏展翅鹰翼图腾让人过目难忘。那么,这款显示器到底有哪些过人之处呢?一起来看看吧&…

Jupyter Notebook 下载+简单设置

这里写目录标题 1. Jupyter Notebook安装2.切换打开别的盘3. 创建代码文件4.为jupyter notebook添加目录 (Jupyter安装拓展nbextensions)step1:安装命令step2:用户配置step3:上述过程均完成后,打开jupyter notebook就会发现界面多…

ifcplusplus 示例 函数中英文 对照分析以及流程图

有需求,需要分析 ifc c渲染,分析完,有 230个函数,才能完成一个加载,3d加载真的是大工程! 示例代码流程图 函数中英文对照表,方便 日后开发,整理思路顺畅!!&am…

队列的概念及使用

目录 一. 概念 二. 队列的使用 三. 队列模拟实现 四. 循环队列 五. 面试题 一. 概念 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操…

2.1_7 线程的状态与转换、组织与控制

2.1_7 线程的状态与转换、组织与控制 (一)线程的状态与转换 (二)线程的组织与控制

迅为新全国产龙芯3A6000主板支持Loongnix、国产麒麟、通信、翼辉等系统

龙芯 3A6000 处理器完全自主设计、性能优异,代表了我国自主桌面 CPU 设计领域的最新里程碑成果。龙芯 3A6000 处理器的推出,说明国产 CPU 在自主可控程度和产品性能上已双双达到新高度,也证明了国内有能力在自研 CPU 架构上做出一流的产品。 …

[pdf]软件方法上册第二版自测题答案和解析-共144页

潘加宇 软件方法(上)业务建模和需求 第二版 自测题答案和解析,pdf文件,和书配套使用 已上传至CSDN资源。 也可到百度网盘下载,网盘地址: https://pan.baidu.com/s/1wEPFkJE7RUYvNUFxzAkCeQ?pwdumlc 提…

[linux][xdp] xdp 入门

xdp 全称 eXpress Data Path,是 linux ebpf 中的一个功能。ebpf 在内核中预留了一些插入点,用户可以在这些插入点插入自己的处理逻辑,当数据路过插入点时可以做一些预期的处理,具体实现方式如下: ① 用户编写数据处理…

@SpringBootApplication

目录 1. SpringBootApplication注解简介 2. 使用SpringBootApplication注解 3. 自定义SpringBootApplication注解 在Spring Boot中,SpringBootApplication是一个非常重要的注解,它用于开启自动配置,简化了我们的开发工作。本文将详细介绍这…

PCIe(二) —— 配置空间

在上一篇中,我们简单的介绍了PCIe的总体架构,设备树和主要组成部分,并且了解了如何通过lspci命令和Windows下的设备管理器来查看PCIe的系统结构。这一篇,我们来更加深入的看看PCIe中的设备相关的信息,如配置空间,来帮助我们了解PCIe和这些命令的工作原理。 1. It is all …