这个选择并不是对两个框架的绝对判断。这是一种架构上的妥协,在这里记录了我们在代码和公共记录中验证的内容,而不是无法衡量的性能数据。
要点
Axum 不构建任何专有内容:它依赖 tower::Service 作为中间件,依赖 Hyper 进行传输,并禁止任何 unsafe代码。 Actix-web 嵌入自己的中间件系统(Logger、Session、CORS)、本机 HTTP/2,并且其本身引用 TechEmpower 框架基准作为速度证明。在 crates.io 上,Axum 目前的下载量超过 4.36 亿次,而 Actix-web 的下载量约为 7800 万次 - 尽管与它的劣势相差近四年。 Aurabase 选择 Axum 进行 Tower 组合,并在 11 个真实的 Cargo.toml 存储库中进行了验证,而不是为了未测量的性能数据。
两个框架,相同的 Tokio 基础
Axum 和 Actix-web 都运行在 Tokio 上,Tokio 是 Rust 中的参考异步运行时。 Actix-web README 直言不讳地指出了这一点——“完全兼容 Tokio”——并且其官方代码示例没有使用历史 actix 框架中的任何参与者:一个经典的 async fn 处理程序(注释为 #[get(...)])就足够了。 “Actix-web 必然需要 actor”这一混淆不再对应于当前的 API。
Axum 诞生于东京的直接轨道上:该存储库属于 GitHub 组织 tokio-rs,其官方文档也毫不含糊——“axum 旨在与 tokio 和 hyper 配合使用。运行时和传输层独立性不是目标,至少目前如此。”
因此,这不是两个竞争运行时之间的选择,而是在同一异步引擎之上构建 HTTP API 的两种方法之间的选择。此比较涵盖四个可验证的领域 - 中间件模型、声明的内存安全性、本机 HTTP 表面、在 crates.io 和 GitHub 上测量的采用率 - 然后通过支持代码解释为什么 Aurabase 的 Rust 核心 选择 Axum。
可组合中间件塔与集成系统
Axum 不构建任何专有的中间件系统。它完全依赖于 tower::Service:超时、跟踪、压缩、授权——根据它自己的自述文件,一切都是通过 Tower 生态系统“免费”实现的。为 Hyper 或 Tonic 应用程序编写的中间件可以按原样在 Axum 应用程序中重用,无需进行调整。
Actix-web 采用相反的路径:它嵌入自己的中间件系统(Logger、Session、CORS 等)(记录在其用户指南中)以及自己关联的 HTTP 客户端 (awc)。它是一个更加集成的平台——需要组装的部件更少,但与通用 Rust 异步生态系统的其余部分的直接重用也更少。
路由遵循相同的显式组合逻辑。 Axum 声称有一个用于声明路由的“无宏 API”—— Router::new().route(...) 仍然是一个普通的 Rust 值——其中 Actix-web 依赖于直接放置在处理程序上方的 HTTP 方法 (#[get(...)]) 的专用宏。两种说法风格,不是能力的区别。
Axum 的可组合性是有代价的:您必须添加 tower-http 才能获得 CORS、压缩或查询大小限制,而 Actix-web 在内部提供这些限制。开箱即用的集成与显式组合 — 一种真正的权衡,而不是一方的缺陷。
零个声明不安全,两个不同的 MSRV
Axum 在其源代码中声称 #![forbid(unsafe_code)]:框架 100% 是用安全的 Rust 编写的,没有漏洞。 Actix-web 并未在其自述文件中做出同等声明——这并不意味着该框架是危险的,只是该项目没有公开展示此类保证。
这两个框架设置了不同的 Rust 最低版本:Axum 从 Rust 1.80 开始兼容,Actix-web 需要 Rust 1.88。 Actix-web 的窗口更窄,如果您的工具链停留在旧版本上,这可能很重要。
各自原生提供的内容
Actix-web 直接在其包中列出了一个大型 HTTP 表面:HTTP/1.x 和 HTTP/2、WebSockets、透明压缩(br、gzip、deflate、zstd)、通过 OpenSSL 或 Rustls 的 TLS。一切都在一起,没有额外的依赖项可供选择。
Axum 故意保持最小化:路由、提取器、错误处理 - 其余部分(压缩、CORS、请求限制、跟踪)来自 tower-http,它是来自同一生态系统的配套箱。例如,Aurabase 仅启用 tower-http 的 cors、 trace、 compression-gzip、 request-id、 timeout 和 limit 功能 — 这是经过深思熟虑的选择,而不是整个包。
我们可以检查哪些内容,以及我们不重新发布哪些内容
Actix-web 通过引用精确的外部来源来宣称其速度:“根据 TechEmpower 框架基准是最快的 Web 框架之一”(r21 轮,复合),在其自己的 README 中直接链接到 techempower.com。这是您可以自行验证的报价类型。
阿克苏姆没有做出类似的声明。它的自述文件仅限于一个更温和的声明——“axum 是 hyper 之上相对较薄的一层,增加的开销非常小”——有两个第三方社区基准的链接,而不是官方项目数据。
Aurabase 目前尚未发布 Axum 与 Actix-web 在其自身生产负载上的任何量化比较。我们自己没有测量过的数字永远不会作为产品参数在这里重新发布 - 请参阅我们的 可重现基准方法,它的构建正是为了发布可验证的方法而不是纯粹的数字。
截至撰写本文时,crates.io 和 GitHub 的说法
在 crates.io上,Axum 的总下载量为 436,464,896,其中过去 90 天的 109,000,226 。 Actix-web 累计 78,074,020 下载量,包括在同一最近窗口上的 9,730,975(crates.io,2026 年 8 月 23 日访问)。在这一点上,差距是显而易见的:Axum 今天的最新下载量是 Actix-web 的大约 11 倍。
矛盾的是:Actix-web 是两者中较老的一个,自 2017 年 10 月起在 crates.io 上发布,而 Axum 则于 2021 年 7 月发布。在 GitHub 上,受欢迎度差距较小——tokio-rs/axum 有 26,931 颗星,而 actix/actix-web 有 24,793 颗星(GitHub,2026 年 8 月 23 日访问)——Actix-web 保留了更多分支(1,880 个)相比之下,有 1,462 名),这表明历史贡献者群体仍然活跃。
Actix-web 还远未被放弃:其版本 4.15.0 于 2026 年 8 月 21 日发布,即撰写本文的三天前。在 GitHub 问题队列中,Axum 显示了 75 个开放票证,而 Actix-web 则显示了 192 个开放票证——这是一个需要谨慎阅读的维护信号:几乎四年的历史记录机械化了更长的队列,这并不能证明项目不够谨慎。
Axum 的 README 本身警告其 main 分支正在准备具有重大更改的 0.9 版本 - crates.io 上发布的稳定分支仍然是 0.8.x。如果您从今天开始,请固定确切的版本,而不是遵循存储库的默认分支。
为什么选择 Axum,已在代码中验证
Aurabase 根 Cargo 工作区有 11 项服务。十个直接依赖于 Axum — 从 API 网关 (aura-gateway) 到本机 AI 引擎 (aura-ai),包括身份验证和存储。第 11 个 aura-migrator是一个没有 HTTP 服务器的迁移 CLI 工具:它根本没有什么可供选择。存储库中没有 Cargo.toml - 根 Cargo.lock 中也没有任何条目 - 声明 actix-web,即使在传递依赖中也是如此;并且没有 .rs 文件包含 use actix_web::指令。
这种选择并不是装饰性的:Aurabase 网关 (aura-gateway) 将其中间件与 tower::ServiceBuilder 和 Layer Tower 堆叠 — TraceLayer、 TimeoutLayer、 RequestBodyLimitLayer — 并通过 axum::middleware::from_fn 通过内部层补充请求标识符、身份验证和安全标头。这正是 Axum 的 README 所强调的组合模型:Tower 中间件独立于路由器的其余部分进行堆叠、测试和重用。
这里验证的是所选择的架构——真正的依赖关系,中间件的真正组成。没有声称有量化的性能提升:请参阅上一节,了解我们不会重新发布的内容。
Axum 和 Actix-web,并排
| 中间件 | 组合塔::服务,没有专有内容 | 集成系统(Logger、Session、CORS) |
|---|---|---|
| 内存安全 | 声明禁止(unsafe_code) | 无同等声明 |
| MSRV | 铁锈 1.80 | 铁锈 1.88 |
| 许可证 | 麻省理工学院 | Apache-2.0 或 MIT |
| 原生 HTTP | 路由+提取器;其余的通过 tower-http | HTTP/1.x、HTTP/2、压缩、集成 TLS |
| crates.io 下载量(总计) | 436 464 896 | 78 074 020 |
| 下载 crates.io(90 天) | 109 000 226 | 9 730 975 |
| GitHub 之星 | 26 931 | 24 793 |
| 自从在 crates.io 上 | 2021 年 7 月 | 2017年10月 |
| 由 Aurabase 使用 | 是 - 11 个 Rust 服务中的 10 个 | 否——没有直接或传递的依赖关系 |
来源:crates.io API(/api/v1/crates/axum、/api/v1/crates/actix-web)和 GitHub API,访问日期为 2026 年 8 月 23 日。其余部分请参阅官方自述文件 tokio-rs/axum 和 actix/actix-web。
谁应该选择什么
您启动了一个模块化、多服务 Rust 后端。 Axum 是一个自然的选择 - 它的 Tower 组合使得在服务之间共享中间件变得更加容易,就像 Aurabase 在其十个 HTTP 服务之间所做的那样。
您有一个现有且正在运行的 Actix-web 代码库。 不必急于迁移。 Actix-web 保持积极维护,并原生涵盖 HTTP/2、WebSockets 和压缩,无需额外依赖。
您希望在单个 crate 中提供尽可能多的 HTTP 功能,而无需自己组装 tower-http。 Actix-web 直接响应了这一需求。
您已经与其他 Hyper 或 Tonic (gRPC) 服务共享 Tower 中间件。 Axum 按原样重用这些层——这是 Aurabase 争论的焦点。