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 连接?我是无服务器新手,所以我想我对我的函数是否在执行期间启动并保持运行,然后在闲置后“关闭”感到困惑。
如果需要,可以提供实时链接。
第一次在新实例中执行您的函数时,它将必须连接到 Mongo 服务器。
这意味着重新连接至少会发生:
如果您的客户端库进行连接管理,也可能会在中间发生。但由于这不依赖于 Cloud Functions 环境,因此我无法对此发表评论。
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |