【问题标题】:Is it possible to improve this zmq architecture?是否有可能改进这个 zmq 架构?
【发布时间】:2016-09-01 07:23:09
【问题描述】:

简介:

在下面的架构中,有三个关键组件。

  1. 用户 - 运行用户应用程序的机器。
  2. 应用程序 - 在远程服务器中运行。
  3. 网关/代理 - 用户设备和服务器应用程序之间的隔离所必需的。

用户设备和服务器应用程序之间的消息流应该如下所示

  1. 用户应将消息发送到远程服务器,该消息将由 一个或多个服务器应用程序。

  2. 应用程序应广播/发布消息给所有连接 用户。

  3. 应用程序应向特定用户设备发送消息 (单播)。

此外,一个或多个用户将任意连接或断开与服务器的连接,并且将任意生成或终止一个或多个应用程序。


针对上面的问题陈述,我设计了下面的zmq架构。

网关/代理处理用户和应用程序的任意分配,并提供所需的隔离。它将用户消息发布到所有应用程序。它还聚合所有需要通过 SUB 套接字从应用程序发送给用户的消息。

应用程序发送两部分消息,第一部分是用户身份,第二部分是实际消息。网关/代理根据身份将该消息传输给用户。将创建一个广播的特殊身份,网关如果收到广播身份,将通过 PUB 套接字将消息发布给所有用户。

用户连接到网关中的 ROUTERPUB 套接字。将从两个套接字接收到公平排队的数据。发送时,消息将仅发送到网关的 ROUTER 套接字,而不是 PUB 套接字。


问题:

Q1:上面的架构有什么缺陷吗?

Q2:是否可以进一步改进?

Q2 假定的指标:

  1. 用户和应用程序本质上是动态的,它们自行连接和断开连接,设计应该能够承受
  2. 用户定期向服务器报告其状态,设计应使延迟小于333 [ms](用户通过 Internet 连接到服务器,WAN 连接 btw 用户和服务器提供的延迟远低于333 [ms])
  3. 服务器和用户之间的无损传输(后端确认,丢失重传)

【问题讨论】:

  • 什么是核心效用,您可以根据它比较各自的设计方法——您评估哪些定量的、基于事实的属性以及您使用哪些聚合指标来比较单个解决方案并区分更好和更差的选择?
  • @user3666197我是zmq的新手,从上周开始学习。所以首先,我想检查一下我的理解是否正确,基础设计是否没有任何重大设计问题。
  • @user3666197 但是各种设计要比较的因素是 1. 用户和应用程序本质上是动态的,它们自己连接和断开连接,设计应该能够承受,2. 用户报告其定期向服务器发送状态,设计应促进小于 333 毫秒的延迟(用户通过 Internet 连接到服务器,WAN 连接 btw 用户和服务器提供的延迟远低于 333 毫秒) 3. 服务器和用户之间的无损传输(后端确认,如果丢失)

标签: networking architecture zeromq distributed


【解决方案1】:

您可以尝试使用 Malamute,它可以为您提供所需的东西,更像是信用流、保持活动、跟踪。

Malamute 是基于 zeromq 的小型经纪人,是 zeromq 社区的一部分。您可以在应用程序中将 Malamute 作为组件运行,并且不需要专门的服务或守护程序。

如果您使用的是 C 或 C++,这很容易,因为它可以自然集成。它还具有对更多语言的绑定。

https://github.com/zeromq/malamute

【讨论】:

  • 感谢您的建议,我已经开始探索雪橇犬了。但是这个项目有稳定的版本吗?还是仍在开发中?如果有的话,你能分享一些用户对雪橇犬的评论吗?
  • 可以在安卓中使用雪橇犬吗?或者是否可以使用 jeroMQ 开发一个最小的雪橇犬客户端?
  • 我认为你可以在安卓中使用 Malamute 客户端。尝试在 zeromq 列表中询问。该项目已用于生产并且非常活跃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多