社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

放弃 Nginx;试一试基于 Rust 语言的 Pingora 框架

IT大咖说 • 1 年前 • 230 次点击  

说起 Nginx,这款已经发展了近 20 年的Web服务器,在Web开发者中无疑是家喻户晓的存在。然而,随着时代的变迁,一代强者终将谢幕,而新贵 Pingora 正在悄然崛起,准备接过网络代理的王座。今天,主要让我们一起揭开Pingora的面纱。

背景

Pingora 是 Cloudflare 开发的基于 Rust 编程语言的高性能网络服务器框架。早在 2022 年,Cloudflare 就宣布他们将放弃 Nginx,转而使用内部 Rust 编写的软件,名为 Pingora。当地时间 2 月 28 日,Cloudflare正式对外宣布开源 Pingora 框架。到目前为止,Github上已经有了17.5K的Start。

什么是Pingora

Pingora 是一个基于 Rust 的框架,用于构建快速、可靠和可编程的网络系统。经过多年的战斗考验,它展现出了卓越的性能表现,每秒处理的互联网请求数量已超过 4000 万次。

Pingora 提供了基于 HTTP/1、HTTP/2、TLS 甚至是 UDS 的库和 API,用于构建服务。作为代理,它支持 HTTP/1 和 HTTP/2 的端到端代理、gRPC 代理和网络接口代理。此外,它还计划在未来的路线图中支持 HTTP/3。Pingora 还配备了可定制的负载平衡和故障转移策略。

除了提供这些功能,Pingora 还提供了过滤器和回调,使用户能够完全定制服务应该如何处理、转换和转发请求。这些 API 将会让 OpenResty 和 Nginx 用户感到非常熟悉,因为许多映射到 OpenResty 的直觉也同样适用于 Pingora 的 "*_by_lua" 回调。

在操作上,Pingora 提供了零停机时间的优雅重启升级,而不放弃单一传入请求。系统日志、Prometheus、Sentry、Jaeger 和其他重要的可观察性工具也可以轻松集成到 Pingora 中。

什么场景下使用Pingora

  • 安全是首要任务的团队:对于使用 C/C++ 编写的服务来说,Pingora 提供了更安全的内存选择。因此,那些注重安全性的团队可能会受益。

  • 对性能极为敏感的服务:Pingora 具有快速和高效的特点。由于 Pingora 的多线程架构,客户节省了大量 CPU 和内存资源。对于那些对系统成本和/或速度非常敏感的工作负载来说,所节省的时间和资源可能具有非常吸引人的优势。

  • 需要大量定制的服务:Pingora 代理框架提供了高度可编程的 API。对于希望构建定制高级网关或负载平衡器的用户来说,Pingora 提供了强大而简单的实现方法。


系统要求

截止目前,Pingora只支持Linux系统。Pingora是一个库和工具集,而不是可执行的二进制,所以需要用户在Unix环境中编译。x86_64和aarch64体系结构都将得到支持。

有了Nginx,Cloudflare公司为什么还要构建另一个代理

Pingora 是 Cloudflare 使用 Rust 构建的新 HTTP 代理,不仅提升了性能还添加了新的功能,最为关键的是,新架构下仅需以往代理基础架构三分之一的CPU和内存资源。

虽然Nginx一直运行的很好,但是随着时间的推移,Cloudflare的业务规模以及需求已经超越了 Nginx 的处理能力。

Nginx 体系结构限制影响性能

在NGINX中,每个请求只能由一个worker提供服务。这导致所有CPU核心的负载不平衡,从而导致速度缓慢。由于这种请求进程固定效应,执行CPU繁重或阻塞IO任务的请求可能会减慢其他请求的速度。

其中,最关键的问题是连接重用性差。Nginx的机器建立到原始服务器的TCP连接,以代理HTTP请求。连接重用通过重用连接池中先前建立的连接,跳过新连接所需的TCP和TLS握手,加快了请求的TTFB(第一字节时间)。但是,NGINX连接池是针对每个工作进程的。当请求到达某个工作进程时,它只能重用该工作进程内的连接。当Nginx添加更多的NGINX工作者来扩大规模时,Nginx的连接重用率会变得更糟,因为连接分散在所有进程的更孤立的池中。这导致TTFB速度变慢,需要维护更多的连接,这会消耗Nginx和客户的资源。

某些类型的功能很难添加:

NGINX是一个非常好的web服务器、负载均衡器或简单的网关。但对于更高级、定制化的功能需求,它存在一些局限性。如果去尝试围绕 Nginx 构建所需功能,将面临着与上游代码库保持一致的挑战。

例如,在重试/失败处理请求时,有时用户希望将请求发送到具有不同请求标头集的不同源服务器。但这不是NGINX允许做的事情。在这种情况下,用户会花费时间和精力来解决NGINX的限制。

NGINX是纯C语言,在设计上是不安全的。使用这样的第三方代码库非常容易出错。即使对于经验丰富的工程师来说,也很容易遇到内存安全问题。补充C的另一种语言是Lua。它风险较小,但性能也较低。此外,在处理复杂的Lua代码和业务逻辑时,经常发现自己缺少静态类型。

NGINX社区也不是很活跃,这样的话,继续发展好像是“关起门来的”,极大限制了NGINX从社区获取帮助和解决方案的能力

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

结语

  • Async Rust:快速可靠

  • HTTP 1/2端到端代理

  • 基于OpenSSL或BoringSSL的TLS

  • gRPC和websocket代理

  • 优雅的重新加载

  • 可定制的负载平衡和故障切换策略

  • 支持各种可观测性工具

虽然目前 Pingora 处于 1.0 之前的阶段,尚不具备 API 稳定性,而且Cloudflare 目前没有计划支持非 Unix 操作系统。但是,在这个竞技场上,技术的进步和创新永不停歇。

项目地址:
https://github.com/cloudflare/pingora


来源:https://www.toutiao.com/article/7348361607196688931/?log_from=de329a307bb0c_1712797062942

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com





来都来了,走啥走,留个言呗~




 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!


相关推荐


推荐文章

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169024
 
230 次点击