将 mono-repo 与 Google Cloud Functions 结合使用

Use of mono-repo with Google Cloud Functions

我有多个 nodejs 函数共享相同的存储库和依赖项。 正如官方 GCF 文档中所建议的那样,我使用了一个公开多个函数入口点的 index.js 文件,如下所示:

/**
 * GCF Entrypoints
 */

const filenames = fs.readdirSync(__dirname);
const functions = filenames.reduce((acc, filename) => {
  const isJS = /\.js/.test(filename);
  const skipped = /index|sample/.test(filename);

  if (!isJS || skipped) return acc;
  const functionName = filename.replace('.js', '');

  return {
    ...acc,
    [functionName]: require(`./${filename}`).default,
  };
}, {});

Object.assign(exports, functions);

然后我多次执行 gcloud functions deploy 命令来部署这些函数并附加它们各自的 PubSub 主题。 所以整个包都是通过具有相同依赖的不同入口点上传和执行的。

如果相反,我将整个包部署为只有一个 GC 函数,具有一个 PubSub 主题,并使用消息负载中指定的入口点调用它,是否有任何缺点或错误?

函数性能、预热和可扩展性如何?

这会大大简化 CD 过程。

如果您的代码中的所有函数都使用相同的依赖项并且如果是 fast/simple 个任务,那么您的方法没有任何不好的做法。

请记住,内存和 CPU 管理将在您的所有代码中共享,这意味着如果一个函数需要更多内存或 CPU 它可能会损害其他请求的性能运行 同时在同一个实例上。

单独每个函数的主要思想是隔离每个函数和处理资源的必要依赖性。

如果您的代码开始增长并且您添加了越来越多的依赖项,您将结束分离功能以获得更好的性能。

在此 video 中,您可以找到有关 Node.js 依赖项如何影响代码响应的信息。