基于微服务的新教学管理平台应用初探
2019-05-30罗军锋冯兴利洪丹丹
罗军锋 冯兴利 洪丹丹
摘 要:为了适应和支持学校人才培养改革的需要,我校对原有的教务管理平台进行了重建和改造,充分利用目前微服务的优势和特点,将微服务架构引入到新教学管理平台建设中,取得了良好效果。本文介绍了微服务概念,新教学管理平台的建设目标、特点、建设内容、主要架构以及技术重点。
关键词:微服务;教务管理平台;Spring Cloud
中图分类号:TP311 文献标志码:A 文章编号:1673-8454(2019)07-0074-04
一、引言
创新人才培养模式,核心问题是教学管理模式的改革和创新。因为它所体现的办学理念和管理特征,直接影响到人才培养的质量和效益。顺应国家高考招生制度从现有的“学校+专业”平行模式转变为“专业+学校”的平行志愿填报模式、允许学生自主选择专业、实行完全学分制等三大人才培养改革趋势,是建立适应知识经济时代人才培养需要的教学管理模式和当前教学改革的一项十分重要的任务。
为了支撑学校人才培养改革的要求,我校从2016年开始建设新的教学管理平台,这种新型的教学管理平台不仅适应新时代人才培养的改革要求,而且采用目前先进的软件体系架构——微服务的架构,满足教学业务对系统的高可靠性、高适应性、高并发性等需要。
本文试图从微服务的定义和特点出发,介绍了新教学管理平台的建设目标和特点,分析了这种新教学管理平台的几个关键技术、核心应用以及未来的挑战对策等。
二、微服务的定义及特点
按照 Martin Fowler 的定义,微服务是一个软件架构模式,是通过开发一系列小型服务的方式來实现的一个应用。每一个这样的小服务通常都是运行在自己的进程里面,并且通过轻量级的HTTP API 方式进行通讯。这些服务通常会以业务模块为界限,能够被单独开发部署,往往都会用自动化的部署工具来进行产品的发布。微服务的主要特点[1]包括:
1.独立性好
微服务是松耦合的,可以独立打包、部署、升级、回滚和弹性伸缩,不依赖其他微服务,不同的开发团队可以并行开发和部署,避免了牵一发而动全身,提高了效率。
2.部署简单灵活
微服务可以按独立进程去部署,既可以将多个相同的微服务部署到不同的服务器上,也可以在一台服务器上部署多个微服务实例,具备高可靠的水平扩展能力。
3.技术灵活
可针对具体业务特性和团队技能为一个服务选择最合适的语言、框架和数据库。
面向国家重大教育教学改革和学校实际教学要求,以服务广大教师、学生和教学资源为根本,以实现教与学全生命周期更加规范化、精细化、精准化、国际化管理为方向,需要建立一个符合学校人才培养的模式,适应学校教育教学改革要求、体现先进教学管理理念,能够为学校教学质量的提升提供具备强有力支撑能力的教学管理平台。
新的教学管理平台必须支持的内容包括:①支持大类招生与分流管理;②支持完全学分制下教学管理和选课制度;③支持“通识教育+宽口径专业教育”的个性化培养方案;④支持本硕博贯通式培养的教学要求;⑤支持学生自主选择专业、课程和授课教师,及弹性学制下的学籍管理制度;⑥支持校、院、系三级教学组织架构下灵活的教学组织管理与服务;⑦支持各类教学资源的管理与绩效分析。
新的教学管理平台紧紧围绕学校教学管理的业务,建设“学生”、“课程”、“方案”、“成绩”、“教学资源”等教学业务核心基础数据库,同时制定规范的、标准的编码规则。以“微服务”的架构,“组件式”的设计框架和思路,梳理建设学校教务系统的各大业务服务应用中心。
四、新教学管理平台的设计框架以及关键技术
在新的教学管理平台建设中,我们引入了基于微服务架构的体系框架,以解决传统平台的诸多问题,新的教学管理平台的体系框架如图1所示。
该平台主要由数据层、服务组件层 、业务组件层、用户访问层组成。数据层以主数据管理平台为基础,为上层提供所需的数据服务,包括数据的存储服务、转换服务、清理服务等等;服务组件层是将通用的业务规则、资源调度、选课算法模型、教学评价模型进行抽象打包,形成通用的组件为各类教学业务提供服务,这样的好处就是将算法、模型从烦琐的业务逻辑中解脱出来,后期算法模型的改变不会影响到业务逻辑的处理;业务组件层主要负责各类教务业务的处理;用户访问层为各类用户提供人性化的服务。本平台采用了目前流行的、开源的Spring Cloud来实现,其中的关键技术主要包括:
1.服务的拆分
拆分一般包括横向拆分、纵向拆分。纵向拆分是总结出系统中所有通用的服务,横向拆分是根据业务的不同进行的拆分。高校教务日常运行业务是非常复杂的,系统建设首先面临的问题就是针对教学业务的服务拆分,通过认真梳理,依据“先纵再横”的原则进行拆分。最终我们将整个教学业务划分为8个中心,划分的基本原则是每个中心相对独立。每个中心围绕一个业务主题,具体再拆分为若干个服务,如课程中心里面包括课程管理服务、课程查询服务、开课服务等等。最终形成了8个中心83个服务。详细如表1所示。
2.服务的运行
微服务架构中保证服务的运行要解决以下两大问题:第一个就是服务消费方如何发现服务的提供方;第二个就是服务的消费方如何以某种负载均衡策略访问服务提供方实例。这些问题主要是通过引入代理来解决,根据代理在架构中的位置,目前有3种架构,经过分析,我们使用了以下这种架构(见图2)。这种模式一般需要独立的服务注册中心组件配合,服务启动时自动注册到注册中心并定期报心跳,客户端代理则发现服务并做负载均衡。
在Spring Cloud中,Eureka负责微服务架构中服务治理功能,实现服务实例的自动化注册与发现;Ribbon 是负载均衡器,负责自动从Eureka Server 发现服务,然后基于某种负载均衡算法帮助服务消费者去请求服务。这两个就提供了服务运行的基本基础,再加上Zuul的动态路由、HyStrix这个熔断器避免发生雪崩等,共同保障了服务的整体运行平稳。图3就是在Spring Cloud中的完整运行架构。[2]
3.展现层与业务层的强隔离
为了更好地发挥微服务的优点,最大限度地减少业务需求变动对系统的影响,在应用组建与Web应用上实现分离,如图4所示。
新教务管理平台采用“应用-组件分离架构”,将表现层与业务逻辑层彻底解耦,组件通过API(Webservice方式),支撑多个应用。
(1)Web应用层直接面向用户访问,提供了教务平台所需的全部用户交互界面,技术语言构成上基本全为Html/CSS/JS,通过调用组件提供的API,来实现业务逻辑与数据读写。
(2)组件层只提供API接口(Webservice方式),不提供可视化用户界面,其中组件层又根据业务相关度,分为业务组件和基础通用型组件。
(3)各个Web应用之间都是独立无耦合调用的。一个业务组件提供的API支撑多个应用(如课程中心,支撑课程查询、课程管理、课程申请等多个应用)。
如针对课程中心,具体应用的用户角色功能如图5所示:
在课程中心,通过对学校教学业务的梳理,我们认为给院系一级主要提供课程查询、新开课申请,给师生提供的主要是课程查询;给教务处提供的就相对复杂,包括课程的管理、查询、新开课的申请,课程管理又细化为课程停开、课程的增删改查等。
通过分析,这三类用户都提供查询服务,只是权限大小、范围不同,因此,我们将有关权限的功能全部抽象出来,放到平台的基础通用组件中,供全平台调用。针对课程中心上面提到的課程查询服务,我们认为其不仅是为课程中心提供服务,还要为其他系统,如选课系统提供服务,因此设计为业务通用组件,其接口是业务域开放;其他的服务,我们均设计为业务组件,其接口是组件内开放,这两种形成标准的接口供上层调用,最终将业务与展现实现分离。
最终,为满足课程中心系列用户总体功能需求,形成的应用和组件的功能及接口划分如图6所示。
如图6所示,课程查询这个服务,我们根据查询定位的不同,提供两种接口,接口kcQueryAll提供返回所有列表形式的课程,kcQuery这个接口提供返回单个课程表单形式的详细信息的课程;根据展现层不同的需求,调用不同的接口,这两个接口均通过操作底层数据库课程表T_KC_KCB来提供需要的结果。经过梳理,课程中心这个组件共提供17个不同的与课程有关的接口,包括课程的增删改查等。总之,通过课程中心这个组件,我们就将课程相关的接口建立起来了,这样方便了上面各个微服务具体应用的调用。
五、结束语
本文结合学校教务的实际改革需要,提出了一种基于微服务架构的教务平台的建设思路。这个平台不仅能够解决教务实际运行中业务多变的实际需求,而且能够大大减少开发成本,缩短开发周期,截至目前,系统运行稳定,很好地支持了学校人才培养改革。
参考文献:
[1]刘辉军,刘培锋,邱钰锋等.基于开源框架及容器技术的微服务架构研究[J].电力信息与通信技术,2018(6):90-94.
[2]王方旭.基于Spring Cloud和Docker的微服务架构设计[J].中国信息化,2018(3):53-55.
(编辑:王天鹏)