5

​放弃Nginx!Cloudflare一招反超Apache!

 1 year ago
source link: https://www.51cto.com/article/748128.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

​放弃Nginx!Cloudflare一招反超Apache!

原创
作者: 千山 2023-03-03 13:14:46
根据网络咨询服务公司Netcraft的调查报告,今年1月在前100万个最繁忙的网站中,Cloudflare以21.64%的市场份额,一举越过Apache(21.40%)和Nginx(21.20%),从第3位跃升至首位,成为最受欢迎的Web服务器。

​撰稿丨千山

近日来,网站安全和托管服务供应商Cloudflare可以说春风得意。

根据网络咨询服务公司Netcraft的调查报告,今年1月在前100万个最繁忙的网站中,Cloudflare以21.64%的市场份额,一举越过Apache(21.40%)和Nginx(21.20%),从第3位跃升至首位,成为最受欢迎的Web服务器。

之后,在国际权威研究机构GigaOm发布的全球CDN服务雷达报告中, Cloudflare又在15个供应商的解决方案中脱颖而出,被评为“领导者”和“表现卓越者”。

图片

图源:GigaOm官网。(注:如图所示,GigaOm 雷达报告在一系列同心圆上评估,越靠近中心的解决方案整体价值越高。)

成立于2009年的Cloudflare以向用户提供网站安全管理、性能优化及相关的技术支持为主要业务。在技术上,这家公司很长一段时间都将Nginx视为核心,用于其提供的所有Web服务中,但这一状况在去年发生了变化。

2022年9月,Cloudflare宣布用自研的以Rust编写的Pingora取代了Nginx,旨在构建一个更快、更高效、更安全的全新HTTP代理。这一决策在当时也引起了一些猜测,不过从目前来看,彼时果断地改弦易辙正逐步展露成效。

1、为什么要舍弃Nginx?

Cloudflare之所以会放弃Nginx,简单来说,就是Nginx已经无法满Cloudflare日益增长的业务需求。

对此,Cloudflare的官方技术博客曾专门发文进行了解释,将Nginx的种种局限性主要归因为三点:

其一,架构限制影响性能。Nginx的worker(进程)架构对于Cloudflare的用例而言存在操作缺陷,导致损害性能和效率。

其二,某些功能类型难以添加。围绕Nginx构建所需功能时要尽量避免与Nginx上游代码库有太多分歧,这无疑会增加难度。而且Nginx是纯用C语言编写的,在设计上不能保障内存安全性。使用这样的第三方代码库非常容易出错。用来补充C语言的另一种编程语言Lua虽然风险较小,但性能也较差。

其三,社区活跃度不高。Nginx社区本身不是很活跃,开发往往是“闭门造车”。

当然,上述局限性中更致命的还是第一点。就像Cloudflare工程师在文中一针见血地指出:“对于我们的用例来说,最关键的问题是糟糕的连接重用。”

图片

截图:https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/

简单来说,在Nginx中每个请求只能由单个worker处理。这会导致所有CPU内核的负载不平衡,从而导致处理速度变慢。

代理层节点机器与源服务器建立TCP连接,以代理HTTP请求。连接重用通过重用之前从连接池建立的连接,跳过新连接所需的TCP和TLS握手,来加快请求的TTFB(首字节时间)。

但是,Nginx连接池是按worker划分的。当请求到达某个worker时,它只能重用该worker内的连接。当我们添加更多Nginx worker以进行扩展时,连接重用率会变得更差,因为连接分散在所有进程的更多隔离池中,不仅会导致响应时间变慢,也会消耗额外的硬件资源。

图片

图源:Cloudflare官方技术博客

针对这一问题,Cloudflare技术团队虽然尝试过种种优化方案,但最终发现只要Nginx Work(进程)架构不变,还是治标不治本。

2、身处三岔口的抉择

放弃Nginx,选择自研,也并非一蹴而就。Cloudflare经历了几年的持续评估,当时,他们主要面临三种选择。

其一,继续投资Nginx,并使用Fork版本来让其完全适配业务需求。尽管Cloudflare团队的专业储备过硬,但鉴于上述架构限制,必然要付出大量时间和努力才能实现重建。

其二,迁移到另一个第三方代理代码库。考虑使用别的好项目,比如envoy 。但这条道路意味着在几年内可能会重复同样的循环——不断探索试错,才能逐步磨合。

其三,从头开始,建立一个内部平台和框架。这一选择需要在开发方面进行大量的前期投资。但优点是能从起点就百分之百围绕Cloudflare的用例服务。

站在三叉路口,没有人能笃定那条道路就一定是光明坦途。正如Cloudflare的技术人员在回顾这段时间时谈到的:“在几年的时间里,我们继续走阻力最小的道路,继续增强Nginx。然而,在某些情况下,建立自有代理的投资回报率似乎更值得。我们呼吁从头开始建立一个代理,并开始设计我们梦想中的代理应用程序。”

如今,结果我们也看到了。他们坚定地迈向了第三条路——构建全新的代理架构,这就是用Rust编写的Pingora。

从零开始造轮子并非易事,但Pingora的表现却并不让人失望。据介绍,Pingora每天处理超过1万亿条请求,提高系统性能之余,也为Cloudflare客户带来不少新功能。更重要的是,它运行所占用的CPU和内存资源只相当于原有代理基础设施的三分之一。

3、用Rust重写Nginx模块

自去年9月的发布以来,Cloudflare团队在“去Nginx化”的道路上一直在低调前行。日前,Cloudflare在其官博上介绍了如何使用Rust重写Nginx模块。

“我们的工程师们用Rust为Cloudflare基础设施中最古老和最不为人所知的部分 ——cf-html,编写了替代品,通过完成这项工作为我们完全摆脱Nginx铺平了道路”

cf-html是一个Nginx模块,位于Cloudflare的核心反向Web代理内部,亦称为FL (Front Line)。FL运行着Cloudflare应用程序服务的大部分逻辑,因此这次替换如果能顺利完成,无疑会更具标志性。

图片

图源:推特@Cloudflare

Cloudflare方面表示,未来他们会继续逐步更换用于运行Nginx/OpenResty代理的组件,或者无需对自研平台投入大量开发资源就可以完成的组件,从而构建一个没有Nginx的未来 。

最后Cloudflare还提到了Rust带来的优势:“很难想象如果没有像Rust这样的语言,我们会处于怎样的境地,因为Rust在提供速度的同时又提供了高度的安全性,还有像Bindgen和Serde这样的高质量库。”

“更宽泛地说,FL团队正在努力将平台的其他方面迁移到Rust中,虽然cf-html和围绕其构建的功能是我们基础架构中需要改进的关键部分,但还有许多其他方面需要改进。”

“多数人认为编程语言的安全性主要是用于预防错误,但对于一家公司来说,我们发现编程语言的安全优势还可以用来完成一些被认为非常困难、或不可能安全实现的功能需求。”

4、结语:“去Nginx化”成趋势了吗

就Cloudflare这个案例来说,Pingora比Nginx的表现更高效更安全,并不意味着Rust比C语言好,也并不表示Pingora在任何场景下都优于Nginx,而是Pingora更适合Cloudflare的用例。

CDN的规模导致了其对微小抖动的敏感性,同时底层基础设施的技术改进也是Cloudflare这样的公司点燃其革新火种的助力之一。Cloudflare选择了对他们的业务模型表现更佳的解决方案。

但是我们注意到,近年来一些大厂在“去 Nginx”上动作频频。比如:

(1)Dropbox从Nginx迁移到了Envoy;

(2)百度开源采用GO语言的BFE;

(3)阿里巴巴云原生网关Higress基于Envoy,支持Nginx Ingress零成本快速迁移 。

不可否认,Nginx在反向代理、负载均衡方面表现出色,但“C+Lua”的组合也的确很难在性能和安全上实现两全。作为时代的产物,Nginx或许不能被轻易进行比较,但“去Nginx化”似乎正在成为一种趋势。

参考链接:

https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/

https://news.netcraft.com/archives/2023/01/27/january-2023-web-server-survey.html

https://twitter.com/Cloudflare/status/1629119206770847744?s=05

责任编辑:武晓燕 来源: 51CTO技术栈

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK