gpt4 book ai didi

python - ZeroRPC 发布/订阅聚合结果

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:56 26 4
gpt4 key购买 nike

我正在用 python 设计一个简单的分布式数据库。我考虑用 ZeroRPC 实现通信层。 key 查找是通过 DHT 协议(protocol)以 req/rep 模式实现的。但是,我还希望能够通过键的值进行分布式查找。例如,如果我请求具有特定值的键,我希望所有服务器在其本地存储中进行查找,然后将结果返回给请求者。我正在考虑使用 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. 也许我正在寻找错误的方向,应该使用其他沟通技巧?

最佳答案

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

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

对单个网关后面的服务器节点进行黑盒

<强> Request-Reply Broker Pattern

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

enter image description here

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

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

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

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

关于python - ZeroRPC 发布/订阅聚合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19955976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com