将 Resque 用于 Rails 中长时间未决的任务(例如Resque.enqueue_in(7.days, JobClass)
:)与 resque 和 resque-scheduler gem 的安全性如何?值得一提的是,该实例正在 Heroku 上运行。丢队列的几率是多少?
1 回答
半持久性
根据我的评论,使用 Redis(Resque 使用)的缺点是可能会停机。
作为 Web 应用程序的“RAM”,Redis 存储半持久性数据。这基本上意味着它仅在运行时保留您的数据。任何停机时间都会丢失您的队列。
这是你问题的症结所在——
你能承受失去你的队列吗?
答案只有你能回答的一个。
但是,我会考虑一些因素:
*Redis 不是一个完整的数据库......它是一个 JSON
key:value
对存储。简而言之,这应该只用于为您提供一种在特定时间使用数据片段的简单机制。例如,我们使用 Redis 在我们的一个系统上存储用户的 ID。
这意味着,如果您在 Redis 中存储的数据多于简单 ID 或其他基本数据,那么您是否正确使用了它?
你的队列有多重要?
与任何应用程序一样,您需要保留尽可能多的用户数据。
但是,不同之处在于队列对您的系统的重要性。
我举了一个酒店预订系统的例子。也许您需要发送“欢迎”电子邮件、帮助客人找到酒店的“路线”电子邮件等。这些是“关键任务”吗?
我之前设计过一个电子邮件营销系统。排队系统很广泛。但重要的不是“队列”——而是所有与之相关的关联数据。
因此,我们将数据保存在数据表中,并且仅使用 Redis 存储要发送的内容和时间的纯队列。然后我们每分钟运行一些脚本(我忘记了具体细节),这些脚本通过了 Redis 队列。
底线是我强烈建议将适当的数据存储在表中,然后仅在需要时处理请求。
队列的基础是,如果它出现故障,您需要能够重建它。如果您仅将值存储在redis中,这将被证明是一个主要瓶颈。
从长远来看,访问数据库非常值得您从中获得数据。