ZeroRPC发布/订阅聚合结果

2024-05-07 03:48:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python设计一个简单的分布式数据库。我考虑用ZeroRPC实现一个通信层。密钥查找由DHT协议实现,采用req/rep模式。但是,我也希望能够根据键的值进行分布式查找。例如,如果我请求一个具有特定值的键,我希望所有服务器在其本地存储中执行查找,然后将结果返回给请求者。我正在考虑通过发布/订阅来实现这一点,类似于:

    #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.可能是我找错方向了,应该使用其他一些沟通技巧吗?在


Tags: pyimportnone数据库node协议分布式密钥
1条回答
网友
1楼 · 发布于 2024-05-07 03:48:46

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

根据我掌握的有关您正在尝试做什么的信息,您可以使用两种高级解决方案:

Blackbox单个网关后面的服务器节点

Request-Reply Broker Pattern

“使用请求-应答代理使客户机/服务器体系结构更易于扩展,因为客户端看不到工作线程,而工作线程也看不到客户端。唯一的静态节点是中间的代理。

enter image description here

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

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

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

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

相关问题 更多 >