首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于大规模分布式元胞自动机的局部、低容量消息传递

用于大规模分布式元胞自动机的局部、低容量消息传递
EN

Stack Overflow用户
提问于 2013-02-23 07:58:05
回答 2查看 149关注 0票数 1

我正在开发一个使用大规模分布式元胞自动机的模拟。单元模拟分布在节点上,并使用ZooKeeper进行协调。持久数据存储在Riak中。细胞自动机本身是用Python编写的。

如果一个单元可以向它的直接邻居(曼哈顿附近)传递少量(比方说每秒几到几十个)消息(可能是键值对),这对于我的模拟将是非常方便的。然而,对于数百万个细胞的模拟,天真的方法最终得到了数百万个小邮箱,每个细胞一个邮箱,消息缓慢地流入每个盒子。这让ZooKeeper或RabbitMQ陷入了低谷!I've been recommended DDS,但它看起来非常像企业版,而且我找不到任何Python绑定。

我是分布式系统开发的新手--这只是一个业余爱好项目,看看我能走多远。我不禁觉得我走错了路,为每个小单元的邮箱转向了单片消息总线。细胞很容易确定它的邻居和它在世界上的位置,所以消息传递似乎应该受到某种分块的影响。然而,我无法理解这个区域参与者的设计以及它如何与单个细胞进行通信。我看到了单元如何通过消息总线将消息传递到块,但是块如何将消息传递回单元?

我是否接近了这个问题的真正解决方案?分布式节点向其邻居传递低容量消息的正确方式是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-03-16 14:04:00

我不确定您需要这些消息的持久性;根据您的描述,您似乎对来自不同单元的消息没有任何排序约束。我认为您确实想要从相同的小区a发送到相同的小区b的所有消息的总排序。

ZooKeeper会被淹没,因为它提供了所有消息的全局总排序。我不确定您的系统需要通过Zookeeper进行哪种类型的协调,但它使用过程粒度的协调比细粒度的协调效果更好。(在我工作的地方,我们将这个角色分别称为锁定和资源锁定,以阐明意图。工作人员承担角色,而不是锁定资源。)

所以,这里有一些关于我所掌握的信息的想法。

如果消息不需要持久,最好的方法是保持与邻居的连接,并将消息直接发送给他们。我假设是2D或3D,所以(曼哈顿)邻居的数量很少。

本文的其余部分将假定您需要持久性。

单个消息队列系统应该能够处理数百万条消息;但如果对它们进行一定程度的分区,它们会获得更好的性能。

首先,请尝试将所有消息发送到同一队列。让一些工作者(由ZooKeeper选择)将消息从队列中拉出,并将它们发送到它们的目标单元(在进入队列之前,需要单元中的ack )。您还可以让一组工作人员从单元接收消息,并将其放入队列。基本上,这有助于队列上的争用。

代码语言:javascript
复制
[  Router ]--->[ Queue ]--->[  Router  ]
 ^   ^   ^                   |   |   |
 |   |   |                   V   V   V
[A] [B] [C]                 [D] [E] [F]

现在,您可以对此进行一些推广,并为每个区域创建一个队列。(当队列需要处理的消息较少时,它们的工作效果会更好。)每个区域有一台或多台路由器。

代码语言:javascript
复制
        ,----->[ QueueA ]<------.
        |                       |   (Note which arrows are bi-directional)
        V                       |
[ RouterA ]--->[ QueueB ]<--->[ RouterB ]
 ^   ^   ^                     ^   ^   ^
 |   |   |                     |   |   |
 V   V   V                     V   V   V
[A] [B] [C]                   [D] [E] [F]

如果消息传递系统仍然不堪重负,您可以将上图中的队列替换为整个消息队列系统。

这些是一些简单的想法,不知道实际的领域,希望能为你指明一个好的方向。

顺便说一句,你可能想研究一下Twitter的架构(过去和现在),因为他们基本上有数百万个邮箱,每个细胞自动机(也就是人)一个邮箱。

票数 1
EN

Stack Overflow用户

发布于 2013-03-18 05:37:49

我正在考虑的一个想法是:

我在几个地方读到人们使用ZooKeeper作为内部系统的域名系统的替代方案。由于模拟工作者进程已经向ZooKeeper注册了它们负责的单元模拟,因此我认为也可以注册它们将响应的IP和端口,然后使用ZeroMQ设置在单元之间传递P2P消息。这仍然是一个粗略的草图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15035259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档