云安全相干博客阅读(四)

[复制链接]
发表于 2025-10-11 01:20:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
How we built Pingora, the proxy that connects Cloudflare to the Internet

基于 Rust 构建 Pingora,作为 Nginx 的替换方案;
Nginx 作为常用署理服务,广泛应用于 CDN、WAF、Stream、Tunnel 等场景,是底子网络办法
然而,Nginx 在作为客户端-服务端署理时,存在以下不敷:

  • master-worker 历程架构导致的毗连池不复用
    Nginx 是多历程架构,master历程作为管理历程处理处罚reload等下令;其管理的多个worker历程举行现实的网络处理处罚,完成署理使命。处理处罚客户端毗连时,由master历程担当后分发给每个woker,客户端毗连是共享的。但是,多个worker之间不能共享与后端的TCP毗连,每个worker历程有本身的毗连池。
当多个客户访问同一个后端服务,哀求到每个worker历程后分别与后端创建毗连,这导致Nginx有较多的资源和内存浪费。
如果可以或许让多个worker历程复用毗连池,将能很好地节流资源。
Nginx 可以或许很好地做到 web 服务器,负载平衡,署理服务等工作,但是现实应用时通常须要实现更多的逻辑和功能。比如,作为署理服务时,如果想实现一个功能:当后端相应失败时,哀求别的备用服务后端,再举行返回。就会比力难,这并不在 Nginx 架构的界说之内,实现很复杂。
因此,对 Nginx 的架构做出调解,有利于此类底子办法的更广泛的应用。

  • 内存安全与静态范例的困难
Nginx 是基于 C 语言实现的,而 C 语言是内存不安全的,增长模块或改进时都很容易出现内存溢出标题,这是一个网络底子办法步伐不应该存在的标题。
只管有 Openresty 的实现,可以或许通过 lua 代码对 nginx 举行扩展。lua 只管是内存安全的脚本,但是其是动态语言,当利用 lua 实现复杂的功能、界说复杂的数据对象时,代码维护难度很大。
因此,办理 C 语言内存安全的标题,而且能会用范例安全、静态的语言实现扩展模块,将会加强此类底子办法的本领。
因此,基于 Rust 语言实现的 Pingora 成为相识决方案。Pingora 具有以下特性:

  • 多线程架构替换多历程架构
Pingora 采取多线程架构实现,使得毗连池可以被共享,镌汰了与后端服务的毗连。

更换了Nginx的master-worker多历程架构,节流了网络资源。

  • 实现类似Openresty的哀求生命周期管理
为了方便对Pingora举行扩展,将底子组件和扩展功能举行了分离,而且实现了生命周期分别和扩展实现。这使得原先的Nginx开发者可以或许安稳过渡到Pingora,且能实现更多功能的扩展。

  • 基于Rust实现内存安全
基于Rust实现,办理了 C 语言的内存标题。

  • 更多的特性
基于HTTP/2 upstream,增长了支持到Pingora中,可以实现grpc的署理。
利用 R2 storage 作为缓存署理,实现高效的内容缓存服务。
Open sourcing Pingora: our Rust framework for building programmable network services

基于Pingora的功能,可以资助有以下需求的应用开发:

  • 内存安全需求,办法运行稳固性要求高
  • 性能敏感需求,须要低运行斲丧,镌汰内存资源斲丧
  • 客户定制化需求,在署理服务器之上,须要实现定制化的功能
Pingora的特性:

  • 多种协议的署理:As a proxy, it supports HTTP/1 and HTTP/2 end-to-end, gRPC, and websocket proxying. (HTTP/3 support is on the roadmap.)
  • 满足定制化开发需求:Pingora provides filters and callbacks to allow its users to fully customize how the service should process, transform and forward the requests
  • 运维管理方便:Pingora provides zero downtime graceful restarts to upgrade itself without dropping a single incoming request
  • 运维监控监控方便:Syslog, Prometheus, Sentry, OpenTelemetry and other must-have observability tools are also easily integrated with Pingora as well
总结

Pingora 实现了很多网络底子库,实现了原先 Nginx 的功能。但是,其现在重要是提供了代码库实现,还没有做到 Nginx 可以用 conf 设置文件实现复杂功能的本领。即当前只是支持利用 Pingora 库,本身再写代码实现所需的功能,还无法像用 Nginx 那样直接设置conf就可以实现很多需求。
总的来说,Nginx 已经是一个成熟的软件(其可扩展)。但是 Pingora 是一组底子代码库的聚集,基于这些底子库可以实现原先Nginx 可以实现的功能,而不是“设置出”原先Nginx可以实现的功能。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表