我们的React应用程序运行在Firebase上。现在我们引入Next.js来改善SEO和初始页面加载时间。SSR(服务器端渲染)由Google Cloud Function第二代(云运行)完成。
- 问题:**当SSR函数处于冷状态(由Google Cloud发起的部署、空闲、函数崩溃、函数重启导致)时,对我们应用的第一个请求需要等待大约30秒才能得到响应。这太过分了
这30秒包含两个阶段:
- 2秒:Cloud run功能的冷启动(OK,大概没什么可以改进的)
- 28秒:Next.js SSR函数(Node.js v18)初始启动(提取所有内容,加载所有模块,我还不知道的事情?)).
只要SSR函数不重新启动,以下所有请求都非常快。
我尝试的是:
- SSR Cloud function/Cloud run minInstances:1-->问题:Google大约每24小时回收一次示例。结果:第一个请求又变慢了
- SSR Cloud function/Cloud run minInstances:2-->问题:Google每隔24小时就会在短时间内一个接一个地回收这些示例。用户也打“冷”功能
- Cloud run HTTP startup probe-->这里我被卡住了,因为我不知道如何配置HTTP startup probe
原因:
- Firebase的部署计划:
firebase experiments:enable webframeworks
firebase.json
"hosting": {
"source": ".",
"frameworksBackend": {
"region": "europe-west1",
"minInstances": 1,
"maxInstances": 1,
"memory": "1GiB",
"startupProbe": {
"httpGet": {
"path": "/health",
"port": 8080
},
"timeoutSeconds": 240,
"periodSeconds": 240,
"failureThreshold": 240,
"initialDelaySeconds": 0
}
},
firebase deploy -P dev
startupProbe参数将被忽略且不部署
1.由于缺少Cloud run函数映像,手动调整现有Cloud run函数失败。部署后会有一些东西清理映像。这个解决方案只是暂时的,用来测试http startupProbe是否能解决我的问题。
未找到映像“europe-west1-docker.pkg.dev/PROJECT/gcf-artifacts/ssrPROJECTdev:version_1”。
1条答案
按热度按时间mzaanser1#
1.由于缺少Cloud run函数映像,手动调整现有Cloud run函数失败。Something*1在部署后清理映像。这个解决方案只是暂时的,用来测试http startupProbe是否能解决我的问题。未找到映像“europe-west1-docker.pkg.dev/PROJECT/gcf-artifacts/ssrPROJECTdev:version_1”。
未找到映像“europe-west1-docker.pkg.dev/PROJECT/gcf-artifacts/ssrPROJECTdev:version_1”。
我找到了原因。Firebase工具会在成功部署后清理映像。手动禁用此步骤:
npm install -g firebase-tools
时:node/v18.15.0/lib/node_modules/firebase-tools/lib/deploy/functions/release/index.js:68取消注解这行代码,firebase函数部署后镜像不会被清理:
await containerCleaner.cleanupBuildImages(haveEndpoints, deletedEndpoints);
之后,我可以在Google Cloud Web GUI https://console.cloud.google.com/run/deploy/{region}/{functionName}?project={projectName}中或使用gcloud cli将
startupProbe
从默认TCP更改为HTTP。仍有疑问:如何直接在
firebase.json
中配置startupProbe,如原始问题中所述。