为丰富高校教师的教学和实验活动,提供集中式的教学和实验系统,我们设计并实现了一套SaaS化高校实教平台[1]。该平台站在用户角度系统可分为运营面、高校管理面和高校学生面;站在功能角度系统分为课程中心、实验中心、招聘中心、资源中心、账户权限中心等。高校管理员和其讲师可以登录平台,进行在线微课和慕课的创建和选择,也可以创建实验室完成实验的在线操作。该平台基于SaaS化的方式,各个高校只需要开通高校实例而无需自行部署服务,目前已经在多个高校平稳运行。
关键词 实教平台 在线课程 在线实验 SaaS
1、平台的建设目标
平台分为课程模块、实验模块、招聘模块、资源模块、账号权限模块,其中资源模块、账号权限模块复用历史项目的权限。
课程模块的设计目标:提供丰富的精选课程库供高校学生学习,课程的数据来源主分为自建课程和平台提供课程。平台提供课程来源于平台运营的创建,平台运营根据平台自有的资源,创建了覆盖多个学科分类的在线课程,并以此课程内容形成课程池。平台运营根据协议从优选课程池中选择校选择相关部分课程形成高校优选课程池;高校管理员从高校优选课程池中选择高校需要的课程,推荐给高校学生,高校管理员和讲师也可以自行创建课程,课程的种类分为慕课和微课,高校讲师或者管理员可以上传课程视频,如果是慕课可以创建章节,设置章节之间的关系,并且为章节添加视频、富文本、PDF、附件等内容形式。高校自有资源彼此隔离,课程池多个高校共享。
实验模块的设计目标:平台运营为高校配置实验科目和实验系列,高校讲师可以创建实验室,实验室根据不同学科分为多个种类;学生要想在线做实验需要两步走,第一步讲师登录实验室创建实验镜像,第二步学员做实验的时候加载实验镜像。讲师制作实验镜像需要使用云端能力,首先讲师登录实验室后,通过VNC连接到ECS虚拟机,进行实验环境的配置,配置完毕后归档镜像,归档后镜像将提交平台运营审核,平台运营根据云能力扫描镜像,审核通过后,各个实验室可以开放给高校学生,高校学生登录后进入实验室,实验室加载实验镜像后完成实验流程,并生成实验报告。
求职模块的设计目标:系统运营提供经过验证过的各个学科的招聘信息并发布,发布后各个高校可以查看招聘信息,并选择其中的招聘信息进行二次发布,各个高校也可以自行发布招聘信息;发布后高校学员可以查看招聘信息,并在线编辑自己的简历,编辑完毕后可以自动向各个HR发送自己的求职简历,并查询发送记录和发送结果,系统不提供招聘单位的入口。
2、系统的设计和实现
2.1、系统目标架构图
学习模块、实验模块、求职服务都基于统一的数据底座,底座云中台包含账号系统、大数据系统、配置中心、合作伙伴域、商品域、计费域、订单域[2]、结算域;外部组件对接OSS、ECS、VNC、FileService、视频服务、MQ、缓存服务、协议平台。
2.2、统一账号鉴权
平台运营账号、高校管理员账号、高校学生账号由账号中心服务OpenAccount提供,账号中心提供了SSO能力、账号在各个业务服务的细粒度权限由各个服务负责,OpenRBAC服务提供了账号角色资源能力,实教平台接入了OpenRBAC。
账号经过登录后,根据域名进入不同的Portal,调用不同的接口需要对应的权限,由网关和边缘服务决定,所有的请求经过LB后,到达网关服务Gateway,Gateway基于Nginx的封装架构Kong,以LUA脚本的形式提供组件服务,例如CSRF token。Gateway对接OpenAccount服务,会话的维持由Gateway完成,Gateway在前端生成对应cookie,该cookie是会话的HttpOnly的cookie,接口调用由cookie作为唯一的入参,Potal面不感知OpenAccount,只和Gateway交互,Gateway和OpenAccount交互,用户登录后得到SSO的ticket,302到前端的Portal,Portal继续调用Gateway的login接口传入ticket,Gateway传入ticket后,OpenAccount获取ticket获取Access Token,将token传回到Gateway,存储到Redis中并设置失效时间,用户调用后台服务接口经过网关配置,网关获取token;如果网关没有获取token则需要跳转登录流程,网关获取token后将token设置到HttpRequest的header的x_auth_token中,并转发到服务LB,服务LB传入到Kong-S,Kong-S定义了转发规则,转发到各个服务,各个服务根据业务逻辑校验token。
各个服务的接口是否需要鉴权由路径的配置决定,如果不需要鉴权,Gateway转发到编排层服务。Gateway。
当用户登录或者注销后,由账号中心OpenAccount通过MQ统一广播消息,各个边缘服务和网关订阅该MQ消息,并清理缓存。
2.3、服务的拆分
服务拆分基于高内聚低耦合原则进行,服务分为边缘服务、编排层服务和原子层服务。Portal的请求经过边缘服务,边缘服务根据请求进行二次鉴权和转发,二次鉴权解析token,获取用户的相关信息,并设置到context中,如果是非鉴权调用,则Context服务是空,边缘服务根据配置将前端请求转发到各个编排层,并由编排层统一进行业务逻辑的编排和越权的校验,越权的校验分为横向越权和纵向越权。
基于三面分离原則,用户面、管理面、运营面的接口完全隔离,运营面的编排层服务、管理面的编排层服务、用户面的编排层服务完全隔离。原子层服务下沉提供基本的服务,原则上不涉及业务逻辑,只进行数据完整性的校验。原子层服务之间相互隔离不能彼此调用,只能由编排层进行调用,原子层服务也可以对外提供服务,但是不同领域的数据彼此隔离。