Firebase Admin Node 中并发请求的令牌优化策略
在 Firebase Admin Node 项目中,开发者发现了一个关于消息发送接口的性能优化点。当使用 Messaging#sendEach 方法批量发送消息时,系统会为每条消息单独获取访问令牌,这在并发场景下会导致不必要的令牌获取请求。
问题背景
Firebase Admin SDK 中的消息发送功能需要有效的访问令牌来授权 API 调用。在批量发送场景下,每条消息都会触发一个独立的 HTTP 请求。虽然 SDK 内部实现了令牌缓存机制,但由于这些请求是并发执行的,缓存机制无法有效发挥作用。
具体表现为:当多个请求几乎同时到达时,每个请求都会检查缓存并发现令牌需要刷新,于是各自发起独立的令牌获取请求。这不仅增加了网络开销,还可能导致短时间内产生大量冗余请求。
解决方案分析
针对这个问题,项目维护者提出了两种可能的解决方案:
-
预获取令牌方案:在发送批量请求前预先获取令牌,然后将该令牌注入到每个发送请求中。这种方法直接避免了并发获取令牌的问题,但需要对现有请求处理流程进行一定改造。
-
令牌请求合并方案:改进
getToken()方法的实现,使其能够识别并合并并发的令牌刷新请求。当多个调用同时请求令牌时,系统只执行一次实际的刷新操作,并将同一个 Promise 返回给所有调用者。
经过讨论,第二种方案被认为更具通用性,因为它不仅解决了消息发送场景的问题,还能惠及所有需要授权访问的并发请求场景。
技术实现细节
令牌请求合并的核心实现思路是:
public getToken(forceRefresh = false): Promise<FirebaseAccessToken> {
if (forceRefresh || this.shouldRefresh()) {
if (!this.isRefreshing) {
this.promiseToCachedToken_ = this.refreshToken();
}
return this.promiseToCachedToken_
}
return Promise.resolve(this.cachedToken_);
}
这段代码引入了几个关键机制:
isRefreshing标志位:作为锁机制,防止重复刷新- 共享 Promise:所有并发请求共享同一个刷新操作的结果
- 缓存机制:在令牌有效期内直接返回缓存结果
方案优势
这种改进方案具有以下优点:
- 减少网络请求:有效避免了令牌刷新请求的"惊群效应"
- 保持API兼容性:不需要改变现有方法签名和使用方式
- 通用性强:适用于所有需要授权访问的场景
- 实现简洁:改动量小,风险可控
总结
在分布式系统和并发编程中,资源共享和请求合并是常见的优化手段。Firebase Admin Node 通过对令牌获取逻辑的改进,展示了如何优雅地处理并发场景下的资源竞争问题。这种模式也可以为其他需要处理类似问题的开发者提供参考。
对于使用 Firebase Admin SDK 的开发者来说,这一改进将带来更高效的批量消息发送体验,特别是在高并发场景下能够显著减少不必要的网络开销。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00