在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。
2020年的新冠疫情外生冲击,让在线教育再次站在聚光灯下。疫情下教育领域获融资最多,而其中在线教育最受资本青睐。据艾瑞咨询统计,2020年教育行业累计融资1164亿元,其中在线教育融资金额1034亿元,占比89%。与此同时,在行业处于困境的情况下,会加速洗牌,资源向好的企业集中。2020年资源向头部集中趋势明显,中小型机构生存更加困难。2020年资本向在线教育行业累计输送的1034亿元中,80%都流向了头部的5家公司。
To C市场
据艾瑞咨询统计核算,2020年中国在线教育行业市场规模2573亿元,过去4年的CAGR达34.5%,其中低幼及素质教育赛道、K12学科培训赛道在线化进程加快是在线教育市场快速增长的最主要贡献因素。疫情影响下,低幼及素质教育领域的在线化范围持续纵深,职业教育领域的在线化进程也在不断加速,新的供给和需求不断产生。但同时,2020年疫情外生冲击加快了2020年的在线教育进程,将会透支一部分2021年的增速,艾瑞预计2021年在线教育行业同比增速将回落到20%左右。
To B 市场
疫情也加速了整个教育产业链的进化,to B机构快速成长起来,扮演着赋能者的角色,课程内容、招生、师训、直播系统、管理系统等产品及服务大量涌现。随着云服务发展成熟以及疫情对直播课需求的催化,大量提供直播授课系统等PaaS/SaaS服务的机构迅速成长起来,成为各种会展上的主力军。
中国IT人才供给报告(https://new.qq.com/rain/a/20210831A01JI600)
IT人才总体供不应求,高中低人才分别占比8%、41%、51%,详见下图:
IT服务是贯穿IT应用系统全生命周期的各项服务的统称,下图是IT服务产品图谱,本项目属于IT培训产业。
小帽教育项目借鉴了MOOC(大型开放式网络课程,即MOOC(massive open online courses))的设计思想,是一个提供IT职业课程在线学习的平台,它为即将和已经加入IT领域的技术人才提供在线学习服务,用户通过在线学习、在线练习、在线考试等学习内容,最终掌握所学的IT技能,并能在工作中熟练应用。
在线教育的模式出现多种多样,包括:B2C、C2C、B2B2C等业务模式。小帽教育采用B2B2C业务模式,即向企业或个人在线教育平台提供教学服务,老师和学生通过平台完成整个教学和学习的过程,市场上类似的平台有:网易云课堂、腾讯课堂等,学成在线的特点是IT职业课程在线教学。
本项目包括门户、个人学习中心、教学机构管理平台、运营平台、社交系统、系统管理6个模块 。
本项目主要包括三类用户角色:学生、教学机构的老师、平台运营人员。
主要讲解下边的业务流程:
1、教学机构的老师登录教学管理平台,编辑课程信息,发布自己的课程。
2、平台运营人员登录运营平台审核课程、视频等信息,审核通过后课程方可发布。
课程编辑与发布流程如下:
3、课程发布后学生登录平台进行选课、在线学习。
免费课程可直接学习,收费课程需要下单购买。
小帽教育项目采用当前流行的前后端分离架构开发,由以下流程来构成:用户层、CDN内容分发和加速、负载均衡、UI层、微服务层、数据层。
项目技术架构图
技术架构列表
序号 | 名称 | 功能描述 |
---|---|---|
1 | 用户层 | 用户层描述了本系统所支持的用户类型包括:pc用户、app用户、h5用户。pc用户通过浏览器访问系统、app用户通过android、ios手机访问系统,H5用户通过h5页面访问系统。 |
2 | CDN | CDN全称Content Delivery Network,即内容分发网络,本系统所有静态资源全部通过CDN加速来提高访问速度。系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等。 |
3 | 负载均衡 | 系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,上图仅在UI层前边标注了负载均衡。 每一层的负载均衡会根据系统的需求来确定负载均衡器的类型,系统支持4层负载均衡+7层负载均衡结合的方式,4层负载均衡是指在网络传输层进行流程转发,根据IP和端口进行转发,7层负载均衡完成HTTP协议负载均衡及反向代理的功能,根据url进行请求转发。 |
4 | UI层 | UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。根据系统功能模块特点确定了UI层包括如下产品界面类型: 1)面向pc用户的门户系统、学习中心系统、教学管理系统、系统管理中心。 2)面向h5用户的门户系统、学习中心系统。 3)面向app用户的门户系统、学习中心系统。 |
5 | 微服务层 | 微服务层将系统服务分类三类:业务服务、基础服务、第三方代理服务。 业务服务:主要为学成在线核心业务提供服务,并与数据层进行交互获得数据。 基础服务:主要管理学成在线系统运行所需的配置、日志、任务调度、短信等系统级别的服务。 第三方代理服务:系统接入第三方服务完成业务的对接,例如认证、支付、视频点播/直播、用户认证和授权。 |
6 | 数据层 | 数据层描述了系统的数据存储的内容类型,关系性数据库: 持久化的业务数据使用MySQL。 消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接。 索引库: 存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接。 缓存: 作为系统的缓存服务,作为微服务的缓存数据便于查询。 文件存储: 提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份。 |
流程说明
小帽教育按照技术分层的基础上,需要对主要层次使用具体的技术作说明。下面是小帽教育技术栈结构图。
技术栈(技术结构图)
在项目开发前期,需要将本地开发环境进行统一配置,方便后期开发中出现因环境问题引起的异常。在真实开发中也是一样的,开发前,需要对开发环境进行统一配置。不同的公司会有不同的开发环境配置,这里需要大家引以重视,到公司开发前一定要先将本地开发环境进行统一。
服务端开发基础工具版本列表
开发工具 | 版本号 |
---|---|
IntelliJ-IDEA | 2021.x以上版本 |
Java | JDK-1.8.x |
Maven | 3.6.x以上版本 |
Mysql | 8.x |
VMware-workstation | 15.x |
CentOS | 7.x |
nacos-server- | 1.4.1 |
rabbitmq | 3.8.34 |
redis | 6.2.7 |
xxl-job-admin: | 2.3.1 |
项目应从基础 JDK 环境开始配起(基础),需要自行做JDK环境变量配置和IDEA中配置JDK。
上图解释:
注释①:全局字符集设置UTF-8
注释②:项目(Project)字符集设置UTF-8
注释③:项目中的properties文件的编码集设置UTF-8
,后面的选项要勾选,这样中文字符会自动转化为16进制
上图解释:
注释①:设置 JDK 版本
注释②:设置 Java 编译级别
IDEA可以自动优化导入包,但是有多个同名的类调用不同的包,必须自己手动Alt+Enter设置,
下面可以通过设置来进行导包优化。
上图解释:
勾选上图面板中的两个选项
IDEA代码提示默认是区分大小写的,设置为提示忽略大小写,编译我们后期的开发。
上图解释:
注释①:在Code Completion选项面板中,去掉 Match case 前的选项 。
为了规范代码编写,一般在企业中会有自己的开发规范,开发规范中对代码的注释也会有一定的规范,比如下边的规范:
1、所有的类、接口、枚举类型、类的属性、方法的都强制要求编写注释,注释必须使用javadoc规范,使用/***/多行注释格式,不允许使用//xxx单行注释方式。比如下边的注释是不允许的:
//本类是一个测试类
//本类的功能是....
class T1{
}
2、所有的类、接口、枚举类型的注释要求写明作者、功能、日期。
3、代码如果修改需要修改相应的注释。
IDEA提供代码注释模板,方便团队规范代码 的注释。
下边配置IDEA上的代码注释:
1、注释中作者信息非常重要,可以通过虚拟机环境变量进行配置。
点击 Help->Edit Custom VM Options…打开idea.vmoptions文件,在最下面增加一行-Duser.name=用户名。
2、配置类、接口、枚举注释模板。
打开IDEA代码模板配置界面,分别配置Class、Interface、Enum.
/**
* @description TODO
* @author ${USER}
* @date ${DATE} ${TIME}
* @version 1.0
*/
3、配置方法模板
打开Line Templates界面
首先添加一个Template Group:
输入名称,点击“OK”
在分组下添加代码模板
点击“Change”,选择Java下的所有项目
填写模板的内容:
Abbreviation:输入*星号,在方法上输入反斜杠加星号自动生成注释。
Description:模板的描述
Template text: 模板内容
如下:
**
* @description TODO
* $params$
* @return $return$
* @author $user$
* @date $data$ $time$
*/
点击Edit Variables编辑模板中用的变量
对于params方法的参数需要填写脚本,如下:
groovyScript("if(\"${_1}\".length() == 2) {return '';}
else {
def result='';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) {
if(i==0){result+='@param ' + params[i] + ' '}
else{result+='\\n' + ' * @param ' + params[i] + ' '}};
return result;}", methodParameters()
);
其它项目按照上图填写,点击“OK”。
maven使用3.6以上的版本,此项目使用apache-maven-3.8.6-bin.zip。
复制好maven仓库,在本机中Maven的setting.xml文件中配置maven仓库位置,maven仓库的目录路径不要有特殊字符和中文(切记)。
在Maven的conf目录中setting.xml文件中配置好仓库的位置并配置阿里云中央仓库地址。
解压仓库 repository.zip 到本地硬盘
配置到conf目录中的setting文件中
maven的中央仓库设置为阿里云服务
下边在idea中配置maven安装目录及本地仓库的位置。
在IDEA中: File --> Settings --> Build --> Build Tools --> Maven
Maven项配置
下图中的 ① ② ③ 项要配置成自己本地中的路径位置
上图解释:
注释①:设置自己的maven路径(maven的根目录)
注释②:配置maven的settings文件的位置
注释③:配置maven的仓库位置