我正在寻找一个分布式消息队列,它将支持数百万个队列,每个队列每秒处理数十条消息。
消息会很小(几十个字节),而且我不希望队列变得很长——每个队列最多有几十条消息,但是当系统运行时,队列应该保持相当长的状态空的。
我不确定集群中有多少个节点——可能取决于具体的解决方案,但如果我必须猜测,我会说十个节点。我希望队列对集群内的单个节点故障具有相对的弹性,但偶尔丢失一些消息不会让我失眠。
这样的消息队列存在吗?似乎大多数领域都针对以高吞吐量处理数百个队列进行了优化。但是 SQS 是建立在什么基础上的呢?肯定不是魔法。
Update:
根据要求,它确实可能有助于阐明我的问题领域。 (我之前省略了细节,以免把事情搞混。)我正在试验分布式细胞自动机,最初的目标是模拟一百万个细胞。在某些 CA 模型中,添加事件模型很有用,以便单元可以向其邻居发送事件。因此,有一百万个队列,每个队列有一个消费者和八个左右的生产者。
目前成本是一个问题,因为我自己资助实验。 (因此亚马逊的 SQS 可能遥不可及。)
从你的描述来看,它看起来像OMG的数据分发服务 http://en.wikipedia.org/wiki/Data_distribution_service可能很合适。它与消息队列技术有关,但我更愿意将其称为分布式数据管理基础设施。它是完全分布式的,并支持高级功能,通过一组丰富的服务质量设置,您可以对数据的分发方式进行大量控制。
对你的问题不太了解,我可以猜测一种方法可能是什么。 DDS 旨在将强类型数据项的状态分布为具有类型化属性的结构。您可以创建一个描述自动机状态的数据类型。它的属性之一可以是唯一标识系统中自动机的 ID。如果可能的话,将根据一种方案进行分配,以便每个自动机都知道其邻居的 ID 是什么(如果它们存在)。每个自动机将根据需要发布其状态,从而产生包含所有自动机当前状态的分布式数据空间。 DDS 支持所谓的数据空间分区。如果您利用了这一点,那么机器中的每个节点都将负责所有自动机的明确定义的子集。只有与不同分区相邻的自动机才会通过线路进行通信。由于自动机知道其邻居的 ID,因此它们能够在数据空间中查询其感兴趣的自动机的状态。
如果没有白板,解释起来有点困难,但最终结果将是大多数自动机的单个实例(这是一种非常轻量级的消息队列),以及边界处的自动机的两个或三个实例一个分区的。如果您有十个节点和一百万个自动机,那么每个节点必须能够管理大约十万个自动机。我见过使用这种规模甚至更大的 DDS 构建的系统,每个实例每秒进行数十次更新。好处是,该技术可以很好地随着节点数量进行扩展,因此您可以通过添加更多节点来降低每个节点的资源负载。
如果这是一个研究项目,那么您甚至可以免费使用商业产品。只需谷歌搜索 dds 研究许可证即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)