【问题标题】:Reliable Client-Server architecture, switch to publish-subscribe?可靠的客户端-服务器架构,切换到发布-订阅?
【发布时间】:2019-08-23 05:44:52
【问题描述】:
我需要一个可靠的请求-响应模型。我正在使用 ZeroMQ。到目前为止,我正在使用REQ/REP 模式(另外还有PUB/SUB,但现在并不重要)。
如果客户端崩溃,它可以轻松重启和连接。因此,我使用了来自ZeroMQ Guide 的“Lazy Pirate Pattern”示例。
如果服务器崩溃,事情就不那么容易了。我必须告诉我的客户它必须重新启动才能连接。当然,通过 PUB/SUB 这样的额外频道我可以处理,但我问自己的是:
为每个方向实现一个模仿REQ/REP 模式的PUB/SUB 模式不是更容易吗?如果服务器崩溃,它可以轻松连接而无需让客户端重新启动。
所以服务器有一个SUB 和一个PUB 套接字,客户端有一个SUB 和一个PUB 套接字。
【问题讨论】:
标签:
client-server
zeromq
publish-subscribe
【解决方案1】:
Q : 为每个模仿 REQ/REP 的方向实现一个 PUB/SUB 模式不是更容易吗模式?
回答:
这个问题是不确定的。
原因:
鉴于 MCVE 代码的特定性为零,没有人可以制定一个衡量标准来区分什么是难什么是容易。
作为根本问题,多方分布式有限状态自动机可能已在 Minimum-Viable- 中指定P产品时尚。然后,MVP 的 MUST-HAVE 功能集明确规定了实施范围以及任何此类 MVP 实施必须具备的最低稳健性水平。
REQ/REP-distributed-behavioural-archetype 有许多不同的原生属性,PUB/SUB-substitute 很难模仿/模仿。 PUB-sender 将很难在出口流量方向上提供公平队列(循环)负载平衡,举一些问题的例子,这将出现在试图“公正”的情况下用另一种原型替换一个原型。
无论如何,任何希望在多方代理网络上为分布式行为模式建立某种新原型,首先需要对这种行为进行坚如磐石的规范,然后再决定如何实施的任何潜在方式使用一些基本工具。
在糟糕和最糟糕的方法池中的糟糕想法中,使用马斯洛的锤子是毫无疑问的。
结语:
如果对 Zen-of-Zero 的艺术感兴趣,请随时阅读 other ZeroMQ posts here 或 Pieter HINTJENS 的精彩书籍“Code Connected, Vol. I”——这是一本必读的文章。