如何解决Google Cloud Storage NodeJS 多个读取请求加载太慢
你好吗?
我想弄清楚为什么对我的图像 API 的某些请求(通常是最后一个)加载时间超过 1 分钟。第一个基本上是即时的。在互联网上搜索,但还没有合适的答案。我正在使用 Google Cloud 在服务器上存储图像和 NodeJS,后者将图像作为缓冲写入头提供给浏览器。
您可以在访问网站时查看我在说什么(18 年的内容): https://divinasacompanhantes.com/
如您所见,有些图片无法正确加载。我很担心,因为预计该网站将在全世界拥有数千个个人资料。
我使用 PM2 来处理服务器端的服务(2GB 可用内存)。这是表:
┌─────┬─────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼─────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 7 │ ServiceAfiliado │ default │ 1.0.0 │ fork │ 31312 │ 20m │ 3 │ online │ 0% │ 55.9mb │ root │ disabled │
│ 0 │ ServiceAvaliacao │ default │ 1.0.0 │ fork │ 31249 │ 20m │ 3 │ online │ 0% │ 55.2mb │ root │ disabled │
│ 8 │ ServiceBlog │ default │ 1.0.0 │ fork │ 31330 │ 20m │ 3 │ online │ 0% │ 61.1mb │ root │ disabled │
│ 1 │ ServiceChat │ default │ 1.0.0 │ fork │ 31256 │ 20m │ 3 │ online │ 0% │ 57.3mb │ root │ disabled │
│ 9 │ ServiceConfig │ default │ 1.0.0 │ fork │ 31337 │ 20m │ 3 │ online │ 0% │ 56.2mb │ root │ disabled │
│ 10 │ ServiceImage │ default │ 1.0.0 │ fork │ 31904 │ 0s │ 13 │ online │ 0% │ 19.1mb │ root │ disabled │
│ 2 │ ServiceLead │ default │ 1.0.0 │ fork │ 31269 │ 20m │ 3 │ online │ 0% │ 54.8mb │ root │ disabled │
│ 3 │ ServiceMail │ default │ 1.0.0 │ fork │ 31276 │ 20m │ 3 │ online │ 0% │ 43.3mb │ root │ disabled │
│ 4 │ ServicePagamento │ default │ 1.0.0 │ fork │ 31289 │ 20m │ 3 │ online │ 0% │ 42.5mb │ root │ disabled │
│ 5 │ ServiceParceiro │ default │ 1.0.0 │ fork │ 31296 │ 20m │ 3 │ online │ 0% │ 60.1mb │ root │ disabled │
│ 6 │ ServicePerfil │ default │ 1.0.0 │ fork │ 31309 │ 20m │ 3 │ online │ 0% │ 69.7mb │ root │ disabled │
└─────┴─────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
处理这个特定请求的路由:
router.get('/image/:imageId',async function (req,res) {
try {
let imageId = req.param('imageId')
let returnImage = await cloudController.getimageFromBucket('fotos_perfil',imageId)
res.writeHead(200,{'Content-Type': 'image/jpg'});
returnImage.on('data',(data) => {
res.write(data)
})
returnImage.on('error',(error) => {
res.status(400).send('Erro lendo a imagem')
console.error(error)
})
returnImage.on('end',() => {
res.end()
})
} catch (err) {
res.status(500).send('Internal Server Error')
}
})
和控制器关联:
async function getimageFromBucket(bucket,imageId) {
return new Promise((resolve,reject) => {
try {
let imageInfo = storage.bucket(bucket).file(imageId).createReadStream()
resolve(imageInfo)
} catch (e) {
reject(e)
}
})
}
谁能给我一些想法来解决这个问题?我已阅读 Google 官方文档,提示是使用 fast-crc32c
,但仅限于此。没有关于如何配置的线索...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。