用于分布式ad-hoc状态共享的库?

时间:2017-11-09 18:17:21

标签: python distributed-computing

一般来说,我希望能够同步并行执行的顺序:在未知和chand(总是不止一个)数量的geterogenious工人之间设置墙和当前状态:

whlie state != "end":
    if state == "blah":
        doX()
        waitAll()
        if master == True:
            state = "x"
        waitAll()
    if state == "x":
        doZ()
        waitAll()
        if master == True:
            state = "end"
        waitAll()

通常我会寻找一种在ad-hoc分布式主从模式中共享应用程序状态的方法。我想为master和slave设置相同的脚本(在MPI模型中也一样)。师父拥有所有奴隶都知道的公共知识产权。一般来说,我看到如何在ZMQ中实现它,但想知道是否有一些已知的专用库呢?

1 个答案:

答案 0 :(得分:0)

Zookeeper就是为此而建的。当然,我们现在谈论的是一个分布式系统,它对管理有一些开销。

如果您不熟悉Zookeeper,您可以将其视为在运行Zookeeper的不同服务器上复制自身的文件系统。 Zookeeper'集群'被称为集合

Zookeeper具有原型,您可以为分布式队列,领导者选举以及分布式锁定构建。

Zookeeper具有多种语言的客户端库,因此可以与许多不同的应用程序集成。

Barrier/Queue Example

Shared/Distributed Locks

Zookeeper通过Ephemeral节点解决了有关可用性,恢复等的一些有趣问题。您可以将文件写入 Zookeeper ,如果与Zookeeper的连接失败或消失,该文件将自动从Zookeeper中删除。

您也可以使用这些Ephemeral节点执行服务发现。假设你想在2个,3个,10个,100个服务器之间分配任务。

每台服务器启动时都可以获得Zookeeper连接字符串。当它启动时,它可以通过将一个Ephemeral文件写入包含其IP地址/端口的目录来注册自己。

通过锁定原语和ephemeral节点以及znode版本,您可以实现群集领导者选举的模式。您可以只使用“群集”而不是主/从。该群集中的任何主机都可以发挥领导作用,或者成为overseer

希望这有帮助。