将巨大的 JSON 传递给 Sidekiq Jobs
Posted
技术标签:
【中文标题】将巨大的 JSON 传递给 Sidekiq Jobs【英文标题】:Passing huge JSON to Sidekiq Jobs 【发布时间】:2021-12-28 04:57:38 【问题描述】:我目前正在开发的应用程序的功能之一是照片上传。客户在前端上传照片,照片被传递到支持的 rails,然后存储在 Amazon S3 上。
我注意到将照片上传到 s3 花费了大量的请求时间。照片一张一张上传,因此延迟成倍增加。如果我能以某种方式将照片临时存储在 RAM 中并提高请求速度,那就太好了。
我考虑过使用文件作为参数来运行 Sidekiq 作业,但 according to sidekiq documentation 传递一个巨大的对象并不是一个好习惯。我该如何解决这个问题?
【问题讨论】:
direct upload 怎么样? 【参考方案1】:我认为这个问题是通过使用 API 生成预签名的 url 并使用 cognito 将图像上传到 s3 并获取图像链接。
【讨论】:
【参考方案2】:在机器 A 上运行的 nginx/puma 应该将图像保存为本地文件。在同一台机器 A 上运行 Sidekiq 并将文件名传递给特定于主机的队列中的作业,以供 Sidekiq 处理。这样您就可以传递文件引用,而不必担心哪台机器会处理它。
确保 Sidekiq 删除文件,这样您就不会填满磁盘!
https://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/
【讨论】:
以上是关于将巨大的 JSON 传递给 Sidekiq Jobs的主要内容,如果未能解决你的问题,请参考以下文章
Sidekiq Rails 4.2 使用 Active Job 还是 Worker?有啥不同
rspec-sidekiq have_enqueued_sidekiq_job未定义的方法at