You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

高并发下作为SQS事件处理器的NodeJS Lambda部分代码未执行如何排查

问题成因分析
  • Google Calendar API 速率限制触发未捕获异常
    这是最高概率的原因。Google Calendar API 对单个账号/项目的请求频率、并发数都有明确配额限制(默认单用户并发写请求通常不超过10次/秒),当Lambda并发数大于1时,多个请求同时调用calendar.events.insert接口,超过配额后接口会返回429(请求过多)或5xx错误。你的代码没有添加异常捕获逻辑,异步请求抛出错误后会直接终止Lambda函数执行,因此await后的console.log('data', data)不会运行,也不会输出错误日志(你当前的日志仅打印了INFO级别的内容)。
    并发数设为1时,请求串行发送,不会触发速率限制,因此所有请求都能正常执行。
  • Google API HTTP/2 连接复用异常
    你在全局配置了google.options({ http2: true }),开启了HTTP/2连接复用。当同一个Lambda实例串行处理多条SQS消息时,如果上一次请求的HTTP/2连接出现异常未被正确重置,会导致后续请求卡住或直接失败,没有走到后续打印逻辑。
  • Lambda 函数超时阈值设置过短
    从日志看正常请求的执行时长约1.7秒,如果你的Lambda超时阈值设置为2秒,高并发下Google API响应延迟略微升高,就会触发Lambda超时强制终止函数,导致后续代码无法执行。
修复建议
  • 首先添加全局异常捕获逻辑,打印错误信息定位具体问题,代码示例:
export const handler = async (event) => {
  try {
    const schemaEvent = getDataFromEvent(event)
    console.log('schemaEvent', schemaEvent)
    const { data } = await calendar.events.insert({
          calendarId: CALENDAR_ID,
          requestBody: schemaEvent,
          sendUpdates: 'all',
        })
    console.log('data', data)
  } catch (err) {
    // 打印错误详情,包括API返回的错误码、响应体
    console.error('请求Google API失败', err)
    // 抛出错误让SQS重新投递消息,或者根据错误码处理(比如429错误添加退避重试)
    throw err
  }
}
  • 针对Google API速率限制,添加指数退避重试逻辑,或者将Lambda并发数限制在符合Google API配额的范围内。
  • 适当调大Lambda超时阈值,建议设置为10秒以上,避免偶发的网络延迟导致函数提前终止。
  • 如果确认是HTTP/2连接问题,可以先关闭HTTP/2配置,改用HTTP/1.1验证是否解决问题。

内容的提问来源于stack exchange,提问作者Pavlo Naumenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:45:05