← 返回信息流
AI 资讯Hacker News·3 小时前

ZeroServe 兼容 Caddy:吞吐量提升3倍,延迟降低70%

原标题:Caddy compatibility for zeroserve: 3x throughput and 70% lower latency

速览

ZeroServe 宣布新增对 Caddy 的兼容性支持,旨在优化网络服务性能。这一更新使得系统吞吐量提升了3倍,同时将延迟降低了70%。该改进为开发者提供了更高效的反向代理和负载均衡解决方案。

AI 深度解读

Caddy 兼容性加持:zeroserve 实现吞吐量提升 3 倍、延迟降低 70%

背景

在高性能网络服务领域,追求极致的吞吐量与极低的延迟始终是核心目标。传统的 HTTPS 服务器通常运行在用户态(userspace),虽然灵活,但在处理高并发请求时,往往受限于上下文切换、内存拷贝以及复杂的协议栈处理开销。

zeroserve 是一个新兴的高性能 HTTPS 服务器,其核心创新在于允许在用户态运行 eBPF(extended Berkeley Packet Filter)脚本。eBPF 原本主要用于内核空间的安全监控和网络过滤,但 zeroserve 将其应用扩展到了用户态的 HTTP 处理逻辑中,旨在通过更底层的执行效率来突破传统 Web 服务器的性能瓶颈。

近期,zeroserve 引入了 Caddy 兼容性模式。这一更新使得用户可以直接使用熟悉的 Caddyfile 配置文件,zeroserve 会将其即时编译(JIT)为 eBPF 代码,进而编译为原生 x86_64/ARM64 机器码,并在 io_uring 事件循环中运行。这一特性不仅保留了 Caddy 的易用性,还赋予了其接近内核级的执行性能。

核心内容

1. 技术架构与工作原理

zeroserve 的 Caddy 兼容模式并非简单的兼容层,而是一个完整的编译与执行流水线:

  • 配置解析:当提供标准的 Caddyfile 时,zeroserve 会解析其中的路由、中间件和反向代理规则。
  • 即时编译(JIT):解析后的配置被转换为 eBPF 字节码,随后进一步编译为针对特定架构(x86_64 或 ARM64)的原生机器码。
  • 高效执行:编译后的代码在基于 io_uring 的事件循环中运行。io_uring 是 Linux 内核提供的一种高效异步 I/O 接口,能够显著减少系统调用开销,提升 I/O 处理效率。

2. 性能表现

根据项目提供的基准测试数据(基于 CI 环境),在以下硬件配置下:

  • CPU:AMD Ryzen 7 3700X
  • 角色:HTTPS 反向代理
  • 线程数:2 个线程

zeroserve 相比传统方案实现了:

  • 吞吐量提升 3 倍
  • 延迟降低 70%

3. 快速上手指南

用户可以通过简单的命令行步骤体验这一功能:

  1. 下载二进制文件
    curl -fL -o zeroserve https://github.com/losfair/zeroserve/releases/download/v0.2.11/zeroserve-$(uname -m)-linux
    
  2. 赋予执行权限
    chmod +x zeroserve
    
  3. 启动服务(指定 Caddyfile 路径):
    ./zeroserve --caddy /etc/caddy/Caddyfile
    
  4. 测试访问
    curl http://127.0.0.1:8080
    

4. 高级功能:自定义 eBPF 中间件

zeroserve 支持运行图灵完备的 eBPF 代码,并允许从 Caddyfile 中调用自定义代码。这使得开发者可以编写高性能的中间件来处理复杂的业务逻辑。

示例场景:S3 兼容存储的反向代理与 AWS SigV4 认证

假设需要反向代理一个路径到 S3 兼容的存储桶,并需要 AWS SigV4 认证,开发者可以执行以下步骤:

  1. 获取插件代码:下载 io.su3.aws-sigv4.c 文件。

  2. 配置 Caddyfile

    example.com {
        route /s3/* {
            uri strip_prefix /s3
            rewrite * /my-bucket{uri}
            
            # 调用 eBPF 中间件 io.su3.aws-sigv4.o 中的 sign_request 方法
            zeroserve_call io.su3.aws-sigv4 sign_request {
                access_key_id "minioadmin"
                secret_access_key "minioadmin"
            }
            
            reverse_proxy http://127.0.0.1:9000
        }
    }
    
  3. 启动命令

    # zeroserve --plugin io.su3.aws-sigv4.c --caddy Caddyfile
    

这种机制允许开发者将复杂的认证、转换逻辑以接近原生代码的速度执行,而无需依赖传统的、较慢的脚本语言或外部进程。

关键要点

  • 性能飞跃:通过 eBPF 和 io_uring 的结合,zeroserve 在相同硬件下实现了 3 倍的吞吐量和 70% 的延迟降低。
  • Caddy 生态兼容:引入了 Caddyfile 支持,使得熟悉 Caddy 的用户可以无缝迁移或并行使用,降低了新技术的学习门槛。
  • JIT 编译技术:将声明式的配置文件即时编译为原生机器码,消除了传统解释型配置解析的性能开销。
  • 灵活的扩展性:支持用户态运行图灵完备的 eBPF 代码,允许通过 .c 文件编写自定义中间件(如 AWS SigV4 签名),并通过 zeroserve_call 指令在配置中直接调用。
  • 异步 I/O 优化:底层依赖 Linux 的 io_uring 事件循环,最大化了 I/O 操作的并行处理能力。

意义与影响

zeroserve 的 Caddy 兼容模式标志着高性能 Web 服务器领域的一个重要进展。它证明了通过利用现代 Linux 内核特性(如 eBPF 和 io_uring),可以在用户态实现接近内核级的网络处理性能,同时保持高层配置语言的易用性。

对于 DevOps 工程师和系统架构师而言,这一工具提供了在极端高并发场景下优化 HTTPS 服务的新选择。特别是在需要处理大量静态资源转发、API 网关或边缘计算节点时,zeroserve 的低延迟和高吞吐量特性可能带来显著的基础设施成本节约和用户体验提升。此外,其插件化架构为未来集成更多高性能中间件(如自定义负载均衡算法、高级缓存策略)打开了大门。

查看原文 →su3.io