什么分布式消息队列支持数百万个队列?

时间:2012-10-12 23:10:59

标签: cluster-computing message-queue distributed-computing

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

消息很小(几十个字节),我不希望队列变得很长 - 最多每个队列数十个消息的顺序,但是当系统发出嗡嗡声时,队列应该保持相当空虚。

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

这样的消息队列是否存在?似乎大多数领域都经过优化,可以处理数百个具有高吞吐量的队列。但SQS建立在什么基础上?当然不是魔术。

更新

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

现在成本是一个问题,因为我自己为实验提供资金。 (因此亚马逊的SQS可能无法实现。)

1 个答案:

答案 0 :(得分:1)

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

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

没有白板就很难解释,但最终结果将是大多数机器人的单个实例(这是一种非常轻量级的消息队列),以及这些自动机的两个或三个实例在分区的边界。如果您有十个节点和一百万个自动机,则每个节点必须能够为大约十万个自动机进行管理。我已经看到系统使用该规模的DDS构建,并且更大,每个实例每秒有数十次更新。不错的是,这项技术可以很好地扩展节点数量,因此您可以通过添加更多节点来降低每个节点的资源负载。

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