Google Cloud Functions 是否会针对每个 HTTP 请求重新连接到我的 MongoDB 客户端?

JP *_*Lew 5 mongodb express firebase google-cloud-platform google-cloud-functions

我正在尝试将 Node/Express REST API 迁移到 Google Cloud Functions,并注意到一些性能问题。在等待函数在一段时间不活动后“启动”时,我的所有 API 路由均收到 404 错误。我很好奇这是否与我的实现有关。这是我的 Express 无服务器“服务器”,用 Typescript ( ) 编写index.ts

import * as functions from 'firebase-functions'
import * as express from 'express'
import { MyApi } from './server'

const app: express.Application = MyApi.bootstrap().app

export const myApp = functions.https.onRequest(app)
Run Code Online (Sandbox Code Playgroud)

接下来,这里是server.ts

import * as express from 'express'
import * as mongodb from 'mongodb'

require('dotenv').config({ path: '.env' })

export class MyApi {
  app: express.Application = express()
  mongoDbUri: string = process.env.MONGO_URI

  static bootstrap(): MyApi {
    return new MyApi()
  }

  constructor() {
    this.connectToDb(this.mongoDbUri)
  }

  connectToDb(uri: string) {
    mongodb.MongoClient.connect(uri, (err, db) => {
      if (err) {
        this.handleNoDbError(err)
      }
      setApiRoutes(app: express.Application, db)
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

为了简单起见,我删除了很多冗余代码,但希望这足以让您理解这个想法。我要求 Functions 公开一些 API 端点。首先,我使用连接池来建立单个 Mongo 连接,然后将该连接 ( db) 传递到我的路由。这些路由端点依次find()向我的 MongoDB Atlas 数据库发出请求,并将这些结果传递到我的应用程序。

我部署了此代码的一个版本,它运行正常,可以正确获取结果。然而,我担心性能缓慢和间歇性 404 错误(例如,与 Heroku 上的专用 Node/Express 服务器相比)。

我想知道我的问题是否与 Mongo 客户端有关。每次向 Functions 发出请求时它都会连接到我的数据库吗?一旦我的函数在不活动后唤醒,它们是否会在所有未来的请求中保留相同的 Mongo DB 连接?我是无服务器新手,所以我想我对我的函数是否在执行期间启动并保持运行,然后在闲置后“关闭”感到困惑。

如果需要,可以提供实时链接。

Fra*_*len 3

第一次在新实例中执行您的函数时,它将必须连接到 Mongo 服务器。

这意味着重新连接至少会发生:

  • 经过一段时间不活动后,Cloud Functions 是否已停止运行您的实例。
  • 当活动增加时,Cloud Functions 会启动更多实例。

如果您的客户端库进行连接管理,也可能会在中间发生。但由于这不依赖于 Cloud Functions 环境,因此我无法对此发表评论。