微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Cloud Storage NodeJS 多个读取请求加载太慢

如何解决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 举报,一经查实,本站将立刻删除。