XuechengOnline
部分内容参考:Kyle’s Blog
项目介绍
背景
学成在线项目是自研的一个专门针对成人职业技能教育的网络课堂系统,网站提供了成人职业技能培训的相关课程,如:软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式,培训机构可以在平台入驻、发布课程,运营人员对发布的课程进行审核,审核通过后课程才可以发布成功,课程包括免费和收费两种形式,对于免费课程可以直接选课学习,对于收费课程在选课后需要支付成功才可以继续学习。
什么是B2B2C?
B2B2C是一种电子商务类型的网络购物商业模式,B是Business的简称,C是Consumer的简称,第一个B指的是商品或服务的供应商,第二个B指的是从事电子商务的企业,C则是表示消费者。
B2B的定义:企业跟企业之间的电子商务运作方式。
B2C的定义:企业跟消费者之间的电子商务运作方式。
业务介绍
本项目包括了用户端、机构端、运营端。核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。下图是项目的功能模块图:
本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。
划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。
业务流程:
课程编辑与发布流程如下:
课程发布后学生登录平台进行选课、在线学习。
- 免费课程可直接学习,收费课程需要下单购买。学生选课流程如下:
面试题
详细说说你的项目吧(从以下几个方面进行项目介绍):
项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。
项目的业务流程
项目的功能模块
项目的技术架构
个人工作职责
个人负责模块的详细说明,包括模块的设计,所用到的技术,技术的实现方案等。
一个例子:
- 我最近参与的项目是我们公司自研的专门针对成人职业技能教育的网络课堂系统,网站提供了成人职业技能培训的相关课程,如:软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式,培训机构可以在平台入驻、发布课程,我们公司作为运营方由专门的人员对发布的课程进行审核,审核通过后课程才可以发布成功,课程包括免费和收费两种形式,对于免费课程普通用户可以直接选课学习,对于收费课程在选课后需要支付成功才可以继续学习。
- 本项目包括三个端:用户端(学生端)、机构端、运营端。
- 核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。
- 本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。
- 划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。
- 我在这个项目中负责了内容管理、媒资管理、订单支付模块的设计与开发。
- 内容管理模块,是对平台上的课程进行管理,课程的相关信息比较多这里在数据库设计了课程基本信息表、课程营销表、课程计划、课程师资表进行存储 ,培训机构要发布一门课程需要填写课程基本信息、课程营销信息、课程计划信息、课程师资信息,填写完毕后需要提交审核,由运营人员进行课程信息的审核,整个审核过程是程序自动审核加人工确认的方式,通常24小时审核完成。课程审核通过即可发布课程,课程的相关信息会聚合到课程发布表中,这里不仅要将课程信息写到课程发布表还要将课程信息写到索引库、分布式文件系统中,所以这里存在分布式事务的问题,项目使用本地消息表加任务调度的方式去解决这里的分布式事务,保存数据的最终一致性。
技术架构
学成在线项目采用当前流行的前后端分离架构开发,由以下流程来构成:用户层、CDN内容分发和加速、负载均衡、UI层、微服务层、数据层。
名称 | 功能描述 |
---|---|
用户层 | 用户层描述了本系统所支持的用户类型包括:pc用户、app用户、h5用户。pc用户通过浏览器访问系统、app用户通过android、ios手机访问系统,H5用户通过h5页面访问系统。 |
CDN | CDN全称Content Delivery Network,即内容分发网络,本系统所有静态资源全部通过CDN加速来提高访问速度。系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等。 |
负载均衡 | 系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,上图仅在UI层前边标注了负载均衡。 每一层的负载均衡会根据系统的需求来确定负载均衡器的类型,系统支持4层负载均衡+7层负载均衡结合的方式,4层负载均衡是指在网络传输层进行流程转发,根据IP和端口进行转发,7层负载均衡完成HTTP协议负载均衡及反向代理的功能,根据url进行请求转发。 |
UI层 | UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。根据系统功能模块特点确定了UI层包括如下产品界面类型: 1)面向pc用户的门户系统、学习中心系统、教学管理系统、系统管理中心。 2)面向h5用户的门户系统、学习中心系统。 3)面向app用户的门户系统、学习中心系统。 |
微服务层 | 微服务层将系统服务分类三类:业务服务、基础服务、第三方代理服务。 业务服务:主要为学成在线核心业务提供服务,并与数据层进行交互获得数据。 基础服务:主要管理学成在线系统运行所需的配置、日志、任务调度、短信等系统级别的服务。 第三方代理服务:系统接入第三方服务完成业务的对接,例如认证、支付、视频点播/直播、用户认证和授权。 |
数据层 | 数据层描述了系统的数据存储的内容类型,关系性数据库:持久化的业务数据使用MySQL。 消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接。 索引库:存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接。 缓存:作为系统的缓存服务,作为微服务的缓存数据便于查询。 文件存储:提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份。 |
对应的技术栈如下:
环境搭建
所需要的开发工具:
虚拟机配置
这里主要参考给的课程资料中的进行配置,主要包括maven本地仓库、虚拟机配置(这里最好直接使用给的虚拟机,其中已经安装好了对应版本的开发工具,能够直接使用脚本启动多个docker容器)
首先设置网络
点击
编辑-->虚拟网络编辑器
配置网络地址,设置子网IP:192.168.101.0
,子网掩码:255.255.255.0
。导入课程资料中的虚拟机,这里直接将其解压到虚拟机目录下即可。虚拟机的设置建议8G内存、4核CPU。
注意:虚拟机的IP地址为192.168.101.65,不用修改IP地址
远程连接虚拟机。
IP地址:192.168.101.65
账号为:root 密码为:centos执行
systemctl start docker
启动docker。运行:
sh /data/soft/restart.sh
查询docker容器:
docker ps
。看到如下信息即启动成功:
数据库配置
使用的是mysql8版本
账号:root 密码:mysql
连接成功后可以看到如下的数据:
基础工程搭建
学成在线使用 Maven 来进行项目的管理和构建。整个项目分为三大类工程:父工程、基础工程 和微服务工程
每一种类的工程都有不同的作用,下面是对其功能进行说明:
父工程
- 对依赖包的版本进行管理
- 本身为POM工程,对子工程进行聚合管理
基础工程
- 继承父类工程
- 提供基础类库
- 提供工具类库
微服务工程
- 分别从业务、技术方面划分模块,每个模块构建为一个微服务。
- 每个微服务工程依赖基础工程,间接继承父工程。
- 包括:内容管理服务、媒资管理服务、搜索服务、缓存服务、消息服务等。