背景
Axum 用起来很顺手,但真实项目里经常出现一个隐性问题:
- 中间件越加越多
- 顺序靠经验调整
- 出故障时不知道是哪个层拦住了请求
推荐分层
从外到内通常建议:
- request id / tracing
- panic recover
- 全局限流
- 认证鉴权
- 业务路由
let app = Router::new()
.route("/api/user", get(get_user))
.layer(TraceLayer::new_for_http())
.layer(RequestIdLayer::new())
.layer(TimeoutLayer::new(Duration::from_secs(2)));
总结
中间件不是“越多越安全”,而是“每层职责清晰、顺序可解释”。
发布前做一次链路压测,往往能提前发现大部分分层问题。
架构清晰的系统,异常路径也应该清晰。