标准答案

  1. 在请求入口 run 一个新的 store,后续受支持的异步资源可以读取同一上下文。
  2. 只放最小、不可变或受控字段,租户和用户权限仍需在资源访问处重新校验。
  3. 后台任务应显式复制必要信息并定义生命周期,不能永久持有整个请求对象。
  4. 测试要并发运行不同上下文,确认日志、指标和跨请求结果没有串台。

题目解析

AsyncLocalStorage 可以沿受支持的异步资源传播 request ID、trace 和少量上下文,但它不是全局当前用户变量,也不会自动传播取消、授权或数据库事务。

store 应尽量小且不可变,用户和租户权限要在资源访问处重新校验。后台任务只复制完成任务所需的字段,并定义任务生命周期,不能长期持有整个 request 对象。

连接池、Worker、事件监听器和长生命周期回调容易把上下文带到错误请求。并发测试不同 request 的 ID、租户和异常路径,确认日志和指标不会串台。

常见误区

  • 误区:把全局 store 当作当前用户。改正:在请求入口创建独立上下文,并在资源访问处重新鉴权。
  • 误区:异步任务长期持有 request。改正:只复制必要的不可变字段,并设置任务过期和清理。
  • 误区:在连接池回调中复用过期上下文。改正:显式传递上下文或重新建立边界,测试连接复用和异常路径。

作者信息