文/何铮 朱迪
为满足企业级大并发需求场景,该系统的设计需要实现以下目标:
(1)内容分发:从传统的拷贝模式,或者互联网自动下载模式改变成物联网指令模式。
(2)物联网化:前端设备支持最新的物联网设备如电子墨水屏。同时也可以将传统前端显示设备物联网化,统一的在物联网平台上进行管理。如:传统电视屏幕、智能电视屏幕、LED屏幕、拼接屏。
(3)智能化:加入AI的接口能力,可以将电子标牌的显示和场景进行互动,除传统的定时下发和手动下发以外,扩展出语音分析发下指令,人脸识别后下发指令等。
(4)高并发需求:需要支持十万级别的前端支持。
(5)同步能力:高并发情况下,低延迟同步播放视频。
(6)可兼容新型内容的播放:除去传统的图片和视频,支持HTML5,以及一些内容输出平台的内容比如:易企秀、WPS H5格式等。
该系统需要需要分离出三层结构来设计完成:
内容分发层设计用于大并发内容分发(按照设计要求是十万级别),采用一种发布/订阅传输协议。
提供一对多的消息发布,可以解除应用程序耦合,信息冗余小。该协议需要客户端和服务端,而协议中主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦。使用 TCP/IP 提供网络连接,提供有序、无损、双向连接;设备联网,也需要连接到互联网中,应用MQTT在 TCP 的上层,指定了如何组织数据字节并通过 TCP/IP 网络传输它们,提高了可靠性。
对负载内容屏蔽的消息传输;可以对消息订阅者所接受到的内容有所屏蔽。
该层的设计是对前端不同的显示设备进行内容适配,每一种显示将提供一个适配程序,这个适配程序将告诉分发程序那些类型和格式的内容可以下发到对应前端设备上,比如前端设备为电子墨水屏的时候将无法发送视频和音频内容,只能发送文字、简单图片(32位,双色)信息,如果前端设备为Android系统(如智能电视机),那可以发送图片、文字、音频、视频和HTML5页面。这样就可以兼容不同的前端显示设备,并且未来可以进行扩展。
物联网层只负责物联网络(IoT)的建立、连接和通信。这层设计对上面两层进行隔离和透明,它需要实现以下功能。
2.3.1 快速发现和组网
模块(前端物联网设备)和网关之间是主从的星型网络拓扑结构,使用者先将网关设置信道和组编号,并开启自组网功能,然后在模块上按照设置的变化进行拨片分组,便可是网内模块快速发现和组网。
模块在自组网模式下,主机模块会自动选择周围没有被使用的物理信道和调制参数形成一个独立的网络,并能自动分配一个唯一的本地网络地址给从机模块,从机模块使用时在使能了自组网功能后就不需要进行任何的配置操作,从机模块在加入网络后就能跟主机进行通讯。
2.3.2 快速发送信息
消息快速发送,小型传输,开销小,固定长度的头部是2字节,协议交换最小化,以降低网络流量;整体上协议可拆分为:固定头部+可变头部+消息体。
2.3.3 转发和重发
消息超时后,自动由网关判断是否通过转发还是重发进行消息的传输,当网关在其他设备中获取到了这次的消息体,这可以通过调用这个设备的转发程序,将消息再次送往目的地设备,如果全网没有发现这个消息体,那么可以调用网关的重发机制进行整体消息重发。
2.3.4 安全加密
每个消息体会和前端设备的一个唯一硬件码进行加密,采用AES[AES]算法对采集数据进行加密。
前端设备:根据其资源受限情况,使用适合的轻量级密码加密算法对通信链路进行保护,小型设备采集的数据采用对应算法加密后发送到业务网关进行数据汇总。
业务网关:负责解密各小型设备采集数据的密文,根据管理小型设备使用的轻量级密码类型,可能需要配置不同的轻量级密码对应的解密功能。为对采集数据在业务处理过程进行保护,业务网关需要将数据使用台式机/服务器环境下的数据加密算法进行保护,建议使用对称加密算法+公钥加密算法结合的方式进行处理。
2.3.5 高并发机制
设计目标是十万级的前端设备,因此网关要能够支撑十万级连接的24小时运行,由于内容分发的频率较低,所以物联网前端和网关通信不需要保持长连接或者快速同步,在设计上需要将前端和网关的主从关系打乱,利用转发机制。可以让前端设备独立运行,在没有网关的情况下,可以将其他前端设备当成网关,接受指令后恢复客户端状态。这样有效的节约了网关的开销,同时可以支持更高的并发。
LoRa是Semtech公司创建的低功耗局域网无线标准,最大特点是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍。
电子墨水屏,是一种革新信息显示的新方法和技术。像多数传统墨水一样,电子墨水和改变它颜色的线路可以打印到多种材质表面。和传统纸差异是电子墨水在通电时改变颜色,并可显示变化的图象。
对于电视屏幕、拼接屏、投影等传统设备,需要添加一个Android主机作为前端设备,该设备需要能够有HDMI和VGA输出,并且支持POE供电,体积小,方便安装在电视机等显示设备的背面。
MQTT(Message Queue Telemetry Transport),遥测传输协议,主要提供订阅/发布模式,属于物联网的一个传输协议。由于其开放、简单、轻量、易于实现,适用于受限环境(带宽低、网络延迟高、网络通信不稳定)。
将需要下发的内容材料上传到内容分发服务器中,包括图片、视频、音频等。然后选择需要下发的目的地群组,以及下发的时间和播放的时间。
经过检查后内容准备在消息队列当中,然后设置消息传输模式为“至多一次”(Qos==0),然后发布下发指令,消息包通过LoRa协议被订阅的前端设备获取,此时当前端设备获取到信息后立即回传一个单字节的确认信息给网关。网关在5s时间内会检查一次是否所有的前端设备都收到了下发指令,如果没有则重发3次。3次过后及超时,超时后是否继续需要用户自行确认,如果继续将抛弃之前没有响应的前端设备(如设备损坏,断电等情况)。
下发校验完成后,需要直接发送第二条指令,设置消息传输模式为“至少一次”(Qos==1),这条指令将直接发送给已经校验完成的前端设备,前端设备获取到这条指令后将通过AES算法进行解密,解密过程中需要带上自己的硬件设备ID,解密后获取内容的实际地址,后通过TCP/IP协议获取内容图片,视频,音频等内容。在这个环节有需要做本地缓存(Cache),首选存放在前端设备的存储中,由于存储完成的时间不一致,需要在存储完成之后回调一个程序,通知网关准备就绪。
在网关接收到全部准备就绪的信号后,需要下发第三条指令,设置消息传输模式为“至少一次”(Qos==1),指令发送后,所有前端设备进入播放预备状态,界面显示预备中,每个预备完成设备将发送给网关信息,并且不断心跳获取最终播放指令,网关不断等待所有播放前端的预备信息,在所有设备预备就绪后,网关发送播放指令。如果在这个阶段有前端设备没有回传预备状态信号,则等待10秒,如果依然没有回传,则抛弃此设备直接进行播放。