我目前正在开发的应用程序的一个功能是照片上传。客户在前端上传照片,照片被传递到rails后台,然后存储在亚马逊S3上。
我注意到,将大量的请求时间花在了将照片上传到s3上。照片是一个接一个上传的,所以延迟会成倍增加。如果我能以某种方式将照片临时存储在RAM中,并提高请求速度,那就太好了。
我曾经考虑过使用文件作为参数来运行一个Sidekiq作业,但是according to sidekiq documentation传递一个巨大的对象并不是很好的做法。我怎么才能用另一种方法解决这个问题呢?
发布于 2021-11-17 10:49:55
我认为这个问题是通过使用API生成一个预先签名的url,并使用cognito将图片上传到s3并获得图片链接来实现的。
发布于 2021-11-17 16:43:23
在机器A上运行的nginx/puma应该将图像保存为本地文件。在同一台计算机A上运行Sidekiq,并将文件名传递给特定于主机的队列中的作业,以便Sidekiq进行处理。这样,您就可以传递一个文件引用,而不用担心哪台机器会处理它。
确保Sidekiq删除了文件,这样就不会填满磁盘!
https://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/
https://stackoverflow.com/questions/70000598
复制相似问题