python - ZMQ 发布/订阅可靠/可扩展设计

标签 python publish-subscribe zeromq messagebroker

我正在使用 ZMQ 设计发布/订阅架构。我需要最大的可靠性和可扩展性,并且有点迷失在所提供的可能性的 hell 中。

目前,我有一组发布者和订阅者,由代理链接。代理是一个简单的转发器设备,为发布者公开前端,为订阅者公开后端。

我需要处理代理崩溃或断开连接的情况,并提高整体可扩展性。

好吧,所以我想到了添加多个代理,发布者将轮流向代理发送消息,而订阅者将只订阅所有这些代理。

然后我需要一种方法来检索可能的经纪商列表,因此我编写了一个名称服务来按需提供经纪商列表。发布者和订阅者询问此服务要连接到哪些代理。

我还写了一种“懒惰的海盗”(即一个接一个地尝试/重试)可靠的名称服务,以防主要名称服务出现故障。

我开始认为我的设计有误,因为代码库的大小和复杂性一直在不断增加。我迷失在 ZMQ 提供的可能性丛林中。

也许基于路由器/经销商的东西可以在这里使用?

非常感谢任何建议!

最佳答案

无法直接回答您的问题,因为它基于许多假设,其中许多可能是错误的。

您迷路是因为您使用了错误的方法。将 0MQ 视为一种您还不太了解的语言。如果您从尝试编写“最大可靠性和可扩展性”开始,您将以哥斯拉的呕吐物告终。

所以:使用我在指南中使用的方法。从核心消息流的最小解决方案开始,并使其正常工作。仔细考虑要使用的正确 socket 类型。然后进行渐进式改进,每次都进行全面测试以确保您了解实际情况。随着代码的增长,定期重构代码。继续,直到你有一个稳定的最小版本 1。一开始不要以“最大”为目标。

最后,当您更好地理解问题后,从头开始,然后分几步构建一个工作模型。

重复直到你完全控制了问题并学会了解决它的最佳方法。

关于python - ZMQ 发布/订阅可靠/可扩展设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394076/

相关文章:

node.js - 从 Node/Express 中长时间运行的 POST 中提前返回

c++ - zmq socket可以同时在两个线程中读写吗?

python - 带 SaaS 的集成开发环境

python - 我可以让我所有的 python 脚本都缓存字节码吗?在我的主目录的中央目录树下?

python - BeautifulSoup 选择具有特定类的某些元素中的所有 href

python - Docker + pubsub + subprocess 挂起且没有错误

python - 将 Pandas 转为 pyspark 表达式

publish-subscribe - Mosquitto 未在 SYS 主题上发布

java - 为什么 jeromq 使用 setReuseAddress(true) ?

c++ - ZeroMQ:如何在 Windows 上处理 Ctrl-C