处理数百万个定时(预定)消息的解决方案?

时间:2010-07-01 07:42:15

标签: message-queue scheduled-tasks

我正在评估处理大量排队邮件的可能解决方案,这些邮件必须在特定日期和时间发送给员工。执行它们的结果主要是对存储数据的更新,它们最初可能会或可能不会由用户操作触发。

例如,想想你在假想的大型星际争霸游戏服务器中实现的内容,用于存储和执行用户的操作,例如升级建筑物,孵化士兵,所有这些都需要应用于游戏状态在玩家启动后几秒钟或几分钟后。

问题是我似乎无法找到正确的术语来命名这个问题区域。有几个看起来相似但不同:

cron / task / job scheduler

  • 队列的内容不是动态的,它是预定义的。
  • 每项任务都已安排

消息队列

  • 队列内容为动态
  • 每项任务都将立即

???

  • 队列内容为动态
  • 每项任务都已安排

如果有消息队列允许有条件地传递消息,那可能就是它。

要点:

  1. 这些技术叫做什么?
  2. 那里有哪些解决方案?

4 个答案:

答案 0 :(得分:2)

您是否尝试过使用Iron.io推送队列?队列的内容可以是您喜欢的任何内容,并指定将消息推送到的webhook。您还可以为每条消息设置延迟。

对于每个队列,webhook是静态的,并且延迟并不总是完全准时(可能最多一分钟)。如果时间安排更重要或者每条消息提供不同webhook的能力很重要,请尝试查看boomerang.io。

他们说他们在时间上非常准确,你可以为webhook提供延迟或unix时间戳来返回,这是每条消息。听起来这些可能对你有用。

答案 1 :(得分:1)

这听起来像表面上的一个简单的优先级队列。在这种情况下,优先级是完成时间,您检查队列的前面以​​查看下一个事件到期的时间。几乎每种语言都有一个优先级队列或者可以很容易地用作一个的东西,所以我不确定这里的实际问题是什么。

当谈到数百万条消息时,您是否担心可扩展性?显然,“数百万”是一个毫无意义的术语 - 如果每天数百万,这是一个微不足道的问题。如果它是每秒数百万,那么您可以只是水平扩展,将队列分成多个进程。 (这种队列系统的好处是这种并行化非常简单。)

我敢打赌,在实施大规模实时战略游戏服务器时,您会在开始遇到消息队列问题之前就遇到网络问题。

答案 2 :(得分:0)

在我看来,基于队列的解决方案在这种情况下最好是出于多种原因:

  • 管理。大多数排队解决方案都支持检查队列内容,这使得调试更容易,超出特定阈值时更容易采取行动,...
  • 性能。您可以通过多个排队/出队流程来划分工作量(使您能够扩展)。
  • 优先化。大多数队列支持消息的优先级排序(可能并非所有消息都同等重要)。
  • ...

剩下的问题是队列中的消息立即传递。您有两种方法可以解决此问题:延迟消息排队或延迟执行出列消息。我会采用第一种方法,延迟入队。

然后消息有两个属性:(内容,延迟)。您将消息提供给系统中的组件,该组件在适当的时间对消息进行排队。

我不确定您使用的是哪种编程语言,但MS .NET 4框架支持such a scenario(延迟执行任务)。

答案 3 :(得分:0)

对于星际争霸,我会使用Red Dwarf server

对于Java EE应用程序,我会使用Quartz Scheduler