Jupyter 一次会话会拉几十次 auth_request(HTML shell / static / WebSocket / api/contents / autosave / kernels),每次都跑 JWT verify + WorkspaceMembers JOIN + Scripts.is_locked 查 + runtime RPC,重复开销大。 新增 module-level (workspace_id, user_id) -> payload 缓存: * 只缓存 membership 校验通过 + 拿到 runtime 信息的成功结果 (x-upstream-addr、x-jupyter-internal-token) * JWT 验签、lock check 仍每请求执行(前者是信任边界,后者 per-URI 状态易变) * TTL 5s,time.monotonic(),threading.Lock 保护 * 失败结果(lock 403 / runtime 500)不写缓存 折衷:被踢出 workspace 后最坏 5s 仍返 200;Runtime 单实例下 无需 Redis。新增 8 个 case 覆盖 hit/miss/TTL/lock-every-request/ jwt-every-request/failure-does-not-populate。
Backend
统一 FastAPI 管理服务。包含用户、Workspace、脚本、稳定版本、调度定义、
立即运行以及 S3 对象接口。原 platform_api 与 storage_api 已在此
模块合并,外部 REST 契约保持不变。
底层走的是 common.storage.AsyncStorageBackend 抽象,按
settings.storage_backend 切换 s3 / local 两种实现。