基于RPC框架的远程视频交互系统
2023-03-13丘刚玮唐伟萍
丘刚玮,唐伟萍,黄 欣
(1广西农业职业技术大学信息技术中心 广西 南宁 530007)
(2广西电力职业技术学院汽车与交通工程学院 广西 南宁 530007)
(3广西农业职业技术大学信息工程学院 广西 南宁 530007)
0 引言
远程视频交互系统是基于现代通信网络技术实现多个与会人员音频、视频实时交互的通信业务,在很多行业中得到了快速普及和广泛推广。如电视电话会议、考试在线监控、远程医疗会诊、远程直播教学等,可以有效弥补学校服务定点帮扶贫困村发展问题。因此设计和开发一个远程视频交互系统,为学校定点帮扶贫困村提供农作物生产、病虫害及畜禽疫病远程诊断和产业知识技能远程培训功能,远距离实时解决农户在生产劳作中遇到的各类问题,实现远程诊断、远程培训、资源共享,具有很强的现实意义。
传统远程视频交互系统一般基于网络通信技术自建,主要由视频会议控制系统、多点控制器(multipoint control unit,MCU)、终端和传输信道组成。MCU作为视频处理系统最重要的组成部分,是对音频、视频数据信息和视频会议各种信息的控制处理,其价格昂贵使用复杂投入大,管理运维需要专业人员支持,设备使用率低。随着云计算快速发展,基于服务商商业云的云视频会议逐步成为主流,通过租赁只要能联网的移动设备就能快速召开会议实现远程交互,从而节省了大量的资金投入。微服务架构是近期流行的架构设计模式,适应云环境,能够独立部署、快速迭代,有效提高研发和运维的效率,非常适合云视频等远程交互。远程过程调用(remote procedure call,RPC)技术是随着微服务架构快速发展而衍生出来被广泛使用的技术,可以在微服务间实现快速简洁高效远程调用。因此基于RPC框架设计并实现远程视频交互系统具有很强的应用价值[1]。
1 关键技术概述
1.1 微服务架构
微服务架构是近期开始流行的基于分布式系统,有效克服单体系统弊端,把一个大型且复杂的系统分解为一个个业务边界明确的模块。独立开发,只有遵循统一的框架标准,微服务就可以通过相互协作,形成完整的系统服务体系。在体系中,不同的微服务高度独立,可以单独修改、部署、替换和发布,也可独自开发。微服务一般通过RPC或消息传递这2种方式进行集成,是一种轻量级通信框架进行远程交互支撑,从而实现高内聚、低耦合的组件化分布式系统部署方案。
1.2 RPC技术
RPC技术是一种被广泛应用在微服务框架下,不同服务间交互和集成的形式。远程服务提供者通过约定形式提供服务调用相关信息,被远程代理对象通过动态代理拦截机制而生成远程服务的本地化代理,进而实现远程调用本地化服务。网络通信通过序列化和反序列化方式进行有效传输,独立于具体网络通信协议。常用的实现工具有Web Servic的SOAP和XML-RPC、Facebook的Thirft、Google的RPC、Alibaba dubbo等。表征状态转移(representational state transfer,REST)具有无状态性(stateless),所发出的每个请求数据包中均携带有理解该请求所需信息,能够被所有服务器上响应,且可在微服务环境下优势最大化,既可以使用基于HTTP进行,也能够通过客户端进行服务资源进行灵活访问。
1.3 Netty
Java支持BIO(blocking IO)、NIO(non-blocking IO)和AIO(asynchronous IO)这3种目前主流网络编程模型。根据客户需求的不同,选择不同的模型进行数据通信,通信质量如何在一定程度上取决于模型的选择,本文采用NIO模型。Netty本质上就是一个异步高性能通信框架,具有健壮性、可定制性和扩展性,被广泛应用到分布式系统中供各节点之间远程服务调用,因此业界主流的PRC框架均采用Netty来构建实现。
1.4 kubernetes
kubernetes是业界比较火热,专注于大规模容器资源编排管理的开源系统。定义了微服务化容器的应用,在开源云计算技术整合应用中发挥了重要的作用,为很多企事业单位信息化提供支撑,通过大规模使用容器技术支持微服务化应用,实现更高的性能和效率。kubernetes平台具有很好的自动化能力,提供自动包装、自我修复、服务发现、负载均衡、存储编排和批处理功能,是容器领域最好的微服务架构解决方案,在跨云环境下为应用程序提供了标准接口和管理机制,来降低运维成本和难度。
1.5 Istio
Istio是一个开源平台,由Google、IBM、Lyft共同发布的第二代Service Mesh项目,主要用于解决微服务之间通信和调用问题,本质上是一组网络代理程序组成的服务网络,和用户应用程序一起部署,充当服务“代理”,一旦被代理程序拦截后,开始通过“Sidecar”提供服务。
2 系统设计与实现
2.1 需求分析
2.1.1 系统背景
会议控制微服务是远程双向视频系统的核心服务,主要实现会议过程的操作和管理。基于RPC框架远程双向视频系统架构如图1图示,可以看出,远程视频交互系统构架由基础设施层、数据存储层、协议交互层、业务层和应用层构成。系统开发关键的微服务在kubernetes平台和Istio网络系统上进行开发,充分应用了业务逻辑独立的优点,能够很好地解决服务治理问题。数据存储层包括Redis和MySQL数据库,为不同的服务提供支持,其中前者主要提供临时缓存,后者则是提供数据持久化作用。组件之间主要通过协议分发层的HTTP和SIP分发实现交互。而业务层主要由MCU、会议配置、会议管理、会议控制,以及资源管理5部分构成。其中:MCU负责与底层交互;会议配置主要是常用基础配置管理;会议管理负责用户登录、会议预订、变更或取消;会议控制是该层核心,与其他服务交互频繁,包括资源申请和会场申请、MCU通信和会场状态管理;资源管理包括会议、会场和MCU资源的管理。应用层通过远程视频交互系统客户端界面实现用户双向交互[2]。因此,双向会议控制微服务是远程视频交互系统的关键,负责提供给用户良好的云视频会议体验。为了提高系统安全性、可用性和可靠性,降低会议控制时延,缓存访问策略设计、RPC框架交互是设计重点。
图1 基于RPC框架的远程双向视频系统架构
2.1.2 具体需求分析
系统需求包括功能性和非功能性,其中功能性主要有数据缓存、RPC框架、会控访问安全方案和会议控制功能4部分。数据缓存重点解决查询速度和会控时延速度问题;RPC框架通过kubernetes和Istio的服务注册、服务支持者(Provider)、服务调用者(Consumer)三者一起相互配合,共同完成RPC的远程方法调用,从而大大提高效率,降低了时延性;会控安全方案主要是解决基于Session认证方式的微服务无状态引起大量RESTful会控请求的问题,提升用户使用体验;会议控制主要是各种会议管理操作。
非功能性主要是接口平均响应时间和接口请求成功率,一般稳定可靠的视频会议,要求RPC框架微服务吞吐量达到15 000时,服务响应时间应小于7 ms,服务应答成功率达到99.9%以上,方可获得较好的体验感[3-4]。
2.2 总体设计
根据上述需求分析,基于RPC框架的远程视频交互系统中数据缴存设计、RPC框架、会控访问安全方案和会议控制四部分是总体设计的重点。
2.2.1 数据缓存设计
远程视频交互系统对时延要求很高,时延过长直接影响用户体验,而各种状态缓存数据的存储和访问效率是影响会控时延的重要因素,因此高效存储和快速访问是衡量数据缓存性能的2个重要指标。为了提高用户会控实时性和缓存可操作性,本文设计采用3层数据存储方式[5]。第一层是本地缓存,使用Guava Cache实现,充分发挥它多线程并发、高速度访问的特点,实用快速存储和有效节省空间。第二层是中间层,采用分布式缓存,要求必须具备高性能、速度快、可移植、能兼容多种数据格式,经过比对采用Redis数据库。第三层是具备响应快、体积小、数据持久化和可恢复等特点,适合关系型数据库,因此使用MySQL。在此架构中,第一、二层缓存用于临时数据存储,会后释放,而第三层存储用于永久数据存放,包括账号数据和会议记录等。
2.2.2 RPC框架的设计
RPC框架的设计主要有3部分。1)服务契约,通过YAML服务契约方式对微服务不同功能属性进行一一规范定义,如服务间依赖关系、通信方式等。框架启动时同步对服务契约和服务进行关系绑定,服务消费者利用动态代理拦截机制生成本地代理,实现远程服务本地化,当用户对远程服务提供者进行调用时,从而达到服务契约在整个调用过程中服务的目的,服务结束后通过Provider将调用结果返回。2)使用线程模型解决Netty框架无法支持大量连接而引起吞吐量性能瓶颈的问题,一是针对Consumer工作模式配备CAS队列,实现Eventloop线程快速唤醒,异步执行来提高响应时间;二是添加CAS消息队列解决频繁任务下发与线程唤醒消耗CPU性能问题;三是通过建立Eventloop线程与线程池一一对应的映射关系,通过关联有效降低资源竞争、减少时延和冲突风险。3)对RPC框架按照功能不同,进行具体模块划分:包括服务初始化模块、服务远程调用模块、服务数据通信传输模块和服务公共模块,服务公共模块主要是对所有RPC工具类进行封装[6]。
2.2.3 会控访问安全的设计
传统会控访问基于Session认证和Cookie建立对应关系,安全性不高,因此认证请求均访问共用数据库进行信息检验,易引发性能瓶颈和单点瘫痪风险。首先,结合系统工作时用户发起会话的过程中,有大量的控制信息需要及时处理,根据这个特点,设计基本认证(basic access authentication,Basic Auth)和轻量级授权令牌(json web token,JWT)2种方式共同配合完成。其中,Basic Auth方式需要请求者提供username和password验证身份,Token具有无状态的优点,用户第一次登录时,服务端自动生成一个新的oken返回给用户,用户在后续请求和访问过程中,可以一直使用这个Token请求数据和服务,从而减缓服务端压力,提高扩展性。然后,引入Redis缓存数据库,结合JWT安全访问机制,当Basic Auth认证成功后,采用HS256算法签名,使用Base64编码生成加密Token提供给用户,供用户下次使用,从而减少服务端校验压力,同时提高用户信息安全和系统的可靠性。
2.2.4 会议控制功能的设计
会议控制功能设计主要是对远程视频交互系统的控制和管理,包括启用会议、管理会议和结束会议等,结合微服务特征,明确各业务的边界,减少依赖关系,同类功能进行聚合,简化业务流程,减少消息交互和跨服务调用和访问。远程视频交互系统主要功能模块如图2所示。
图2 远程视频交互系统主要功能模块
2.3 系统实现
2.3.1 数据缓存的实现
将业务相关信息进行聚合,存放在同一个缓存中,抽象Key和Value的存储方法来解决缓存对象设计问题。按照先查询本地缓存Guava→查询Redis→查询数据库的顺序定义查询方法,如在数据库查询到数据,返回数据在Guava和Redis,在Redis查询到数据返回本地缓存,从而提高缓存查询响应速度和查询效率。使用双层消息传递方法,把缓存变更消息传递给订阅消息的实例,一层使用Redis传递,另外一层使用Kafka进行传递,接收方根据接收到消息的先后顺序优先处理,去掉重复消息,从而解决多实例操作缓存引起数据不同步问题[7]。使用注解缓存技术Spring Cache进行缓存抽象和缓存对象的自定义管理,通过注解式使用完成数据存储和读写,提高缓存操作的灵活性。
2.3.2 RPC框架的实现
基于Netty架构,针对该框架的不足,通过优化和改进Consumer、Provider的主要工作模式,实现线程模型优化,有效解决功能冗余和时延问题,从而提高海量数据快速处理的时效。与此同时,使用kubernetes和Istio两者相互融合服务契约来实现服务间的快速发现,通过Gson序列化工具应用,完成服务远程调用功能。其中服务调用流程如下:Consumer发起服务请求,按规则封装后通过Channel在网络传输层发给Provider,经过处理后将调用结果返回。Gson是Google公司发布的轻量级Java库序列化工具,将对象转化为JSON数据格式简便易读。
2.3.3 会控访问安全的实现
会控访问安全主要分鉴权和权限控制。鉴权是指用户入会携带会议ID、登录密码验证,或用户会话中会控Token验证。采用Spring Security框架基于Servlet过滤器根据请求选取对应认证方式进行认证,用户使用会议ID、登录密码在客户端进行登录,系统收到用户请求后先进行安全校验,认证通过后将数据使用Base64编码和HS256算法生成字符串作为会控Token返回用户,后续服务只需携带这个Token进行鉴权校验即可。权限控制则是通过添加过滤器,利用注解实现鉴权和业务代码分离,相关操作添加自定义的@Authority注解,通过注解控制接口和方法去辨别请求方是否具有相应的权限,实现权限控制目的,并减少业务逻辑代码的操作。
2.3.4 会议控制的实现
远程视频交互系统主要功能模块包括主持人模块、会议管理模块、会场管理模块、资源管理模块。主持人模块有开始、暂停、结束会议、邀请、挂断会场等功能;会议管理模块包括静音管理、锁定会议、取消会场和延长会议等;会场管理模块主要是会议中会议相关管理控制操作,如静音会场、举手、设置主持人等;资源管理模块主要是负责存储数据和微服务之间进行数据共享,通过相应接口对逻辑资源和MCU资源实现申请和释放等操作[8]。
3 实验测试与结果
3.1 测试环境
搭建系统测试软硬件环境,对基于RPC框架的远程视频交互系统进行测试。硬件环境:CPU(Core(TM)i7-8700),MCU(64 GB),操作系统(Windows 11);软件环境:操作系统(Windows 11,64位),数据库(MySQL),缓存数据库(Redis)、本地缓存(Guava),容器引擎(CCE),浏览器(Chrome、Firefox、IE7+、Edge)。
3.2 测试过程和结果
3.2.1 功能测试
主要从数据缓存、RPC框架、会议访问安全、会议控制4个方面,采用不同的用例进行测试。以会议控制为例,测试包括挂断会议、会场入会、开始会议、结束会议、更改会议、延长会议、锁定会议、静音会场、举手和取消举手等等。通过逐一进行测试后,结果表明,本文开发的系统达到了预期目标,所有功能正常。
3.2.2 非功能测试
针对缓存访问策略,设置t为时间,划分5个时间段分别为t<3 ms、3 ms-<t<5 ms、5 ms<t<10 ms、10 ms<t<15 ms、t>15 ms,缓存访问请求数为20 000。缓存访问时间结果对比见表1所示,可见,缓存访问t<3 ms的占比达90.3%,可大大减轻数据库压力,提升系统性能。
表1 缓存访问时间结果对比
针对系统性能,主要测试系统接口请求成功率和接口响应时间,根据会议控制实际业务场景进行为期24 h不间断测试。测试结果表明,接口成功率在99.97%~100%,平均会控时延≤200 ms,低于调用接口≤300 ms的性能要求,可以证明成功率高且时延较短,用户体验好。
4 结论
综上所述,远程视频交互系统是移动互联网快速发展后实现的交流形式,得到了各大领域的快速普及和推广。在此背景下,本文设计开发并优化了一套基于RPC框架的远程视频交互系统,为学校定点帮扶贫困村的科技帮扶、远程培训、双向互动提供可靠的手段,并通过系列关键技术的研究和应用,提高安全性和实时性,从而提高帮扶工作的靶向性和满意度。在后续研究中,针对用户的需求,会进一步完善系统功能,拓展RPC框架的通用性。