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

jds*_*a91 7 ruby redis sidekiq rails-activejob

作业负载的推荐最大大小是多少?

作为一个具体示例,由 500kb 到 1Mb 的文本组成的 HTML 文档是否太大而无法传递到作业负载?

由于 Sidekiq 由 redis 支持,我会说512Mb,但我想知道 Sidekiq 方面是否有限制。

Sch*_*ern 5

当您调用perform_asyncSidekiq 时,会对参数、工作类和作业所需的其他信息进行哈希处理。然后,它将哈希序列化为 JSON(统称为“有效负载”),并使用lpush. 有关详细信息,请参阅 Sidekiq 作者的Sidekiq API 概览。

唯一的限制是 Redis 和 Ruby 的字符串大小以及 Redis 内存。对于 Ruby String,如果你是 32 位,则为 2G,而对于 64 位,你将首先耗尽内存

对于 Redis 来说是 512M。请注意,内容序列化为 JSON为 512M 。如果主要是文本,这将是少量。如果它是二进制数据,例如如果您压缩文本,它可能会大得多。

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

尽可能小。大型有效负载需要昂贵的 JSON 序列化和反序列化,并且会消耗 Redis 和工作内存,从而面临内存不足错误的风险。

不要发送文件的内容,而是将文件存储在工作人员可以访问的位置。这可以是共享磁盘或 S3 存储桶。仅发送工作人员检索文件所需的内容。

请参阅Sidekiq wiki 中的最佳实践。


Gua*_*Zuo 3

看到这篇文章,你应该让你的作业参数小而简单。只需存储一些简单的标识符,然后在执行方法中实际需要它们时查找对象。

而且由于它需要序列化和反序列化,因此将 html 内容添加到作业中会产生额外的成本。因此,只需将 html-content 保存到字符串或某个容器中,然后将字符串 id 或容器 id 发送到 redis,以提高效率和简单性。

  • 感谢您的回答 GuagshengZue。我知道最佳实践以及拥有大/小有效负载的成本/收益,我只是想知道是否存在一些强加的限制,或者是否存在 Sidekiq 开始行为不当的最大值。 (3认同)
  • sidekiq 没有强制的作业大小限制。 (2认同)