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

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

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

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

cron /任务/作业调度程序

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

  • 队列的内容是动态的
  • 每项任务都打算立即交付。
  • ???

  • 队列的内容是动态的
  • 每个任务都是预定的
  • 如果有消息队列允许有条件地传递消息,那可能就是这样。

    概要:

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

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

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

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


    你有没有尝试过看Iron.io的推队? 队列的内容可以是任何你喜欢的,你可以指定一个webhook来将消息推送到哪里。 您还可以设置每个消息的延迟时间。

    虽然每个队列的webhook都是静态的,但延迟时间并不总是准时(可能长达一分钟)。 如果时间更重要或者提供不同webhook消息的能力很重要,请尝试查看boomerang.io。

    他们说他们对时间非常准确,你可以提供一个延迟或unix时间戳webhook返回,这是每条消息。 听起来像其中任何一个都可能适合你。


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

  • 管理。 大多数排队解决方案为检查队列的内容提供了支持,这使得调试变得更加容易,当超过某个阈值时更容易采取行动......
  • 性能。 您可以通过多个入队/出队过程来分割工作负载(使您可以扩展)。
  • 优先。 大多数队列支持消息优先级(可能不是所有的消息都同等重要)。
  • ...
  • 剩余的问题是立即在队列中传递消息。 有两种方法可以解决这个问题:延迟邮件排队或延迟出队邮件的执行。 我会采用第一种方法,延迟排队。

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

    我不确定你使用的是什么编程语言,但MS .NET 4框架支持这种情况(延迟执行任务)。

    链接地址: http://www.djcxy.com/p/46611.html

    上一篇: Solutions for handling millions of timed (scheduled) messages?

    下一篇: What's the best library for video capture in Python on linux?