谌建飞,邓 敏,唐俊龙,文勇军 ,唐立军
1.长沙理工大学 物理与电子科学学院,长沙 410114
2.近地空间电磁环境监测与建模湖南省普通高校重点实验室,长沙 410114
远程实验是一种自动化远程交互控制的全实物新型实验模式,具有真实仪器控制、网络在线操作和实验资源共享等特点[1-2]。近年来,随着网络通信技术的发展,基于互联网的远程实验受到越来越多人们的关注,各大高校纷纷建立了自己的远程实验平台,开展了物理、化工、机械、电气等专业课程的实验应用[3-5],有效促进了实验资源的共享和教学能力的提高。目前,对远程实验的研究工作主要注重在实验平台与实验应用的开发上,因缺乏实时可靠消息传输、通信安全控制以及应对大规模实验仪器与用户并发访问的能力,导致不能全方位对外开放[6-8]。
图1 远程实验通信方案
随着消息队列遥测传输技术(Message Queuing Telemetry Transport,MQTT[9])在智能家居、智能物流、地质灾害预警和工业远程监控中的成功应用,为开放式远程实验的通信研究开辟了新思路。MQTT是由IBM公司于1999年开发的即时通讯协议,并于2014年成为推荐的物联网传输协议标准,采用“发布/订阅”模式,具有轻量级、快速、低延时、可扩展等特点[10]。与XMPP、SIMPLE协议相比,MQTT专门针对传感器网络优化设计,具有更小的通信开销,能够有效节省控制器的计算资源和流量,承载海量终端信息传输,提高通信的实时性和可靠性[11-12]。目前,基于MQTT的开源服务器实现主要有Mosquitto、HiveMQ和EMQ[13]等,EMQ基于高并发Erlang/OTP语言平台设计,支持MQTT-SN[14]与Web-Socket协议和分布式集群部署,具有更强的并发性能,能够承载物联网终端的海量MQTT并发连接,成为远程实验通信的可靠选择。
因此,本文以MQTT为核心,从实验仪器与用户并发访问、实时可靠消息传输、网络安全控制和仪器安全保障四方面开展研究,探索一种能够实时连接大规模传感器网络并适用于高并发访问的远程实验通信方案,为远程实验的对外开放和实验通信技术的发展提供参考依据。
远程实验平台对外开放需要解决并发性、实时性、可靠性和安全性问题,其通信系统需要满足以下需求:(1)通信并发连接数达到百万级,每秒消息传输能力不低于50 000条;(2)通信时延小于300 ms,消息传输成功率大于98%;(3)提供通信服务质量和消息顺序控制保证;(4)建立用户实名制访问,仪器授权管理和实验数据安全传输;(5)提供通信失效仪器安全保护和通信自愈。
根据以上分析,选择MQTT技术来构建远程实验通信网络。方案设计如图1所示。系统从结构上分为仪器控制端、Web用户端和通信服务中心。仪器控制端由实验仪器、传感器、致动器和控制器组成,Web用户端由HTML5、WebSocket和教育电子身份号(E2ID)技术[15]支持,通信服务中心由通信服务器、数据库服务器和应用服务器组成。
通过搭建基于MQTT的EMQ消息推送服务器集群来解决远程实验通信的并发性能问题;结合嵌入式和WebSocket技术来解决实验仪器的接入和Web用户的访问问题;结合SSL/TLS和E2ID技术来解决远程实验通信的网络安全控制问题;结合MQTT的通信服务质量保证机制并设计消息顺序控制机制来确保消息的实时可靠传输;结合MQTT的遗嘱机制设计仪器安全保障与通信自愈机制来解决通信失效和实验仪器的安全保障问题。方案中将通信与实验业务逻辑分离,解除应用程序耦合,使通信设计灵活独立,易于扩展,并可根据需求提升通信处理能力。
实验仪器在传感器、致动器和控制器的协调控制下完成实验操控和数据采集。大规模的实验仪器借助于嵌入式设备进行网络接入,而用户通过Web进行高并发访问,对实验通信性能提出了不小的挑战。通过进行EMQ集群设计、通信话题设计和仪器与用户接入优化设计来解决实验仪器与用户并发访问问题。
3.1.1EMQ集群设计
为使通信并发连接能力达到百万级且每秒消息传输能力不低于50 000条,采用构建分布式通信集群的方法解决该问题,设计方案如图2所示。
图2 EMQ通信集群方案
EMQ服务器单节点在8核28 GB系统配置下,SSL单向认证稳定连接数在20~25万,每秒消息传输能力不低于2万条[13],因此集群规模设计根据实验通信需求和单节点性能选用5较为合适。各节点之间采用EMQ自身提供的基于静态节点列表自动集群创建方法,在EMQ配置文件中配置需要加入集群的各节点名“Name@Host”,Host为IP地址或FQDN(主机名、域名),在EMQ集群启动时,系统根据配置文件中的节点列表,依次将各节点连接到集群,实现系统互联与路由共享。在集群的外部添加Azure负载均衡服务器,使用5元组哈希(包括源IP、源端口、目标IP、目标端口和协议类型)分发策略将流量映射到各可用EMQ服务器上。在Azure负载均衡器上,采用动态探测与最小连接数优先算法,通过对集群各节点监听端口进行侦听,如果响应正常,则再根据各节点建立的连接数统计,选用具有最小连接数的节点建立通信,实现动态负载均衡。当多次侦听响应失败时,停止向该节点发起通信连接。
EMQ集群的设计方案能有效提高通信的并发处理能力,实现动态扩容,并解决服务器单点故障问题。
3.1.2 通信话题设计
MQTT基于话题进行消息路由,为确保每组实验仪器与用户间通信的独立性,通信话题采用层次化功能划分设计,具体如下:“commun/{institution_id}/{device_id}/{function}”。“commun”表示实验通信业务的最高级与其他实验业务区分;“{institution_id}”表示实验仪器所在的单位或机构的唯一标识;“{device_id}”表示具体实验仪器的唯一标识;“{function}”表示功能分类,包含“status”“operation”“data”,分别用于仪器的状态监控、操作控制和实验数据分发。
3.1.3 仪器与用户接入优化设计
实验仪器与Web用户的接入直接关系到远程实验通信性能与交互效率。当前大多实验平台采用Socket和Ajax轮询通信方案,需要自下向上对通信交换协议进行设计,并存在资源消耗过大问题。MQTT已经针对物联网做了大量的优化工作,将协议交换最小化,报文结构紧凑,最小报文长度只有2字节,因此采用MQTT来优化仪器与用户接入,以实现嵌入式设备和Web端的计算资源优化并降低网络流量。
实验仪器与用户都通过MQTT消息通信模块进行网络接入,MQTT消息通信模块包含通信连接建立、心跳维持、消息发送与消息接收功能。在仪器控制端构建MQTT通信网关,传感器与致动器通过I/O口、串口或无线模块与控制器连接,向上通过基于TCP的MQTT与EMQ集群通信,对不支持TCP/IP协议栈的设备使用MQTT-SN,该方法能有效降低控制器资源消耗与网络流量。Web用户端采用基于WebSocket技术的MQTT与EMQ集群相连,实现用户的接入,WebSocket可以建立服务器与浏览器之间的持久化通信连接,与Ajax轮询相比能大幅减少Web端的网络流量与通信时延。
“低延时、高可靠”对实验操作体验至关重要,以往的远程实验缺乏相应的通信服务质量保证。另外,MQTT只提供了简单的消息顺序控制,在网络不稳定的情况下连续发送多个消息时,虽然能保证消息的可靠传输,但并不能很好的保证消息的顺序接收。因此,通过利用MQTT的通信服务质量保证和消息顺序控制机制来确保消息的实时可靠传输。
3.2.1 通信服务质量保证设计
根据实验数据传输要求与网络状态,MQTT提供三种不同的通信服务质量保证,分别为QoS0尽力而为、QoS1至少一次、QoS2恰好一次,针对这三种通信服务质量对实验通信的消息传输进行控制。对于实验中单次数据丢失不会影响实验结果的情况,采用QoS0传输消息,消息发送者只管发送消息,不确认消息的丢失,用于实验环境监测数据采集;对于必需可靠传达,但收到重复的消息也不受影响的情况,采用QoS1传输消息,消息接收者如果没有知会或者知会本身丢失,消息发送者会再次发送以保证消息接收者至少会收到一次,用于实验仪器的状态数据传输;对于消息的丢失和重复会造成实验出错的情况,采用QoS2传输消息,可确保接收者收到且只收到一次该消息,用于实验参数调节与仪器的交互控制。
3.2.2消息顺序控制设计
为了确保消息的顺序控制,对同一会话下的所有消息添加消息序号管理。实验仪器和用户在建立连接时初始化并同步各自消息的序号,发送端在发送消息时对消息进行编序,并暂时保存当前信息。接收端对接收到的消息序列号进行检查,通过对比上一条消息的序列号,确认两条信息之间是否有消息缺失。如果发现有消息缺失,则暂存这条消息等待缺失消息的到来,当缺失的消息被接收处理后,再读取该消息。如果等待超时,则发送一条访问缺失消息的命令给发送端,让发送端重新发送该消息,从而确保消息顺序控制,控制流程如图3所示。
当前远程实验系统仅采用简易的匿名认证和明文数据传输方法,没有进行有效的网络安全防护。通过研究传输层和应用层的网络安全设计,来解决实验通信的网络安全问题。
3.3.1 传输层网络安全设计
传输层采用SSL/TLS协议实现MQTT通信的安全认证与数据加密,SSL/TLS协议采用证书进行身份校验并对数据加密,能确保所有信息的完整性和加密传输。考虑用户数量众多和效率问题,采用SSL单向认证的方式。基于SSL/TLS协议的网络安全设计包含证书与密钥文件生成、证书与密钥文件配置和通信验证。证书文件由Openssl软件生成,首先生成CA文件,再由该文件为服务器和客户端签发各自的私钥文件和证书文件。将生成的文件拷贝到EMQ通信服务器和客户端上,配置相应的SSL安全选项,最后建立安全加密的通信连接。
图3 消息顺序控制
3.3.2 应用层网络安全设计
应用层采用基于E2ID实名制技术来确保对用户的实名认证和安全控制,同时设计用户访问控制(ACL)机制来实现对仪器操作的授权管理。
E2ID是由单位代码、居民身份证号码等经过特定算法生成的唯一标识码,用作用户身份认证以及网络实名制的标识,具有较强安全性,目前已有近千万个在线用户[16]。在用户创建时通过调用E2ID认证接口,提交用户真实身份信息和E2ID进行实名验证,实现对用户的有效控制。
EMQ采用基于话题(Topic)订阅的访问权限控制机制,并提供基于MongoDB方式的实现。将EMQ集群所有节点连接到同一个MongoDB数据库(大规模布置时可考虑MongoDB集群),在MongoDB的mqtt数据库中创建mqtt_user和mqtt_acl表,用于存储用户和访问控制的信息。用户在预约实验时创建访问控制信息,获取仪器的操作权限,在实验操作结束后失去该权限。在EMQ监控与认证应用中设计访问EMQ用户信息和访问控制管理服务API,用于动态管理用户及其访问控制权限。用户实名认证与访问控制流程如图4所示。
当实验操作过程中发生通信服务器宕机,用户与仪器异常掉线或仪器运作超出安全控制,将致使仪器失去控制,造成仪器损坏。因此系统必需具备及时下达安全控制指令,阻止安全事故发生,并能自动切换通信连接、尝试通信自愈和故障报警功能。
3.4.1 仪器安全保护设计
针对实验通信失效的安全问题,对实验仪器进行三层保护设计。
(1)建立遗嘱消息保护机制。远程实验是由用户对仪器的“一对一”操作,用户获取到仪器访问权限后,与EMQ集群通信系统建立连接时,设立遗嘱消息(willM-essage),willMessage由topic、payload、QoS和 retain组成,分别表示遗嘱消息主题、消息内容、通信服务质量和是否驻留服务器以备后来订阅者可以接收该消息,topic由实验仪器订阅,payload为紧急停止实验仪器命令,QoS等级为QoS1,retain为false表示不驻留。当已经建立连接的Web用户端异常断线时,通信服务器能够主动检测到并将该遗嘱消息发送给实验仪器控制器,及时停止实验仪器。当用户再次建立连接时,实验仪器可以重新被启用。
(2)建立通信连接检测机制。在仪器控制器上设计MQTT通信连接断开检测处理事件,该事件基于MQTT的心跳机制进行实现。MQTT客户端建立连接后会周期性(60 s)发送一个心跳包给服务器,服务器收到该心跳包后返回一个响应,客户在规定时间内收到响应则认为当前通信连接正常。当客户端发送心跳包出现异常或在超出1.5倍心跳周期内仍未收到响应,则认为通信连接故障,此时触发停止实验仪器事件及时停止实验仪器,然后尝试重新建立通信连接。当通信连接重建失败时,在本地发出故障报警信息。
图4 用户认证与访问控制过程
(3)建立实验安全阈值管理。远程实验的仪器操作中存在较多的转动、加热和位移控制等。在通信失效仪器未能及时停止时,将直接或间接的影响仪器安全。在仪器控制器上设计实验安全阈值管理事件,该事件包含3个参数(上限值、下限值和输入值),输入值为需要进行安全阈值检测的数据,上限值和下限值是对该数据的阈值设定。当输入值低于安全阈值范围的10%或高于安全阈值范围的90%时,该事件给出警告提示,当超出安全阈值范围时,触发停止实验仪器并发出报警信息。实验工作安全阈值管理的数据,根据实验运作和影响仪器安全的数据关键性进行选取。
3.4.2 通信自愈机制设计
通信自愈机制由MQTT消息通信、负载均衡节点信息表、通信状态存储、故障处理模块组成。运行流程如图5所示。
在建立通信连接时,向EMQ监控与认证应用请求当前系统中可用的负载均衡节点信息并保存到本地,随机选取一个节点建立通信。当通信发生连接中断时,先进行重连,如果不成功则调用通信自愈机制,保存当前通信状态,读取其他节点进行通信连接;如果连接成功,则重新读回通信状态,否则再次读取其他节点信息,进行通信连接。当所有节点都不可用时,在本地发通信故障报警信息。
图5 通信自愈运行流程
按照设计方案在微软Azure云计算平台上搭建远程实验通信系统。EMQ集群规模大小为5,每个通信节点服务器配置为8核28 GB的Ubuntu 16.04.3-LTS,同时配置2个负载均衡器,1个MongoDB数据库和1个EMQ监控与认证应用服务器,并完成相关软件部署。系统部署完后启动EMQ服务并开启MQTT:SSL,MQTT:WSS端口监听。将实验通信的Web用户端功能集成到远程实验平台[8]。实验仪器为已经在远程实验平台开发使用的迈克尔逊干涉仪、等厚干涉仪和声速测量仪等,仪器控制器采用基于ARM处理器的树莓派,实验仪器通过树莓派连接到通信系统。
针对开放式远程实验通信需求,主要对系统的并发、消息传输和安全可靠性能进行测试。并发性能通过模拟大规模用户在线访问,对通信服务器性能和响应时间进行实时监测的方法进行测试。消息传输性能通过给系统施加不同通信压力,然后测量不同消息负载和不同通信服务质量下的消息传输时延的方法进行测试。安全可靠性能通过进行相关实验操作,实时查看实验操作效果并对通信数据进行抓包分析的方法进行测试。
测试机与实验仪器位于实验室环境,网络带宽为10 MB。测试机系统配置为4核8 GB的Windows 10,运行远程实验平台Web应用软件。测试中所需的用户负载模拟与通信压力生成由负载机组完成,机组规模为20,部署于微软Azure云计算平台,系统配置为4核14 GB的Ubuntu 16.04.3-LTS。
在用户负载从1万逐渐增加到100万的情况下对系统进行并发性能测试,每秒新增负载连接数为1 000,采用SSL单向认证方式连接。测试步骤如下:(1)由负载机组以每秒1 000条的速率向系统发起通信连接;(2)通过系统性能监测软件对集群中单个服务器节点的CPU占用率、内存使用情况进行实时监控;(3)采用软件计时方式测量通信连接的响应时间,并统计连接成功数;(4)对负载不断增长的1万、25万、50万、75万、100万阶段随机抽取不少于200组数据进行统计分析。测试结果如表1所示。
表1 并发性能测试
由表1可知,随着用户连接数增多,内存占用率增大,而CPU占用率、平均响应时间略有增加,但变化不太明显。系统在与测试机开始建立连接的小段时间内,CPU占用率会迅速增长达到峰值,随后不断有所降低,并且CPU占用率与设定的每秒新增负载连接数大小相关,每秒新增负载连接数越大,CPU占用率越大。此外,在设置不重连的情况下,多次测试的连接成功率都达到了100%,从测试的结果来看,系统各项资源使用基本正常,基于SSL单向认证确保了系统安全,在用户高并发访问的环境下,系统仍具有较好的性能。
在10万、50万和100万高负载背景用户连接的情况下,分别对每个通信服务器节点设定1万用户以1条/s的速率发送消息给其他用户,用于给系统施加每秒传输5万消息的通信压力。然后测量远程实验平台Web用户端与仪器控制端之间两种不同负载大小(256 Byte、1 KB)消息传输时延和系统资源消耗。测试步骤如下:(1)由负载测试机组依次生成10万、50万和100万背景用户连接与5万的通信压力;(2)在本地测试机依次进行256 Byte、1 KB大小消息在QoS0、Qos1和QoS2下的消息传输;(3)采用系统性能监测软件对集群中单个服务器节点的CPU占用率、内存使用情况进行实时监控;(4)采用软件计时方式对18种不同情况下的消息传输时延进行统计分析,每组测试数据不少于200条。测试结果如表2所示。
表2 消息传输性能测试
由表2可知,消息负载大小对消息传输时延略有增加,但变化不太明显;背景用户连接数的增加除了会消耗更多的内存外,对系统性能影响较小;针对不同的通信服务质量,消息传输时延有明显的不同。此外,在当前测试的通信压力情况下,消息传输成功率都达到了100%,可以满足远程实验的通信需要。在未来随着系统消息吞吐量的增大,当CPU或内存占用率接近满载的时候,消息传输时延会迅速增长,此时可以通过采取集群扩容的方法分担系统压力,提高系统性能。
采用黑盒测试方法对系统的通信安全控制、可靠消息传输和仪器安全保障等性能进行测试。测试时,按照测试用例在远程实验平台进行用户注册登录、仪器访问和抓包分析;模拟不同顺序消息在不同通信服务质量下的消息传输,然后实时查看消息执行结果;另外,人工制造不同通信失效情况,观察仪器保护情况。测试用例及结果如表3所示。
表3 安全可靠性能测试
采用E2ID实名认证方法和仪器操作授权管理机制有效确保了系统的用户和仪器的安全控制;消息顺序控制机制在网络不稳定的情况下,提供除QoS0以外的消息顺序控制,确保消息的有序传输;而仪器安全保障机制能在实验操作过程中,及时检测到网络故障,下达停止实验的控制指令,确保实验仪器安全,同时具备尝试通信自愈,恢复实验通信的能力。
从实验仪器与用户并发访问、实时可靠消息传输、网络安全控制和仪器安全保障四方面研究了远程实验通信的并发性、实时性、可靠性和安全性问题,设计并实现了适用于全方位对外开放的远程实验通信方案。测试结果表明,该方案功能完善,并发能力强,实时好,可靠性高,安全性好,能有效满足实验应用的消息传输需求。