0

我正在使用 Twilio在 Rails 4.2 应用程序中发送/接收文本。我是批量发送,一次大约 1000 个,偶尔接收。

目前,当我收到一条文本时,我将其保存到数据库(to、from、body),然后将该记录传递给 ActiveJob 工作人员以供稍后处理。为了发送消息,我目前将 Twilio 参数保存到另一个数据库,并将该记录传递给另一个 ActiveJob 工作人员。因为我经常分批做,所以我有两个工人。第一个传出消息工作者发送一条消息。第二个查询数据库并找到应该接收消息的所有用户,为每个应该发送的消息创建一个数据库记录,然后将该记录传递给第一个传出消息工作者。所以第二个基本上只是为第一个处理创建了一堆工作。

现在,我让工作人员在完成处理(传入和传出)后销毁记录。我担心在服务器、redis 或 resque 出现故障时不会持久保存东西,但我不知道这是否真的是一个好的设计模式。有人建议我只使用香草红宝石对象并将其 id 传递给工作人员,但我不确定这如何影响数据可靠性。那么创建所有这些数据库是不是太过分了,我应该只创建香草红宝石对象并将这些对象的 ID 传递给工作人员吗?

任何和所有的见解都值得赞赏,

德鲁

4

1 回答 1

4

在我看来,向您的工作发送最少量数据的方法是最好的方法。查看 sidekiq wiki 上的“最佳实践”部分:https ://github.com/mperham/sidekiq/wiki/Best-Practices

如果您的队列备份并且报价对象同时发生变化怎么办?不要将状态保存到 Sidekiq,保存简单的标识符。一旦您在 perform 方法中真正需要它们,就查找这些对象。

同样在可靠性方面 -你应该担心你的工作队列会下降。它发生了。您要么将系统设计为对故障具有容错能力,要么找到具有更高可靠性保证的作业队列系统(但即使如此,也没有队列系统可以保证 100% 的消息传递性)。Sidekiq pro 比 sidekiq (non-pro) 具有更好的可靠性保证,但是如果您在设计作业时稍加考虑,您可以创建可以在崩溃后扫描数据库并重新排队任何可能丢失的作业的作业.

您花费多少工作来设计容错解决方案实际上仅取决于您的信息从 A 点到 B 点的重要性:)

于 2015-02-08T02:47:34.163 回答