为什么我们创建了 HttpArena —— 更佳的 HTTP 框架基准测试方式

发布: (2026年3月15日 GMT+8 22:06)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将按照要求保留原始链接、格式和代码块,仅翻译文本部分。

问题

每个框架都声称自己很快。博客文章用单一的纯文本端点、单一的并发级别、单一的指标来对 X 与 Y 进行基准测试。结果在五分钟内很有趣,随后新版本发布,一切都改变了。

开发者面临的真正问题更难:哪个框架在我的工作负载下表现最佳? 没有人能回答,因为大多数基准测试并未测试真实工作负载。

什么是 HttpArena?

HttpArena 是一个开源基准测试平台,在专用、可复现的硬件上对 16 种不同的测试配置 进行 HTTP 框架测试。没有云虚拟机。没有噪声邻居。相同的机器、相同的负载生成器、相同的条件适用于每个框架。

源码位于 GitHub,结果实时展示于 。

为什么有 16 个测试配置?

单一的“每秒请求数”在没有上下文的情况下几乎没有意义。HttpArena 在一系列真实场景下对框架进行测试。

连接行为

  • 基准:在 512、4 K、16 K 和 32 K 并发连接下——当你提升连接数时,性能如何伸缩?
  • 流水线——每个连接 16 个请求的 HTTP 流水线。
  • 受限连接——在受限连接池下的连接复用。

真实工作负载

  • JSON 处理——解析数据集,计算派生字段,序列化响应。
  • 压缩——实时对大负载进行 gzip 压缩。
  • 上传——处理不同大小的请求体。
  • 数据库——并发负载下的 SQLite 查询。

稳健性

  • 噪声——混合有效请求、错误方法和不存在的路径。服务器能保持稳定吗?
  • 混合——所有端点类型同时被访问。这最接近真实世界的流量。

协议

  • HTTP/2 与 HTTP/3——针对支持这些协议的框架。
  • 静态文件服务(通过 HTTP/2)。
  • gRPC——单向调用(有 TLS 与无 TLS)。
  • WebSocket——回显服务器性能。

在纯文本处理上表现出色的框架,可能在 JSON 序列化时崩溃。能够优雅处理 512 条连接的框架,可能在 32 K 时出现瓶颈。单独每项测试都拿高分的框架,可能在所有端点同时被访问时出现竞争问题。单一配置的基准测试根本看不到这些情况。

有何不同

可复现性

每个框架都在相同的专用硬件上的 Docker 容器中运行。Dockerfile、源代码和测试配置都在仓库中。任何人都可以克隆仓库并复现结果。

正确性优先

在进行任何性能测试之前,所有框架都会通过一个 18 点验证套件,检查:

  • 对查询参数和请求体进行正确的算术运算。
  • 使用随机输入进行防作弊(没有硬编码响应)。
  • 正确的 HTTP 状态码(缺少路由返回 404,错误方法返回 4xx)。
  • 正确的 Content-Type 头。
  • 处理带计算字段的有效 JSON。
  • 实际进行压缩的 Gzip。
  • 对异常请求的韧性。

如果框架未通过验证,则不会进行基准测试。如果服务器没有正确工作,性能数据毫无意义。

同等比较

每个框架实现相同的端点并表现相同的行为。JSON 端点处理相同的数据集。压缩端点对相同的负载进行 gzip。数据库端点执行相同的查询。唯一的变量是框架本身。

不断增长的框架列表

我们目前在包括 Rust、Go、C、C++、Java、C#、JavaScript(Node、Bun、Deno)、Python、Ruby、Lua 等语言中测试 35+ 框架。新框架会定期加入——最近加入的有 Crystal、Zig、Nim、Swift 和 Gleam。

添加你的框架

添加框架的步骤很简单:

  1. 创建 Dockerfile — 多阶段构建,最小运行时镜像。
  2. 实现端点/baseline11/pipeline/json/compression/upload,以及可选的 /db/baseline2(HTTP/2)、/static/*
  3. 添加 meta.json — 声明你的框架订阅了哪些测试配置。
  4. 提交 PR — 验证会在 CI 中自动运行。

查看 frameworks/ 目录下的任意已有框架,即可获得可运行的示例。如果你熟悉自己的框架,整个过程大约只需一小时。

谁适合?

  • 选择框架的开发者 — 查看候选框架在多种工作负载下的表现,而不仅仅是纯文本。
  • 框架作者 — 获取多维度的性能数据,并以标准化方式与生态系统进行比较。
  • 性能工程师 — 可复现的开源基准测试,可在自己的硬件上运行。
  • 好奇者 — 有时你只是想知道事物能跑多快。

查看

  • 实时结果:
  • 来源与贡献:

我们在公开的环境中构建此项目,并积极欢迎贡献。如果您喜欢的框架尚未出现,请添加。如果您认为我们的方法可以改进,请提交 issue。我们的目标是为社区提供最有用、最真实的基准数据。

0 浏览
Back to Blog

相关文章

阅读更多 »

关于 JavaScript 的简介

介绍 在今天的课堂上,我学习了 JavaScript 的简短介绍,所以我将在这篇博客中分享一些关于 JavaScript 的事实。什么是 JavaScript?JavaScr...

现代 JavaScript:理解 ES6 类

封面图片:Modern JavaScript:Understanding ES6 Classes https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%...