【发布时间】:2016-09-01 07:23:09
【问题描述】:
简介:
- 用户 - 运行用户应用程序的机器。
- 应用程序 - 在远程服务器中运行。
- 网关/代理 - 用户设备和服务器应用程序之间的隔离所必需的。
用户设备和服务器应用程序之间的消息流应该如下所示
用户应将消息发送到远程服务器,该消息将由 一个或多个服务器应用程序。
应用程序应广播/发布消息给所有连接 用户。
应用程序应向特定用户设备发送消息 (单播)。
此外,一个或多个用户将任意连接或断开与服务器的连接,并且将任意生成或终止一个或多个应用程序。
针对上面的问题陈述,我设计了下面的zmq架构。
网关/代理处理用户和应用程序的任意分配,并提供所需的隔离。它将用户消息发布到所有应用程序。它还聚合所有需要通过 SUB 套接字从应用程序发送给用户的消息。
应用程序发送两部分消息,第一部分是用户身份,第二部分是实际消息。网关/代理根据身份将该消息传输给用户。将创建一个广播的特殊身份,网关如果收到广播身份,将通过 PUB 套接字将消息发布给所有用户。
用户连接到网关中的 ROUTER 和 PUB 套接字。将从两个套接字接收到公平排队的数据。发送时,消息将仅发送到网关的 ROUTER 套接字,而不是 PUB 套接字。
问题:
Q1:上面的架构有什么缺陷吗?
Q2:是否可以进一步改进?
为 Q2 假定的指标:
- 用户和应用程序本质上是动态的,它们自行连接和断开连接,设计应该能够承受,
- 用户定期向服务器报告其状态,设计应使延迟小于
333 [ms](用户通过 Internet 连接到服务器,WAN 连接 btw 用户和服务器提供的延迟远低于333 [ms]) - 服务器和用户之间的无损传输(后端确认,丢失重传)
【问题讨论】:
-
什么是核心效用,您可以根据它比较各自的设计方法——您评估哪些定量的、基于事实的属性以及您使用哪些聚合指标来比较单个解决方案并区分更好和更差的选择?
-
@user3666197我是zmq的新手,从上周开始学习。所以首先,我想检查一下我的理解是否正确,基础设计是否没有任何重大设计问题。
-
@user3666197 但是各种设计要比较的因素是 1. 用户和应用程序本质上是动态的,它们自己连接和断开连接,设计应该能够承受,2. 用户报告其定期向服务器发送状态,设计应促进小于 333 毫秒的延迟(用户通过 Internet 连接到服务器,WAN 连接 btw 用户和服务器提供的延迟远低于 333 毫秒) 3. 服务器和用户之间的无损传输(后端确认,如果丢失)
标签: networking architecture zeromq distributed