将巨大的 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

如何使用 ActiveJob 设置 Sidekiq 的重试次数?

如何将 shell 脚本中的结果传递给 Job 中的变量

Sidekiq 作业负载的建议最大大小是多少?

玩framework 1.2,传递参数给运行中的job