智慧校园数字实验室云边协同服务器开发研究

2022-03-07 06:58慧,张
软件导刊 2022年2期
关键词:实验台服务器端线程

綦 慧,张 锴

(北京工业大学 信息学部,北京 100124)

0 引言

现如今,在理工科院校的专业实践教学过程中,每个学期都会产生多种类型的实验数据及大量实验文件。数字化校园中的数据不仅包括实验的实时数据和文件,而且包括实验报告、学生信息等静态数据。因为这些数据在服务器里的存储时间不同,对其处理方式也不尽相同。此外,海量的原始数据在网络边缘产生并汇入通信网络,不仅占用大量带宽资源,还对快速、可靠的传输与计算带来了巨大挑战。由于无线通信带宽有限,有线网络带宽也不可能无限增加,并且由于远离计算中心,通信网络的边缘设备计算能力十分有限,因此传统的计算网络架构难以满足广大终端日益增长的任务处理需求。

云计算提出一种有效应对数据爆发的方案,即可将终端设备没有能力处理的计算任务上传到云计算中心进行处理。但是,将大批量物联网设备数据发送到云端所需的网络通信资源非常多,随着数据量的增加,传输成本也会随之增加。而且云端距离设备端较远,会产生较大的传输时延及较慢的传输速率。为解决云端处理所面临的问题,边缘计算应运而生。然而,边缘服务器的资源有限、处理能力有限,远没有云的处理计算能力强大。

云服务中心侧重于大数据、大计算量以及对实时性要求不高的业务场景,边缘服务器侧重于低时延、快速响应的业务场景。云与边缘处理并不冲突,二者是紧密协作、协同互补的关系。

1 相关研究

近年来,云计算、大数据及人工智能技术的快速发展推动了高校信息化建设与改革,越来越多高校开展了信息化实验室建设工程,将理论教学与实验教学相结合,以加强学生创新意识与创新能力的培养。云计算可整合计算、存储、网络、软件等资源,具备按需分配、获取迅速、访问便捷等特点,简化了实验教学资源管理工作,提高了实验教学效率。

文献[8]针对高校教学中的实验仿真环节设计了云计算环境;文献[9]结合云平台建设、信息化系统建设等,设计一种云平台实验教学中心建设方案;文献[10]借助云计算平台,探索开发虚拟实验室控制系统与虚拟实验室用户平台;文献[11]提出在高校网络中心现有计算机、网络等硬件设施基础上,使用云服务应用软件构建云计算实验平台,以满足大学计算机实验教学的需要;文献[12]基于OpenStack 框架搭建云计算实验平台,从教师初始配置、投资效费比、实验室开放、教师实验管理和学生准备时间5个维度对云计算实验平台效果作综合分析;文献[13]针对因计算机实验室的资源扩展性与使用灵活性、个人电脑软件环境配置、网络共享等限制,将个人电脑用于实验课程会造成诸多不便等问题,基于云设计了高校计算机实验教学方案。

然而,云平台的优势固然明显,却很难满足本文运动控制实验平台电机实验较高的实时性要求,因此本文基于云服务器与边缘服务器之间的协同互补,针对智慧校园实验室管理系统的要求,没有只选用云平台服务器,而是首先设计本地边缘服务器与云服务器协同的后端架构,即设备侧本地服务器用于存储实验实时数据,云端服务器用于存储本地备份数据及静态数据,其次对服务器协同下的网络通信进行研究,采用Netty 高性能异步通信框架实现可靠通信,最后完成了系统开发。

2 系统模型与应用架构设计

针对工科院校专业实验室内设备种类多样、数量繁多的特点,设计了智慧实验室管理平台的后端服务器体系结构,如图1 所示。每个实验室配备一台本地服务器,在智能设备的边缘侧对数据进行采集与实时处理,云服务器适时介入与本地服务器协同进行工作。设备与服务器之间的网络通信以及服务器之间采取Netty 高性能异步通信框架进行数据通信传输。

Fig.1 Server system model图1 服务器系统模型

本文采用本地服务器边缘处理与云服务器协同的后端结构,因此系统整体网络结构如图2 所示。

Fig.2 System network structure图2 系统网络结构

如图2 所示,考虑如下几个应用场景:

(1)当实验室本地资源有限时,可选择本地服务器作为后端服务器。云服务器通过一定的通信模式,从本地服务器读取数据,用作备份。该操作不仅可充分利用资源有限的本地服务器存储实验实时数据,而且当用户需要在Web 端进行实验回放时,不需要实时性的后端数据支撑,而是采用云端的备份数据。正常工作情况如图3 所示。

(2)如图4 所示,当本地服务器不足以支撑实验室本地资源的使用时,云端服务器介入,暂时代替本地服务器作为后端服务器。

Fig.3 Normal working conditions图3 正常工作情况

Fig.4 Other cases图4 其他情况

(3)如图4 所示,当本地服务器发生意外,如出现数据量过大、存储不足等情况时,使用云端服务器作为递补服务器。

综上所述,在解决了智慧校园实验室系统服务器架构问题后,考虑到此实验室系统所需的数据传输具有较强的实时性、较大的数据量以及一定的并发量,高性能与高可靠的网络数据通信将是下一步需要解决的问题,合理的服务器架构与高性能的IO 是相辅相成的。针对一个实验室有多个实验台带来的并发实际需求,JavaBIO 这种同步阻塞式的IO 则不合适在此系统中应用,因此选择JavaNIO 这种非阻塞IO 进行读写。

3 Netty 高性能异步通信

根据上文的分析,不管是数据从设备端流向本地服务器还是流向云服务器,亦或是从本地服务器流向云服务器,均为多对一关系。当出现多客户端并发情况时,高性能的数据传输及通信则显得尤为重要。由于Java NIO 的类库和API 繁多,使用较为麻烦,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等,开发工作量和难度都非常大,且JDK NIO 具有一些Bug,例如臭名昭著的Epoll Bug 会导致Selector 空轮询,最终导致CPU 使用率达到100%。一直到JDK 1.7 版本,该问题仍旧存在,没有得到根本性解决。而Netty 是业界NIO 框架中最流行的框架,其健壮性、可扩展性、可定制性都是首屈一指的。

该Web 控制所用系统因实验台设备端与服务器之间的数据通信要求实时性,所以设备端与服务器端建立长连接,基于Netty 实现设备通信服务系统,可不用过多关注连接建立、数据编解码等底层通信的实现,进而能更好地进行业务开发。因此,经综合考虑后,选取Netty 高性能异步通信框架搭建智慧校园实验室通信服务器来完成IO 读写。

Netty 框架使用主从Reactor 模式,下面进行简单介绍。如图5 所示,Netty 抽象出两组线程池,BossGroup 专门负责接收客户端连接,WorkerGroup 专门负责网络读写。Boss-Group和WorkerGroup类型都是NioEventLoopGroup,Nio-EventLoopGroup 相当于一个事件循环组,该组中含有多个事件循环,每一个事件循环是NioEventLoop。NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEvent-Loop 都有一个selector,用于监听绑定在其上的socket 网络通信。NioEventLoopGroup 可以有多个线程,即可含有多个NioEventLoop。

每个Boss NioEventLoop 循环执行步骤分为3 步:①轮询accept 事件;②处理accept 事件,与client 建立连接,生成NioScocketChannel,并将其注册到某个worker NIOEvent-Loop 上的selector;③处理任务队列的任务,即runAllTasks。

每个Worker NIOEventLoop 循环执行步骤也分为3 步:①轮询read、write 事件;②处理I∕O 事件,即read、write 事件,在对应NioScocketChannel 中进行处理;③处理任务队列的任务,即runAllTasks。

如上所述,Netty 最大的优点就是采取了主从Reactor线程模型,抽象出两组线程组,线程组中每一个线程都由selector 一直在轮询执行。一组负责与客户端建立连接,即BossGroup,在本实验室系统中,这一组线程组负责与客户端即设备端进行服务器连接;另一组即WorkerGroup,在线程组的相应线程中选择合适的管道处理读写事件。在本系统中,不同的实验台设备可分别选择线程组中某一线程的channel 进行实时数据的本地服务器存储等。

综上,使用Netty 这种异步非阻塞通信方式,一组线程用于客户端连接,一组线程用于IO 处理,可有效解决多并发连接问题,从而保证通信的高性能与可靠性。

Fig.5 Netty master-slave Reactor thread model图5 Netty 主从Reactor 线程模型

4 服务器通信应用实现及客户端多并发测试

4.1 服务器通信实现

如上所述,Netty 既可以开发客户端,又可以开发服务器端。即针对服务端或客户端某一端,先使用链式编程写出服务器端∕客户端配置代码,再到处理器Handler 里处理业务逻辑代码。如图6 所示,对于服务器端的开发,首先创建BossGroup 与WorkerGroup 两组线程组,采用链式编程对两组线程组进行设置,如使用NioSocketChannel 作为服务器通道实现网络通信,以及设置线程队列连接个数、设置活动连接状态、创建一个通道初始化匿名对象等,然后通过channel 拿到pipeline 并添加Handler,在此处进行后续的业务处理任务,并根据需求进行对应开发。

Fig.6 Netty server-side development flow图6 Netty 服务器端开发流程

系统主要有以下IO 读写通信需求:①实验时,服务端对客户端的二进制实时数据文件进行读取;②云端对本地服务器数据进行读取;③客户端对本地服务器数据进行读取;④客户端对云服务器数据进行读取。下面针对客户端的多并发情况进行服务器连接压力测试,通过测试服务器的稳定性,验证在实验室实验台数量达到上限后,服务器还能否完成客户端连接以及后续的业务逻辑处理任务,即IO 读写等任务。

4.2 客户端多并发测试

针对本实验室系统的实际情况与需求,一间实验室配备一个本地服务器。由于空间受限的原因,一间实验室的实验台个数一般为十几台,一台服务器基本不会连接超过20个实验台。因此,对于服务器的数据接收场景,分别进行20 以及大于20个客户端的多并发连接压力测试,具体测试如下:

测试挑选的业务需求是客户端读取一个二进制文件,然后发送给服务器端,服务器端根据二进制文件的前面两个字节,将其存放到不同目录中。服务器端按照Netty ByteBuf 的getByte 方法取前两个字节,存放到数组中,并与提前设定好的字节进行比对。通过ctx 获取channel 得到客户端IP,记录连接的客户端并进行标记处理,之后存入不同目录中。根据需求在Handler 里进行服务端需求开发,进而进行客户端开发。

首先在开启服务端之后开启客户端,即表示一个实验台上线需要服务器端进行业务处理。

(1)当实验台连接数为20 时,测试结果如图7 所示。(2)当实验台连接数大于20 时,测试结果如图8 所示。

Fig.7 Test connection number 1图7 测试连接数1

Fig.8 Test connection number 2图8 测试连接数2

(3)假设接下来无限制地增加连接数,因为Java 虚拟机(JVM)分配的内存大于系统可用内存数,所以没有足够的空间分配给JVM,可采取调整JVM 内存的方法解决该问题。如图9 所示,当无限制增加客户端连接数时,会出现JVM 内存不足的情况。

Fig.9 Unlimitedly increasing the number of connections图9 无限制增加连接数

但对于本系统而言,30 以内的连接数已足够使用,不需要再调整JVM 内存。因此,本系统采取Netty 的异步通信框架,可实现客户端多并发快速连接与大数据量的读写操作。另外Netty 把NIO 封装后,开发变得不再繁琐。

4.3 系统实现

在后端服务器的有力支撑下,在微信小程序端(移动端)以及Web 端分别开发了系统前端界面。对于前端请求的服务器选择,如前文所述,在系统正常运行的情况下,对于实时的动态实验数据选择本地服务器,静态数据选择云端服务器,客户端与服务端通信选择Netty 实现。前端实现过程如下:针对微信原生开发框架只有一组Tab 栏的问题,为满足学生与管理员登录之后不同的功能需求,学生端采用原生的Tab 栏界面,管理员端界面另外单独进行开发。

对于学生端,主要栏目有:申请实验、我的实验(即预约成功的实验)、实验报告(上传)、我的,如图10 所示。

对于教师端,主要栏目有:申请、实验、报告、我的,与学生端的相关功能对应,如图11 所示。

对于Web 端界面,其中实验实时操作页面如图12 所示。正是由于Netty 高性能异步通信的加入,为一个实验室内10个左右实验台的同时可靠运行提供了保障,有效实现了实时数据的服务器存储等操作。同时,对多个实验台的并发连接进行测试,效果良好。

因此,在后端服务器架构的强大支撑下,数字化实验室管理系统才能发挥出最大的作用,为师生实验带来便利。

Fig.10 Tab page after students log in图10 学生登录后Tab 页面

Fig.11 Tab page after teachers log in图11 教师登录后Tab 页面

Fig.12 Real-time experiment operation page after experiment reservation图12 预约实验后实验实时操作页面

5 结语

本文针对智慧校园的数字化实验室,结合云计算与边缘计算处理的优势,对实验室的服务器进行研究,提出一种本地服务器边缘处理与云服务器云端处理协同的后端服务器架构。在此基础上,采用高性能的NIO 异步通信框架Netty 开发了系统之间的通信服务器,并基于此对业务需求进行开发。后续还有许多需要继续探索的地方,尤其是针对本地服务器与云服务器协同的算法进行研究,探索实现两者协同的最优化。

猜你喜欢
实验台服务器端线程
基于CDIO-E教学模式自制实验台的研究
Linux环境下基于Socket的数据传输软件设计
浅析异步通信层的架构在ASP.NET 程序中的应用
开放式机电液一体化综合实验台设计
浅谈linux多线程协作
基于Qt的安全即时通讯软件服务器端设计
一种汽车电器零部件检测实验台
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
网页防篡改中分布式文件同步复制系统