Cloud Run环境下Firebase拉取全量认证用户耗时异常问题
Cloud Run拉取Firebase用户数据耗时异常解决方案
问题现象
- 需拉取Firebase平台共计8.6万条认证用户数据:本地环境、Firebase Functions环境完成全量拉取仅需2分钟;受Firebase官方接口限制,单次请求最多拉取1000条用户,Cloud Run环境下平均单次请求耗时高达20秒。
- 拉取Firebase Realtime Database全量用户数据时,其他环境仅需15秒即可完成,Cloud Run环境总耗时达到365秒,对应运行日志如下:
2022-06-17T00:03:04.986000061Z grabbed users data from db, total: 86442 in 364.015s 2022-06-17T00:03:05.732000112Z Progress 1000 0.746s 2022-06-17T00:03:15.131999969Z Progress 2000 9.847s 2022-06-17T00:03:39.332999944Z Progress 3000 34.347s 2022-06-17T00:04:03.832999944Z Progress 4000 58.846s 2022-06-17T00:04:28.433000087Z Progress 5000 83.447s 2022-06-17T00:04:51.733000040Z Progress 6000 106.747s 2022-06-17T00:05:58.332000017Z Progress 7000 172.947s
现有环境信息
- Cloud Run运行环境:NodeJS 14,配置2GB内存
- 运行时资源占用:内存占用稳定在8%,CPU占用稳定在10%,不存在资源瓶颈
- 数据规模:单条用户对象数据量较小,全量用户数据总大小约60-70MB,同等拉取任务在Firebase Functions中仅需256MB内存即可完成
- 网络配置:当前Cloud Run实例未配置任何特殊网络规则
- 待验证变量:尚未验证部署区域差异对耗时的影响,当前Cloud Run部署在
us-east1区域,Firebase Functions部署在us-central1区域
排查解决步骤(按优先级排序)
- 第一优先级:对齐服务部署区域
Firebase Auth、Realtime Database的默认服务端点均部署在us-central1区域,跨区域访问时流量会经过公网跨区链路转发,链路延迟、丢包率都会明显上升,是该类耗时异常的最高频诱因。直接将Cloud Run服务重新部署到us-central1区域,与Firebase资源保持同区部署,流量会走Google内部内网链路,可消除绝大多数跨区网络开销。 - 第二优先级:调整Cloud Run运行参数
Cloud Run默认开启CPU节流策略,实例在等待IO响应的阶段会被限制CPU配额,直接拉长串行请求的间隔。部署服务时添加--no-cpu-throttling参数关闭CPU节流,保证实例在全生命周期都能获得完整CPU配额。 - 第三优先级:检查出口网络路由配置
确认Cloud Run的出口流量设置:如果开启了无服务器VPC访问且配置为所有流量路由到VPC,访问Firebase的流量会先绕行VPC网络再转发,额外增加链路跳数。不需要VPC访问内部资源时,将出口流量设置为公网直连即可;如果必须保留VPC路由,需确保VPC所属区域与Firebase区域一致,同时配置对应区域的Cloud NAT网关避免网络拥塞。 - 第四优先级:优化拉取逻辑
默认的Admin SDK分页拉取为串行执行,总耗时为所有单次请求耗时的累加值。可将串行分页改为受控并发拉取,控制并发数在5-10区间(避免触发Firebase接口限流),可将总拉取时长压缩到原有的1/5-1/10。同时检查SDK初始化配置,确认没有手动配置错误的服务端点、全局代理参数,保证SDK直连Firebase官方服务端点。
内容的提问来源于stack exchange,提问作者Kevin Danikowski
相关产品推荐
相关产品推荐

