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