
没有NGINX和OpenResty的未来:Cloudflare工程师用Rust重构现有功能面临的挑战
Cloudflare公司正面临着一项重大的技术转型。随着每年处理的网络流量成倍增长,他们依赖的NGINX作为HTTP代理堆栈的一部分已经不能满足业务需求。面对这样的挑战,Cloudflare的工程师们开始将焦点转向Rust,一个能提供内存安全优势、更现代功能以及其他优势的语言。
在过去,NGINX和OpenResty在Cloudflare的网络架构中扮演着重要的角色。但随着业务规模的扩大,这套系统的局限性逐渐显现。Cloudflare开始寻找替代方案,以建立一个更快、更高效、更通用的内部代理,作为他们当前和未来产品的平台。他们已经开始用Rust编写新的框架,用以替换旧的NGINX/OpenResty代理。
在转向Rust的过程中,Cloudflare工程师们遇到了许多挑战。其中最大的挑战来自于NGINX模块系统的灵活性,这种灵活性使得匹配特定用例的工作方式复杂化。使用Rust和NGINX之间的响应数据处理方式也带来了不小的困扰。Cloudflare工程师在编写用于操作响应的Rust模块时,需要确保高效处理响应主体中的块,并确保Rust与NGINX之间的同步。
另一个挑战是背压问题。当ROFL因为需要注入大量代码而增加响应的大小时,如果NGINX的输出速度超过了其他下游模块的处理速度,可能会导致数据丢失或HTTP响应主体被截断。为了解决这个问题,他们创建了一种特殊的链来存储这些被称为saved-in的块,并采用一种特殊的方法完成附加。
Cloudflare的工程师们正在逐步替换掉用于运行NGINX/OpenResty代理的组件,以构建一个没有NGINX的未来。他们深信,Rust的普及将把那些曾经困扰开发行业的内存安全问题丢进历史的垃圾堆。实际上,他们正在更多的Rust工程师来加入他们的团队,共同推进这一技术转型。
