【问题标题】:ZeroRPC pub/sub aggregate resultsZeroRPC 发布/订阅聚合结果
【发布时间】:2013-11-26 04:24:45
【问题描述】:

我正在用 python 设计一个简单的分布式数据库。我考虑用 ZeroRPC 实现一个通信层。密钥查找由具有 req/rep 模式的 DHT 协议实现。但是,我还希望能够通过键的值进行分布式查找。例如,如果我请求具有特定值的键,我希望所有服务器都在其本地存储中进行查找,然后将结果返回给请求者。我正在考虑用 pub/sub 来实现它的可能性,如下所示:

    #node.py
    import zerorpc
    class Node:
        def query(param):
            #lookup code
            return result # could be None or [], etc.

    sub = zerorpc.Subscriber(Node())
    sub.connect('tcp://127.0.0.1:9999')
    sub.run()


    #requester.py
    import zerorpc

    pub = zerorpc.Publisher()
    pub.bind('tcp://127.0.0.1:9999')

    result = pub.query('foo_query') # None
    print result # None

问题是,我可以得到调用pub.query() 的结果吗?如果可以,我可以从一堆订阅者节点中聚合该结果吗?

P.S. 可能是我看错了方向,应该使用其他沟通技巧吗?

【问题讨论】:

    标签: python rpc zeromq distributed-computing publish-subscribe


    【解决方案1】:

    发布者->订阅者模式是一种单向通信模式。这是实现非托管工作项分配的好方法,但如果您想要双向通信或对工作分配(负载平衡等)进行更多控制,则需要另一个通信渠道。

    根据我所掌握的有关您正在尝试执行的操作的信息,您可以使用两种高级解决方案:

    黑箱化单个网关后面的服务器节点

    Request-Reply Broker Pattern

    “使用请求-回复代理使您的客户端/服务器架构更易于扩展,因为客户端看不到工作人员,工作人员也看不到客户端。唯一的静态节点是中间的代理。”

    通过the ZMQ Guide here 中的代码示例了解有关此模式的更多信息。

    使用简单的 REQREP

    实现您自己的多播

    使用典型的客户端服务器模型 (REQREP) 进行连接,并在您自己的代码中实现多播工作。

    我不能说哪种解决方案最好,因为您知道您的应用程序最需要,这只是两个常见的解决方案。实现 ZMQ 的方法有很多种,几乎可以用任何您希望的方式实现。通常最重要的是在高层设计一个好的管道,然后回到 ZMQ 为您完成艰苦的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多