弃用 Nginx后,Pingora成为Web服务器界的新王者!

科技   2024-12-10 11:29   陕西  
Pingora 介绍——新一代 HTTP 代理服务
Pingora,简单来说,就是 Cloudflare 为了应对其庞大规模的 Web 流量,开发的一款超高性能 HTTP 代理服务。它基于 Rust 编写,目标非常明确:提升性能,降低资源消耗,并且解决 NGINX 在大规模应用中暴露出的种种瓶颈。

为什么要换?你可能会想,Nginx 是不是也挺厉害的,怎么就被放弃了呢?别急,接下来我带你分析一下。

2. 为什么要重新构建代理?

Cloudflare 的流量规模大家可能并不陌生。它可是全球最大规模的 Web 内容分发和安全服务提供商之一,处理着世界上每天上百亿、甚至上万亿个 Web 请求。对于这么庞大的流量,他们需要的是一个超高效且能够应对未来增长的解决方案。

Nginx 的限制

  1. 性能瓶颈:Nginx 使用的 worker 模型存在着资源调度不均的问题。具体来说,它通过多进程来处理请求,但是不同的 CPU 核心负载不均,导致了性能的浪费。尤其是在多核 CPU 上,Nginx 无法完全发挥硬件的性能优势。😕
  2. 修改难度大:Nginx 本身非常稳定,但它并不那么灵活。如果你需要根据自己的需求做复杂的定制,比如请求重试、复杂的错误处理等,你就得动手改它的源代码。问题来了,修改源码这种事儿不好做——修改起来很复杂,而且很容易出错,甚至有可能影响到系统的稳定性。
  3. 内存安全问题:Nginx 是用 C 语言写的,C 语言直接操作内存,虽然高效,但这也带来了内存安全问题。小心驶得万年船,代码一不小心就可能出现内存泄漏或崩溃,这对于一个高并发的 Web 服务来说是个大问题。


所以,Cloudflare 决定彻底换掉这个“老朋友”,用更现代的解决方案来迎接未来的挑战。

3. Pingora 的设计决策

为什么选择 Rust?

Rust 这几年迅速崛起,成为了许多性能要求极高的项目的首选编程语言。Cloudflare 选择 Rust,主要是看中它的两个特点:高性能内存安全。相比 C 语言,Rust 通过其独特的所有权机制,避免了很多内存管理上的问题,同时保持了接近 C 的性能。
而且,Rust 在并发处理上的表现相当优秀,这对于 Web 服务器来说尤为重要。Pingora 能够处理每秒上百万级的请求,性能上完全不输于 C 语言编写的传统代理服务器。

自建 HTTP 库

Nginx 在处理 HTTP 请求时,已经比较高效,但它的标准 HTTP 库可能不适合 Cloudflare 那种大规模的定制需求。Pingora 则通过自建的 HTTP 库,能够支持更多复杂、不符合 RFC 的流量。这意味着它能够更灵活地处理各种类型的请求,而不容易被“套路”了。⚙️

多线程 vs 多进程

Nginx 使用的是多进程模型,而 Pingora 则采用了多线程模型。多进程模型在一些场景下性能不错,但随着进程的增加,内存开销也随之增大,而且 CPU 资源无法高效共享。相比之下,多线程模型更加轻量,每个线程之间的上下文切换成本较低,可以更好地利用多核 CPU。Pingora 的多线程模型大大减少了资源的浪费,性能也更加稳定。

可编程接口

一个很酷的设计是,Pingora 提供了可编程接口,让开发者可以在请求生命周期的不同阶段添加自定义逻辑。简单来说,你可以根据自己的需求,灵活地插入一些处理逻辑,比如自定义错误处理、请求重试、流量调度等。就像你编写一个函数一样,直接在合适的时机“注入”到处理流程中。

4. Pingora 性能提升

Cloudflare 在实际运行中对 Pingora 的表现进行了大量测试,结果令人惊讶。
  1. 响应时间提升:Pingora 在处理请求时,TTFB (第一个字节时间) 中位数减少了 5 毫秒,第 95 百分位数减少了整整 80 毫秒!这意味着用户请求的响应速度更快,体验更流畅。
  2. 连接重用率大幅提升:Pingora 在连接重用方面表现得非常出色。它将连接重用率从原来的 87.1% 提高到 99.92%!这直接导致了新连接数大幅减少,减少了 TCP 握手的开销,节省了大量的资源。想象一下,原本每次请求都需要重新建立连接,现在能重复使用已经建立的连接,不仅节省时间,还能减轻系统负担。
  3. 节省 CPU 和内存:Pingora 在 CPU 和内存上的消耗分别减少了 70% 和 **67%**!也就是说,在处理同样规模的请求时,Pingora 用更少的资源完成了更多的工作。效率简直让人拍案叫绝。

5. Pingora 功能扩展

除了基础的性能提升,Pingora 还在功能上进行了很多扩展。
  1. 支持新协议:Pingora 支持 HTTP/2 和 gRPC 上游协议,这对大规模分布式系统非常有用,尤其是在处理 API 请求时,gRPC 的低延迟优势更是能有效提升系统整体的响应速度。
  2. Cache Reserve 功能:为了进一步提升性能,Pingora 集成了 Cloudflare 自家的 R2 存储作为缓存层,这可以大大加快静态资源的加载速度,减少了对后端服务器的压力。

6. Pingora 安全性提升

安全性是每个开发者都不能忽视的一个话题。Pingora 在这方面做了大量工作,尤其是在内存安全上。
  1. 内存安全:Rust 本身就是为了避免内存问题而设计的。通过 Rust 的所有权机制,Pingora 不仅提高了性能,还减少了未定义行为的风险。相比 C 语言的裸指针操作,Rust 的内存管理更加安全,系统崩溃的概率也大大降低。
  2. 稳定性:Pingora 已经处理了数百万亿个请求,而服务崩溃的事件极为罕见。这种高稳定性让它在面对云端的高并发、高流量时,依然能够保持良好的性能。

7. 结语

所以,总结一下,Pingora 比 NGINX 更快、更高效、更安全,同时也更加灵活。它的设计决策和性能优化让它成为了 Web 服务器的新王者,尤其是在大规模、高并发的场景中,它的表现更是让人刮目相看。
如果 Cloudflare 在未来有开源 Pingora 的计划,那一定会给整个 Web 服务生态带来一次巨大的震动。毕竟,Rust 加上高效的设计,才是未来 Web 服务的标配。对于我们这些程序员来说,这真的是一个值得关注的技术趋势。💡
好了,不多说了,先去学习一下 Pingora 的源码,搞不好下一个 Web 服务架构革新者就是你!😎
对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章