大家好,我还是新手,来询问一个关于 sidekiq 和 redis 相关的问题 我现在遇到一个难题,现在的项目做公司分析 平均一个公司分析大概耗时 40 秒,我们把它放在 sidekiq 里 后台执行。 每一个客户可以有很多公司分析. 问题来了,
第一种情况 : 如果客户 A 开启 1000 个公司分析., 另外客户 B 在 1 分钟后开启一个公司分析., 那么我们不想要客户 B 等客户 A 分析完 1000 个公司, 然后再分析客户 B 的单个公司分析。 我的提议的使用两个不同的 queue
queues:
- [normal_client, 20]
- [urgent_client, 40]
这样客户 B 就能先插队
第二种情况 : 如果客户 A 开启 1000 个公司分析, 另外客户 B 在 1 分钟后也开启 100 公司分析, 这样我们不希望客户 B 的 100 个公司分析要等到客户 A 的 1000 个公司分析 之后, 我希望找一个好的解决方案, 比如客户 A 和客户 B 交互分析, 客户 A 分析一下,然后客户 B 分析一下, 这样大概 客户 A 分析完前 100 个客户的时候, 客户 B 的 100 也要分析完毕。 这种情况下该如何设计 queue, 或者如何设计如何把 job 放进 worker 里? 或者前面再来一层数据结构 ?
第三张情况: 我希望每个客户都能有大概时间等待现实, 现在不止两个客户, 我们假设有很多客户,每个客户有不同数量的公司分析,如果 客户 A 开始分析 , 然后 客户 B C D etc.. 开始 插队。 那势必导致客户 A 不断延长他的等待时间,这将造成我们刚开始给客户 A 的等待时间不断延长, 这将到底客户 A 的不信任感, 客户 A 会想, 我可是你们的大金主,什么阿猫阿狗都能插我的队 ! 那这种情况下该有什么好的解决方案?
这个帖子 我想和大家探讨学习。 先提前感谢大家