教育的最大成本是什么?时间!
改革的常见难点是什么?习惯!
教育体系更希望以“润物细无声”的方式,优化教育平台,赋与学生更大的成长空间。于是产品经理和工程师们提出了一个基于腾讯云的智慧教育解决方案。
它不改变学生的作答习惯,它收集丰富的过程性数据,它使用AI和大数据助力个性化教学,它是如何在一支点阵笔的身后,建立起云上的深度服务体系呢?
本文将聚焦技术维度,分享整体技术架构的设计与实现。
“企鹅智笔课堂系统”的设计目标是能够同时服务教师和学生,并将自己融入已有的教育体系,并提升教育能力。从整体架构设计上,按照低耦合、高可用、可独立服务的设计原则,我们设计了3个相对独立的子系统,分别是课前的“选题组卷”模块、课中的“互动教学和随堂测验”模块以及课后的“在线批改与个性化报告”模块;首先,我们期望每个子系统有自己独立的用户体系,可以独立服务,但需要解决账户打通问题,如何识别不同系统的用户是不是同一个实体用户呢?其次,为了每个系统都会产生自己的数据,如何将这些数据同步汇总到一起,同时又能够保证数据关系的准确性呢?
在这样的服务诉求下,两个不可绕过的难点出现了:1、用户拉通;2、数据交互。为了实现这两个重要的基本需求,我们设计并开发了“企鹅智笔课堂基础核心服务”,一个可远程调用的数据处理服务。
我们对比了常用的应用层网络通信,http与grpc协议,如下所示:
虽然http协议有浏览器支持,但是在传输效率和安全性等方面都不及grpc协议,而基础核心服务是提供接口服务的,无需浏览器支持,因此在协议选型中采用grpc协议。
接下来,以必备的服务器为核心,我们对比了使用自建服务器与腾讯云服务器,在架构上带来的差异,如下所示:
腾讯云提供了一系列方便开发者使用的组件,高可用、低维护、定向服务(关系型数据库/NoSql数据库)等方面全面优于自建服务,因此选用腾讯云进行服务部署,具体涉及的云服务:
l 云服务器(CVM)
l 云文件存储(CFS)
l 大数据检索(ElasticSearch)
l 云数据库(CDB:redis/mysql/sqlserver)
l 云消息队列(CMQ)
从上图可以看出基础核心服务(GRPC微服务集群)在中间起到了承上启下的作用。业务层与基础组件的交互,以及业务层之间的数据交互都要通过基础核心服务,基础核心服务承担着一个重要的数据存储于调度功能。下文将展示数个基于核心服务的逻辑架构设计。
grpc云服务集群通过ETCD注册到服务组中,同时基础核心服务grpc云服务集群也可以通过ETCD发现登录组件服务,从而获取登录用户信息;grpc服务接收到调用方发送的请求之后,进行相应的处理,存入CDB、CFS或者ES,当一个业务层的数据流程结束后,基础核心服务会向CMQ写入一个消息,通知其下游的业务层进行相应的业务处理。
回到最初的“神之疑问”,不同的子用户系统中的账号,到底对应的是不是同一个实体用户呢?一个用户在3个子系统中可能有3个不同的id,3个不同的用户名称,3个不同的账号密码,更可怕的是,不同的用户在不同的系统中,用户名都很有可能是重复的,这种问题,交给个大活人来判断都有难度,更何况是程序处理,OMG!难道除了上帝真的没有人知道了吗?当然还有,那就是“智慧校园开放平台”的“登录组件”。
首先,子系统1用户在登录时使用登录组件,微信扫描二维码后返回用户识别码,以及在浏览器中种一个登录态cookie,当用户在当前浏览器切换到子系统2时,子系统2在取到登录态cookie后,通过grpc服务向登录组件发起校验,校验通过后则准许用户登录,同时子系统2可以通过grpc服务向登录组件获取用户信息,从而确定用户在子系统2内的角色和权限,这样用户就不用重复登陆了,从而实现了子系统之间的无缝切换。
具体流程可参见如下流程示意图:
根据业务的不同,每张表的结构都不同,而grpc则对传入传出参数有着强数据结构的校验,每次对数据库内数据的调整都要每个字段逐一赋值吗?如果真的这么做,代码冗余就会非常严重,可维护性也会严重下降,这里,我们是用“反向映射”的方法来解决问题。所谓“反向映射”,就是程序在运行时确定数据的类型和标签,并可以对数据进行动态修改。
处理这个问题流程如下图所示:
正如“巴别塔”的建造,带来巨大的语言沟通障碍一样,多用户体系系统的架构也面临着巨大的数据交互的压力。每个系统产生的数据都不是独立的,都需要其他的系统继续处理,而其他系统如何跨系统取数据呢?最简单暴力的方法就是子系统直接开放http api接口,这种做法简单粗暴,虽然立竿见影,但是问题也很明显,首先就是暴露在公网的接口需要进行身份校验,其次,随着参与交互的子系统数量的增加,沟通成本会呈指数上升,虽然目前只有3个子系统,但是随着产品特性的增加引入新的子系统不可避免。那么最好的处理方法就是设立一个“仓库管理员”,子系统1产生的数据,可以通过“仓库管理员”存入“仓库”,子系统2需要什么数据可以跟“仓库管理员”要,如果“仓库”里有就给你,没有就告诉你没有。使用grpc微服务集群搭建的基础核心服务正好充当这个“管理员”的角色。每个系统产生的数据由基础核心服务进行汇总,其他系统需要数据则从基础核心服务中获取。
“世上无难事只怕有心人”,任何一个业务都有其业务难点,任何一个业务难点都会带来对应的技术难点,但这些难点都是可以被解决的,只要思路清晰,方向正确,会使我们解决问题的难度降低很多。“智笔课堂”这个项目,我们充分利用了腾讯云提供的丰富的基础组件服务,极大地降低了开发成本与后期运维成本,将一个原本复杂的系统大大的简化了。
架构上的实践其实涉及多个角度的解析,本文暂就核心架构,进行了关键设计的分享,后续将结合本方案针对大数据检索及AI应用等维度,进行专项分享。
更多咨询或合作,请联系ecological_product@tencent.com邮箱
相关文章:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。