首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZeroRPC发布/子聚合结果

ZeroRPC发布/子聚合结果
EN

Stack Overflow用户
提问于 2013-11-13 14:13:00
回答 1查看 667关注 0票数 1

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

代码语言:javascript
复制
    #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.可能是我看错方向了,应该使用其他的通信技术吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-16 11:56:53

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

根据我所掌握的关于您要做的事情的信息,有两种高级解决方案可供您使用:

一个网关后面的服务器节点黑匣子

请求-回复代理模式

“使用request-reply broker可以使客户机/服务器体系结构更易于扩展,因为客户端看不到工作人员,而工作人员看不到客户端。唯一的静态节点是中间的代理。”

有关此模式的更多信息,请参见这里的ZMQ指南中的代码示例。

用简单的REQ<->REP实现您自己的多播

使用典型的客户端<->服务器模型(REQ<->REP)进行连接,并在自己的代码中实现多播。

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

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

https://stackoverflow.com/questions/19955976

复制
相关文章

相似问题

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