【问题标题】:Solutions for handling millions of timed (scheduled) messages?处理数百万条定时(预定)消息的解决方案?
【发布时间】:2011-03-10 12:17:22
【问题描述】:

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

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

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

cron/task/job 调度器

  • 队列的内容不是动态的,它是预定义的。
  • 每个任务都是计划的

消息队列

  • 队列的内容是动态的
  • 每个任务都旨在立即交付。

???

  • 队列的内容是动态的
  • 每个任务都是计划的

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

总结:

  1. 这种技术叫什么?
  2. 目前有哪些解决方案?

【问题讨论】:

    标签: message-queue scheduled-tasks


    【解决方案1】:

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

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

    他们说他们在时间上非常准确,您可以为 webhook 提供延迟或 unix 时间戳以返回,这是每条消息。听起来这两种方法都可能适合你。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这听起来只是表面上微不足道的优先级队列。在这种情况下,优先级是完成时间,您检查队列的前端以查看下一个事件何时到期。几乎每种语言都带有优先级队列或可以轻松用作一种语言的东西,所以我不确定这里的实际问题是什么。

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

        我敢打赌,在实施大型实时战略游戏服务器时,您会在消息队列出现问题之前很久就遇到网络问题。

        【讨论】:

          【解决方案4】:

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

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

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

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

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

          【讨论】:

          • 在 Java 中,Timer 可能是你最好的选择(延迟执行任务)。
          猜你喜欢
          • 2012-08-22
          • 1970-01-01
          • 2015-08-20
          • 1970-01-01
          • 2019-11-16
          • 1970-01-01
          • 2011-03-20
          • 2021-05-03
          • 1970-01-01
          相关资源
          最近更新 更多