2

我正在寻找一个支持数百万个队列的分布式消息队列,每个队列每秒处理数十条消息。

消息会很小(几十个字节),我不希望队列变得很长——每个队列最多有数十条消息,但是当系统运行时,队列应该保持公平空的。

我不确定集群中有多少个节点——可能取决于具体的解决方案,但如果我不得不猜测,我会说十个节点。我希望队列对集群中的单个节点故障具有相对弹性,但是这里和那里丢失的一些消息不会让我失眠。

这样的消息队列存在吗?似乎大多数领域都针对处理数百个具有高吞吐量的队列进行了优化。但是 SQS 建立在什么基础上?肯定不是魔法。

更新:

根据要求,它确实可能有助于阐明我的问题域。(我之前遗漏了细节,以免弄得一团糟。)我正在试验分布式元胞自动机,最初的目标是模拟一百万个细胞。在某些 CA 模型中,添加事件模型很有用,这样单元格就可以将事件发送给它的邻居。因此,有一百万个队列,每个队列有一个消费者和 8 个左右的生产者。

现在成本是一个问题,因为我自己资助这些实​​验。(因此亚马逊的 SQS 可能遥不可及。)

4

1 回答 1

1

根据您的描述,看起来OMG 的数据分发服务可能很合适。它与消息队列技术有关,但我更愿意将其称为分布式数据管理基础架构。它是完全分布式的,并支持高级功能,通过一组丰富的服务质量设置,您可以对数据的分布方式进行大量控制。

不太了解您的问题,我可以猜测可能是什么方法。DDS 是关于将强类型数据项的状态分布为具有类型属性的结构。您可以创建一个描述自动机状态的数据类型。它的属性之一可以是唯一标识系统中自动机的 ID。如果可能的话,这将根据一个方案进行分配,这样每个自动机都知道它的邻居的 ID 是什么(如果它们存在的话)。每个自动机将根据需要发布其状态,从而形成一个包含所有自动机当前状态的分布式数据空间。DDS 支持对该数据空间进行所谓的分区。如果您利用了这一点,那么您机器中的每个节点都将负责所有自动机的明确定义的子集。有线通信只会发生在与不同分区相邻的那些自动机上。由于自动机知道它们邻居的 ID,它们将能够在数据空间中查询它感兴趣的自动机的状态。

没有白板有点难以解释,但最终结果将是大多数自动机的单个实例(这是一种非常轻量级的消息队列),而边界上的那些自动机则有两个或三个实例的一个分区。如果您有十个节点和一百万个自动机,那么每个节点必须能够管理大约十万个自动机。我见过使用这种规模甚至更大的 DDS 构建的系统,每个实例每秒更新数十次。好处是这项技术可以很好地随节点数量扩展,因此您可以通过添加更多节点来降低每个节点的资源负载。

如果这是一个研究项目,那么您甚至可以免费使用商业产品。只是在 dds 研究许可证上谷歌。

于 2012-10-18T06:51:26.630 回答