APP下载

基于RabbitMQ构建在线教育培训平台的设计与实现

2021-09-10余社平刘自立何芳

大学·教学与教育 2021年3期
关键词:在线教育

余社平 刘自立 何芳

摘  要:互联网+教育,开展在线教育、在线培训已成为大势所趋。本文结合当前信息技术及多年培训工作经验,构建了由门户网站、央在线教学平台和管理平台组成的在线教育培训平台。该平台提出了一种基于消息队列中间件RabbitMQ的系统架构,并通过设计消息格式、开发数据同步模块、利用ORM、JSON及Supervisor等工具,实现子平台之间数据的快速自动化同步,建立在线教育平台。对其他院校相关系统的设计具有借鉴和参考价值。

关键词:在线教育;在结平台;数据同步;消息队列

中图分类号:TP393    文献标识码:A    文章编号:1673-7164(2021)11-0113-02

党的十九大提出“办好继续教育和网络教育、加快建设学习型社会,大力提高国民素质”“办好学前教育、特殊教育和网络教育”“完善职业教育和培训体系,深化产教融合,校企合作”。开展在线教育、在线培训已是大势所趋、时代所需,具有十分重要的现实意义,是人人能学、处处可学、时时可学的必由之路。

多年来,开展网络教育与培训工作,在网络教育的信息化平台建设方面积累了一定的经验,结合当前信息技术构建出符合新教育理念和教育模式的在线教育培训平台。建设了门户网站、在线教学平台及管理平台三个独立的子平台,不同的子平台分别对应着不同的功能。

三个子平台均为完整信息系统,具有各自的数据库,分别独立部署运行,但要构建成完整的在线教育培训平台还需要完成最重要的一个环节,即数据同步。比如学员在门户网站上报名,那么学员的数据就应及时同步到其余两个子平台;反之在其余任意子平台上学员变更了自己的个人资料,那么变更后的学员数据也应在三个子平台上保持一致。传统的做法是在各个子平台上建立数据接口,在涉及到数据变更的代码位置增加对数据接口的同步调用,然而这种做法会引入诸多不利影响:稳定性差、复杂度高、维护难度大、可扩展性差。采用消息队列中间件RabbitMQ能规避以上不利影响,是解决数据同步问题的良好方案。

一、RabbitMQ介绍

(一)消息队列

首先介绍下消息队列。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息传递到消息使用者。这样的好处在于消息发布者只用负责消息的发布而不用管谁来取,消息使用者只用负责从消息队列中获取消息而不用管是谁发布的。而中间负责消息可靠传递的消息系统即消息队列中间件,常用的产品有RabbitMQ、Kafka和ActiveMQ等。

(二)RabbitMQ与AMQP

RabbitMQ是一款使用Erlang语言开发的,实现高级消息队列协议AMQP的开源消息队列中间件。

所谓高级消息队列协议AMQP(Advanced Message Queuing Protocol),是应用层协议的一个开放标准,为面向消息队列的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制 [1]。AMQP目前常用的协议版本为0-9-1, [2]模型如图1所示:

依据该模型,生产者(Publisher)作为消息的生产者,即投递消息的程序,将消息(Message)发布到交换器(Exchange)上。交换器根据指定的路由规则(Routes)把消息投递到消息的载体——队列(Queues)上。一旦消息被投递到队列上,消费者(Consumer)作为消息的消费者,即接收消息的程序,便可获取到消息采取后续操作。RabbitMQ在此模型中则作为生产者和消费者中间环节的中间件,负责一边接收消息,一边根据路由规则投递消息。

(三)RabbitMQ的特点

RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗 [3]。具体特点包括:

(1)可靠性。(2)灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入队列前由交换机指定路由分发消息。(3)支持集群。多台RabbitMQ服务器可以组成一个集群r。(4)多种协议。RabbitMQ支持多种消息队列协议,比如STOMP、MQTT等等。(5)支持多种语言客戶端。(6)可视化管理界面。(7)插件机制。

二、实现方法

(一)系统架构

结合前述消息队列中间件RabbitMQ的特点,将其引入在线教育培训平台,设计出新的系统架构。

新系统架构下,在线教育培训平台被划分成了三层结构。门户网站、教学平台和管理平台三个子平台作为消息的发布层,在完成自身功能的同时发布数据变更消息,RabbitMQ成为消息的传输层,数据同步模块成为了消息的接收和处理层。

(二)消息格式

参照平台新系统架构,RabbitMQ实现了消息队列的协议,保障了消息的准确投递,但作为最重要的信息载体——消息,它的格式和内容则需要根据实际业务自行定义。考虑到应用消息队列的核心业务是数据同步,具体即是操作关系型数据库中的一行行包含各字段的记录,采用对象关系映射ORM(Object-Relational Mapping)技术。

对象关系映射ORM就是通过实例对象的语法,完成关系型数据库的操作的技术。

利用ORM技术,即可在数据变更时获取到变更记录对应的对象,并将其附在消息的内容里。然而用于传输的消息是基于字节流的字符串,无法记录对象或数组等数据结构,需要将对象做序列化。目前最通用的序列化数据格式是JSON,在原对象的基础上添加上时间戳(time)、数据表名称(table)、变更方式(action)等必要属性后,再进行JSON序列化,即可获得一条消息内容,完成消息格式的定义和消息的发布,进入到数据同步模块的开发。

(三)数据同步

数据同步模块包含一系列的消费者程序,不同的消费者程序占用不同的进程实现相同或者不同类型的数据同步任务。

按照软件分层设计的理论,消费者程序被分成三层:消费者代理、数据同步脚本和自动化配置。

1. 消费者代理

消费者在获取消息时并不是直接就能拿到消息内容,而是要完成与消息队列建立连接、绑定交换器、等待消息、读取原始消息、输出消息内容给执行脚本等系列工作,这部分重复性工作就适合独立的消费者代理去完成。

本文使用的是基于Golang的开源消费者代理程序rabbitmq-cli-consumer [4],编译后可在命令行附加参数指定消息队列地址、队列名称及执行脚本。

2. 数据同步脚本

数据同步脚本为数据同步业务的核心,获取到消费者代理输出的消息内容后即可根据业务需要,调用相关数据接口或直接将数据写入数据库。

3. 自动化配置

消费者程序并非手动调用,而是应该在后台自动默默运行,随时等待消息的到来并及时响应。因此必须采用适当的工具对消费者程序进行统一管理。在Linux操作系统下,Supervisor是其中的佼佼者。

Supervisor是基于Python的进程管理工具,能将一个普通的命令行进程变为后台服务daemon,并监控进程状态,记录日志,异常退出时能自动重启 [5]。它通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

三、结语

科技让教育更精彩,教育搭上“互联网+”的快车,已然大势所趋。本文所设计的基于RabbitMQ构建的在线教育培训平台经多次压力测试,各子平台均正常稳定运行,任一子平台产生的数据变更均能及时同步,且平均数据同步时间低于50毫秒,保障了整个平台数据的一致性。平台构建上线后,虽有局部程序调整但始终保持稳定在线运行,运维人员极少干预。应用结果表明,该系统实用性强、稳定有效,具有很好的易用性和实用性,为学生用户和教师用户提供了一个很好的教与学的网络平台。

参考文献:

[1] [美]维德拉(Videla,A),[美]威廉姆斯(Williams,J.J.W.).RabbitMQ实战:高效部署分布式消息队列[M]. 北京:电子工业出版社,2015.

[2] AMQP 0-9-1 Complete Reference Guide[EB/OL]. (2020-02-21). https://www.rabbitmq.com/amqp-0-9-1-reference.html.

[3] [美]加文羅伊(Gavin M. Roy). 深入RabbitMQ[M]. 北京:电子工业出版社,2018.

[4] RabbitMQ cli consumer[EB/OL]. (2020-02-21). https://github. com/corvus-ch/rabbitmq-cli-consumer.

[5] Supervisor:A Process Control System[EB/OL]. (2020- 02-21). http://supervisord.org/.

(责任编辑:汪旦旦)

猜你喜欢

在线教育
基于微信公众号的交互式课堂及教学模式探索
基于五力模型的在线教育盈利模式的选择
教育出版数字化转型的务实之路
“互联网+”时代民办高校创新教学模式研究
高校在线教育探讨
“互联网+”时代在线教育模式创新研究
在线教育商业模式分析
在线教育商业模式分析
在线教育商业模式探究
提高机械原理教学质量的几点思考