【问题标题】:Firebase Functions - Does throwing errors produce cold starts?Firebase 函数 - 抛出错误会产生冷启动吗?
【发布时间】:2022-01-22 05:41:27
【问题描述】:

我已阅读here 未处理的错误可能会导致冷启动。我正在实现一个触发函数,如下:

exports.detectPostLanguage = functions
  .region("us-central1")
  .runWith({ memory: "2GB", timeoutSeconds: "540" })
  .firestore.document("posts/{userId}/userPosts/{postId}")
  .onCreate(async (snap, context) => {
     // ...

     const language = await google.detectLanguage(post.text);

     // ... more stuff if no error with the async operation

  });

我是否需要捕获 google.detectLanguage() 方法错误以避免冷启动?

如果是,我应该怎么做(A 或 B)?

答:

const language = await google.detectLanguage(post.text)
   .catch(err => {
       functions.logger.error(err);
       throw err; // <---- Will still cause the cold start?
   });

乙:

try {
   var language = await google.detectLanguage(post.text)
} catch(err) {
   functions.logger.error(err);
   return null; // <----
}

更新

基于弗兰克解决方案:

exports.detectPostLanguage = functions
  .region("us-central1")
  .runWith({ memory: "2GB", timeoutSeconds: "540" })
  .firestore.document("posts/{userId}/userPosts/{postId}")
  .onCreate(async (snap, context) => {
     try {
        // ...

        const language = await google.detectLanguage(post.text);

        // ... more stuff if no error with the async operation
     } catch(err) {
        return Promise.reject(err);
     }
     
     return null; // or return Promise.resolve();
  });

【问题讨论】:

    标签: javascript firebase async-await google-cloud-functions cold-start


    【解决方案1】:

    如果任何异常从 Cloud Function 主体中逃逸,运行时会假定容器处于不稳定状态,并且不会再安排它来处理事件。

    为防止这种情况发生,请确保您的代码中没有异常逃逸。您可以不返回任何值,也可以返回一个表示代码中的任何异步调用何时完成的承诺。

    【讨论】:

    • 所以,如果不是记录并抛出错误本身或从触发的谷歌云函数返回空值(在错误捕获中),我只是返回一个承诺拒绝(例如,错误和无需记录),确保没有错误从函数体中逃逸,冷启动会减少对吗?
    • 我认为只有在错误命中uncaughtExceptionunhandledRejection 挂钩时才会终止云函数实例?所以简单地返回一个被拒绝的 Promise (由于async/await 语法会在 OP 的问题中发生)也会杀死实例?
    • 我很确定throw err; // &lt;---- Will still cause the cold start? 会导致容器被回收。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2014-09-30
    • 1970-01-01
    • 2021-05-08
    • 2022-01-20
    • 2021-08-14
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多