邵一川, 李常迪, 赵 骞, 曹 勇, 杨晓东
(1. 沈阳大学 信息工程学院, 辽宁 沈阳 110024; 2. 沈阳工业大学 理学院, 辽宁 沈阳 110023; 3. 中国医科大学 盛京医院, 辽宁 沈阳 110870; 4. 沈阳速影科技有限公司, 辽宁 沈阳 110041)
一场始料未及的由新型冠状病毒引发的肺炎疫情打破了2020年春节本该祥和的氛围.举国上下防止疫情传播的战役还在如火如荼地进行之中.对于学校广大师生来说,如何在有效防控疫情的前提下确保教学工作正常开展成了首先要考虑的大事.为了阻断疫情向校园蔓延,保障师生生命健康,教育部明确要求2020年春季延期开学,鼓励学校尽可能利用互联网和信息化教育资源为学生提供学习支持.为贯彻落实教育部“停课不停学”的要求,本文设计了虚拟教学空间VRRoom,将分布式虚拟现实技术(DVR)引入远程教学,并提出一种基于数据类型的负载均衡算法,技术上实现“虚拟教学空间上云”,保障学校“停课不停学”,缩小师生线上线下体验感差距,助力打赢疫情防控阻击战.
此次大规模的疫情引发了庞大的学生群体在家待学问题,而远程授课的方式可以利用网络技术实现远程学习,从而摆脱固定的场地以及避免人群的聚集[1].利用互联网+实现远程教育的技术已经很成熟,其网络教学平台的教学模式、教学手段、教学活动也是多种多样,百花争艳[2],既有移动端APP的教学系统,也有慕课授课,还有直播互动,有些教师更是走出学校成为网红[3].利用DVR搭建远程教学场景,因为具有身临其境的效果而备受青睐[4].其中杨玉辉借助虚拟现实技术(VR),在哈佛大学与浙江大学进行跨国VR远程教学取得了不错的效果[5];梅寒则从技术性方面对虚拟现实管理进行了分析和研究[6];文献[7]利用“第二生命”创建了情景化教学空间,并进行了远程实时课堂教学尝试;文献[8]利用“第二生命”的虚拟教学空间开展实时互动的医学放射学教学则更具推广性;一些国外高校也在利用“第二生命”虚拟社交空间搭建用于情景化教学和研究的远程教学空间[9].虽然这些案例都是利用VR技术开展远程教学研究,但国外的高校大多聚焦于基于“第二生命”创建虚拟教学空间,但“第二生命”是国外大型社交软件,国内用户无法访问,而国内的虚拟教学空间往往是线下教学的扩展,对于将VR应用于线上教学并不多见.因此如何利用VR相关技术,在已有设备上更高效地创建虚拟教学情景环境开展教学,是本文研究的重点.
笔者提出建立虚拟教学空间VRRoom,VRRoom是分布式多人互动的虚拟课堂,它利用DVR打造虚拟立体的三维授课空间,师生通过虚拟终端(VR终端设备)进入虚拟教室,感受到对方的存在,打造逼真的教学环境,使师生有身临其境的感觉,在疫情背景下最大程度地保证教学的质量,缩小真实课堂与在线教育体验的差距.
“身临其境”是VRRoom的优势,但真正做到效果逼真则有其技术难点.首先,接入端VR终端设备中内置陀螺仪和加速度计会产生大量的实时定位数据,如头部定位捕捉位置,肢体定位位移等,这些数据可以让现实世界中的使用者与虚拟空间的虚拟人物保持同步,如果不能及时处理实时数据,并根据数据渲染场景,虚拟空间中的人物运动轨迹会与现实人物轨迹产生偏差,令使用者产生眩晕感[10];其次,当VRRoom的用户迅速增加时,VR场景人物定位与渲染的计算量会呈几何倍数增长,如果VR计算资源不具有可扩展性,系统极易瘫痪.所以,定位数据的及时处理,计算资源的可扩展性是实现VRRoom的前提[11].
本文采用在不增加新硬件购置成本的基础上将现有的服务器进行集群管理,通过这种方式,VRRoom可以在不改变体系结构基础上无限地增加服务器计算节点,利用算法均衡负载,这种方式可以有效保障VRRoom的服务器集群(VR集群)具有可扩展性,这是一种以较少代价来实现高性能并行计算的有效途径,可以通过动态扩展计算节点增加VR集群的鲁棒性.
运用何种调度策略来均衡VR集群中各计算结点的负载,从而提高整个VRRoom系统资源的运算速度与利用率是VRRoom可靠高效运行的关键.通常的均衡负载方法分为动态方式和静态方式[12-13].静态均衡负载就是全局代理按任务数均匀分配给服务器集群中各计算节点,此时各节点的任务量比较固定,其负载不会产生较大的变化,如图1所示.静态负载均衡调度策略的优点是平均分配任务,不采取复杂的调度策略,服务器集群内也不会有通讯数据的冗余,缺点是由于集群中各节点的计算能力不同,会造成负载的不均,影响整体反应速度,而且随着系统规模的扩大,系统中各个任务量的大小相差悬殊,按照任务个数平均分配任务量的调度方式将会使个别计算节点处理速度迅速下降,形成瓶颈,导致系统整体效率降低.
图1 静态负载均衡Fig.1 Static load balancing
动态负载均衡是将任务按照服务器集群节点的负载变化,动态地分配到节点上,如图2所示.由于节点的负载是实时变化的,通过分析节点实时负载信息,动态方式可以动态地将任务分配到一些最适合的节点群上执行,以改进静态方式导致的负载分布的不均匀性,从而提高整个系统资源的利用率,因此动态调配更适应分布式系统的实际运行情况[14].
图2 动态负载均衡Fig.2 Dynamic load balancing
VR集群需要完成虚拟场景渲染、定位数据同步、教学内容(教学视频、幻灯片)的推送、语音视频广播、教学应用软件调用等功能.系统运行中,数据是动态实时产生的,而且对不同数据的处理速度要求是不同的:对于实时定位数据需要快速无延迟毫秒级处理;对于教学文件类推送数据可以排队等候节点空闲时处理.VR集群中节点的特点是不同的,有的CPU、GPU计算能力较强,适合高速运算;有的内存、硬盘较大,适合处理文件存储传输类任务.而且在系统运行中,每个VR集群节点负载大小也是动态变化的,如果没有负载均衡策略,运行一段时间后,某些计算节点任务量会越来越多,计算量会越来越大,而另外一些计算节点却可能是闲置的,最终导致VRRoom系统整体资源利用率降低.所以我们既要考虑将不同的任务分配到最适合的VR集群节点上,又要整体权衡VR集群负载.那么设计一个反应迅速的负载均衡调度算法对于VRRoom系统十分必要,负载均衡也是分布式系统重要的性能指标,对系统的整体效果、用户体验感都有着最直接的影响.在均衡负载方式上本文提出一种基于数据类型的优先级调度模式,对不同的数据采用不同的调度模式,将静态负载均衡调度模式与动态负载的调度模式相结合来均衡服务器负载,并采用云代理与点代理结合的调度策略,实时权衡VR集群中各节点性能,动态分配任务,调度过程由云代理及点代理共同完成.
云代理是运行于VR集群的门户接口, 系统中只有一个云代理, 负责收集各点代理负载信息并分配任务. 点代理运行于VR集群内各节点上, 每个节点有一个点代理, 负责接收云代理指令执行分配任务, 并定时向云代理汇报自己的性能及负载信息. 所有用户数据与请求都通过VRRoom门户接口提交给云代理, 这些数据与请求并不是全部保存在云代理数据与请求提交队列中等待调度, 而是由云代理对数据与请求进行分类, 对于实时的定位数据,采取动态调度模式, 对于教学文件的推送采用静态调度模式. 静态调度模式可以由云代理将任务分配指定点代理节点, 这些指定的专业节点处理非实时性数据, 比如教学中作业上传下载任务, 同时不占用其他节点资源.动态调度模式则用来处理实时性较强的数据, 云代理会根据各点代理节点的负载信息、性能信息筛选出最适合的点代理节点群, 将数据计算任务直接分配给此点代理群进行调度, 而点代理群之间会彼此交换信息, 协调均衡负载. 这样云代理可以不再参与此次任务的细粒度分配, 减少了云代理的工作量, 减轻其负载, 避免云代理成为系统瓶颈.
虚拟教室授课过程中,往往需要调用VR集群的其他应用软件资源,如雨课堂、视频广播、幻灯片放映等.这时只需要通过云代理发送请求及下达指令,多个点代理会自动地进行资源搜索与调度,云代理不必理会调用过程,这种从云到点的代理的方式可以有效提高VRRoom系统整体的资源利用率,实现VR集群系统内动态负载的均衡分布.调度模式如图3所示.
图3 基于数据类型的优先级调度模式Fig.3 Priority scheduling pattern based on data type classification
基于数据类型的优先级调度模式的体系结构如图4所示.
图4 优先级调度模式的体系结构Fig.4 The architecture of the scheduling pattern
由以下几部分组成.
1) 优先级划分模块:优先级划分模块接收VRRoom门户的任务,根据数据类型给任务划分优先级.
2) 数据采集模块:系统会定期发出数据采集指令,收集各个节点负载以及性能信息.
3) 任务分配模块:任务分配模块接收优先级划分模块发出的任务派生请求,根据服务集群节点类型与数据采集模块信息,进行动态、静态结合的任务分配,以达到均衡系统内各节点负载的目的.
4) 节点调度模块:每个加入VR集群的节点都内嵌一个调度模块,负责进行节点间的任务调度及动态收集本结点的负载信息与性能信息,并通过心跳数据采集模块定期将信息传给任务分配模块.
5) 安全监控模块:监控点代理所在的节点温度与负载是否过于超负荷或轻载,随时启用或撤下服务节点.
算法由心跳负载跟踪、优先级动态任务分配、负载监控3部分组成.心跳负载跟踪用于跟踪点代理的性能与负载信息;优先级动态任务分配用于选择合适的点代理进行任务分配;负载监控用于监视各点代理的当前负载是否过重或过轻并采取相应的措施.
为了实现算法,云代理会动态维护3个链表:链表1存放各点代理性能及负载信息并排序;链表2存放当前任务的优先级;链表3存放各项负载指标的权重.
VR集群中每隔一段时间t,云代理会产生一次“心跳”,心跳是一个具有头文件的链表,链表会收集每个点代理所在节点的负载与性能信息(CPU、GPU使用率,活动进程数,内存使用率、响应时间、带宽大小、平均应答延迟等),每次心跳收集的数据都会变化,云代理会根据心跳数据排序链表1,以确定接受任务的节点顺序.t是一个配置参数,由云代理根据任务量来决定,当任务量增大时,t会减小,此时“心跳加速”,任务派发更加频繁,集群中更多的节点会参与到计算中来;当任务量减小时,t会增大,此时“心跳变缓”,任务派发频率降低,更多的节点进入休眠状态.
算法会分析VR集群门户接口收到的任务的数据类型,通过数据类型确定任务优先级,形成任务优先级链表2.任务是动态产生的,VR集群节点的负载也是动态变化的,链表1排序点代理,链表2排序任务,将两者对应就是任务分配的方案.通过式(1)得到任务分配目标Nz.
Nz=C(b1,b2).
(1)
式中:C为匹配任务函数;b1为链表1排序;b2为链表2排序;z是待分配任务.
式(2)中:rank为排序函数;H为计算点代理负载函数;Ti为第i个点代理负载信息;ri为第i个点代理性能系数;Li为点代理i各项负载指标值(每个节点有j个状态指标);F′(Li)为点代理i负载下降梯度.
(4)
式中:Ti负载由点代理i的j项状态综合决定,其中Lij_max为节点i的第j项性能指标最大值;aij为第i个节点的第j个性能状态的相应权重,是链表3各项负载指标权重信息,其值是系统运行参数,由管理员给定.
(5)
式中,Ti负载并不能完全诠释i节点当前性能状态,而是需要考虑ri性能系数,其中Li_max表示i节点最大性能状态.
为了有效利用VR集群,当所有点代理所在节点温度过高,负载过大时,云代理会启动备用的点代理节点,卸下部分计算任务交新启动的点代理节点,同时如果所有点代理所在节点负载很小,而其他点代理不存在负载过大时,云代理会撤下部分点代理节点,将其任务分配给轻负载的节点,通过启用和撤下点代理节点,达到集群系统内的均衡负载.
为验证效果,选择优先级调度模式与静态、动态模式的性能及效果进行了对比.
共10台服务器节点:2台DELL T3630服务器节点 (CPU:i7-9700K;内存:32 GB;硬盘:256 GB固态+2TB ;GPU:RTX2080Ti);4台DELL T3630服务器节点(CPU:i9-9900K;内存:64 GB;硬盘:512 GB固态+4TB;GPU:RTX2080Ti);4台T5820/P5820X服务器节点(CPU:I7-9800X;内存:32 GB;硬盘:1TB;GPU:P4000).
VRRoom系统中开发出很多场景,提供给不同的教学类型来使用,如图5所示,大致归类为4种场景.
(a) 座谈场景(b)教师场景(c) 户外场景(d) 多人场景
(a) 座谈场景: VRRoom中只有教师平面影像,无学生虚拟人物,学生之间不能交互;
(b) 教师场景: VRRoom中只有教师虚拟人物,无学生虚拟人物,学生之间不能交互;
(c) 户外场景: VRRoom中有教师及学生虚拟人物,师生、生生之间可以交互,但人数较少;
(d) 多人场景: VRRoom中有教师,学生虚拟人物,师生、生生之间可以交互,人数不限.
图5(a)中只有教师视频影像,数据任务主要为视频传输广播,无需场景渲染;图5(b)中有教师三维虚拟人物教学,但没有学生虚拟人物,数据处理任务主要为场景渲染,教师语音传输及根据教师定位数据进行实时虚拟人物渲染;图5(c)中既有教师虚拟人物,又有学生虚拟人物,而且需要实时精确定位,数据处理任务包括多人定位数据同步,场景人物渲染,师生与生生之间的交互数据处理;图5(d)中既需要定位人物,又有数据传输等应用,为全种类任务.
负载高峰时,有近千人同时使用VRRoom,此时的10台服务器节点会被全部启用,满足教学要求.实际应用中,每100人使用VRRoom,就会有1台服务器节点启用,使用人数与启用服务器节点数呈线性关系.
1) 吞吐量.将系统吞吐量作为评价负载均衡的参考指标,吞吐量是单位时间内能通过服务器的最大流量.吞吐量由两部分组成:
① 平均利用率=平均到达事务数/平均处理事务数;
② 平均响应时间=平均处理时间/(1-平均利用率).
单位时间内能通过的流量越大,平均利用率越高,平均响应时间越短,意味着系统处理能力越强.
2) 任务数量.将任务完成时间作为调度模式算法性能指标,任务完成时间越短,定位与渲染完成越快,越能减轻眩晕感,系统性能越好.
本文在同等条件下,对静态算法、动态算法及本文算法进行验证对比,结果如图6、图7所示.
通过图6、图7可以看出:
(a) 座谈场景(b) 教师场景(c) 户外场景(d) 多人场景
(a) 座谈场景(b) 教师场景(c) 户外场景(d) 多人场景
1) 对于座谈场景,3种算法的表现相似,说明只有数据传输时,从系统吞吐量的角度看,本文算法并不具有明显优势;
2) 对于教师场景,动态算法与本文算法效果相似,略优于静态算法,说明处理少量实时定位数据与渲染时,负载均衡算法优势不显著;
3) 对于户外场景与多人场景,由于进入VRRoom的人数增加,数据定位与渲染任务增大,当任务数在700以下时,动态与本文算法相似但都明显优于静态算法,任务量700以上时,本文算法有明显爬升,说明VR集群开始启动大规模调度算法,本文算法优势明显;
4) 对于多人场景,在复杂场景下,本文算法明显优于其他2种算法,在任务量超过800后,任务完成时间并没有明显增加,说明当任务数大规模增加后,本文算法变得高效.
实验表明,本文算法可以改善VR集群任务的分配和调度,增加VR集群整体吞吐量,缩短任务执行时间, 提高VRRoom运行性能.如果作业量增多,本文算法可以通过负载监测自动启用备用的点代理,保证任务完成时间没有增长很多,提升了VRRoom教学体验.
分布式虚拟现实技术因其交互性与体验感而具有独特的魅力,其作为高校教学形式的一种补充,可以极大地缩短线上线下教学体验的差距.本文设计并开发了分布式虚拟现实VRRoom系统,分析了均衡负载的调度模式,提出了优先级均衡负载调度模式,给出了负载均衡系统结构形式,设计并实现了一种综合考虑各点代理任务数和性能以及当前负载情况的调度算法,算法改善了动态任务的分配和调度,提高了VRRoom系统性能.当VRRoom系统人数增多,算法还可以自动启用备用的点代理,保证系统流畅无延迟地运行.VRRoom系统可以以接近真实的效果还原教学情境,今后会继续在VRRoom系统平台上进一步开发虚拟教学场景实例,提供更为丰富的教学体验场景.