我正在GCP中创建一个云功能,以自动调整上传到桶中的图像大小并将其传输到另一个桶。由于图像是分批到达的,一个文件夹可能包含数百或数千张图像,因此在代码中合并处理多个文件的能力更好,还是让云功能在每个上传的图像上触发更好?
并行处理在无服务器产品中非常强大,因为它可以根据您的工作负载自动伸缩。
如果您可以在几秒钟内接收数千个图像,那么无服务器产品的可伸缩性可能会遇到困难,并且您可以丢失一些消息(无服务器扩展很快,但这不是魔法!!)
一个更好的解决方案是在PubSub中发布云存储事件。这样,您就可以轻松地重试失败的消息。
如果你继续增加图像的数量,或者如果你想优化成本,我建议你看看云运行。
您可以插入PubSub推送订阅到Cloud Run。Cloud Run的强大之处在于处理多个HTTP请求(PubSub推送消息)的能力。云存储事件)在同一实例上,因此可以并发地处理同一实例上的多个映像。如果转换过程是计算密集型的,您可以在Cloud Run实例上最多有4个cpu。
并且,作为云函数,您只需支付活动(正在处理请求)实例的数量。使用Cloud Functions,您可以一次处理一个请求,因此每个文件一个实例。使用Cloud Run,您可以处理多达1000个并发请求,因此您可以减少多达1000倍的实例数量,从而降低成本。但是,要注意处理所需的CPU,如果它是计算密集型的,您不可能同时处理1000张图像。
finalize
事件在桶中创建新对象(或覆盖现有对象,并创建该对象的新一代)时发送。
每上传一个对象都会触发一个新的功能。您可以尝试在客户端上压缩所有这些图像到ZIP
文件中,上传它,这样它只会触发一个函数,然后在解压缩后将图像上传到存储中。但请确保您没有达到文档中提到的任何限制。