专栏名称: IT大咖说
大咖干货,不再错过。 让不在大会现场的程序猿、攻城狮也能体验现场的精彩瞬间。
目录
相关文章推荐
新加坡眼  ·  十余年前震惊全岛,新加坡前警察今日正法! ·  12 小时前  
新加坡眼  ·  黄循财深情演绎霉霉名曲 ·  昨天  
蛋先生工作室  ·  2025年开市价“恶意低开”? ·  昨天  
幸福成长札记  ·  第59天在闲鱼上卖货,售后吐槽过后,继续赚钱 ·  3 天前  
阿里研究院  ·  通义两大模型,正式开源! ·  1 周前  
51好读  ›  专栏  ›  IT大咖说

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

IT大咖说  · 公众号  ·  · 2024-04-11 09:02

正文

说起 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大咖说”欢迎广大技术人员投稿,投稿邮箱:[email protected]





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




 IT大咖说  |  关于版权 

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





请到「今天看啥」查看全文