前言

由于Java生态庞大且复杂,各种术语技术栈层出不穷,为了避免学一个技术做一个Demo的情况,也为了增长项目经验,希望做一个项目能够整合生态中的技术,YouVideo因此诞生…

YouVideo是一个视频项目,也可以理解成传统的电商项目,除了基本的登录退出,后台管理之外,项目中的“付费视频”可以认为是电商系统中的商品,同样包含订单模块,使用乐观锁解决幂等问题,使用fastDFS做图片存储,mongoDB和GridFS里面都存了什么?前后端分离之后要如何协调?与之配套的CMS又是什么?大量已知,未知功能,需在探索项目中发现…

一.YouVideo是个什么样的项目?

1.1背景

随着互联网的发展,人们不用在被动的接受电视播放的内容和令人烦躁的广告,用户可以主动的选择自己所感兴趣的内容,同时催生新生行业自媒体,从而出现了不少优秀的UP主,为人们带来生动有趣的视频,丰富了人们的生活。

根据百度百科发布的数据显示,2019年blibili营业额达到67.78亿元 人民币,未来市场规模保持高速增长,而YouTube更是达到了1059亿!

YouVideo借鉴了Bilibili,YouTube的设计思想,是一个提供在线视频服务的平台,满足用户的视频需求。

当前市场的在线模式多种多样,包括:B2C、C2C、B2B2C等业务模式,YouVideo采用B2B2C业务模式,即向企业或个人提供在线视频平台。

YouVideo在线视频平台,平台包括:门户、视频中心 、视频管理中心、CMS静态资源管理中心等子系统。

1.2项目的功能模块

YouVideo是一个在线视频平台,平台包括:门户、视频中心、视频管理中心、CMS系统管理 中心等子系统。

门户是整个平台的入口,功能包括:门户首页、注册/登录、视频搜索、客服等。
视频播放中心为用户提供在线观看服务,包括:我的视频、视频点播、评论等功能;
视频后台中心为个人提供视频管理功能,包括:媒资管理、视频信息管理;
CMS系统管理中心提供系统配置CRUD,页面发布,页面预览等功能;

门户:

CMS:

视频后台(媒资管理):

视频后台(我的视频):

视频列表页:

视频详情页:

二.项目采用什么技术架构?

前后端分离技术架构,前端采用vue.js构建,服务端采用Spring Cloud微服务架构,系统分为用户层、 CDN(本项目未体现)、负载均衡、前端UI、微服务层、数据层、接口层及DevOps等部分组成
服务模块有CMS,用户中心,订单模块,搜索模块,授权模块,视频模块等
前端有门户,视频列表,视频后台管理系统,CMS管理系统 下图是完整的技术架构图:

业务流程举例:

1、用户可以通过客户端访问系统进行在线学习。
2、 系统应用 CDN(本项目未体现) 技术,对一些 图片、CSS样式文件、视频 等资源从 CDN 调度访问。
3、所有的请求全部经过负载均衡器。
4、对于客户端请求,首先请求UI层,渲染用户界面。
5、客户端UI请求服务层获取进行具体的业务操作。
6、服务层将数据持久化到数据库

2.1 微服务技术栈

所有微服务基于Spring Boot、Spring Cloud构建

1)控制层: Spring MVC、Spring Security Oauth2 、Swagger
2)业务层: 事务控制:Spring 任务处理:Spring Task
数据缓存:Spring Data Redis 消息队列:Spring RabbitTemplate
搜索: Elasticsearch

  1. 持久层: 操作MySQL:MyBatis、com.alibaba.druid(采用druid-spring-boot-starter)Spring Data Jpa
    操作MongoDB:Spring Data Mongodb

  2. 数据层,采用MySQL和MongoDb存储数据,MySQL存储用户、Video等系统核心信息,MongoDB存储
    cms、配置信息等。

2.2 接口定义规范

项目架构设立接口层,接口层使用swagger注解描述接口的内容,接口定义规范如下:
1、请求get 请求时,前端请求key/value串,SpringMVC采用基本数据类型(String、Integer等)或自定义类型接收。 Post请求时,前端请Form表单数据(application/x-www-form-urlencoded)和Json数据(ContentType=application/json)、多部件类型数据(multipart/form-data),对于Json数据SpringMVC使用 @RequestBody注解解析请求的json数据。
2、响应
响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据。
响应结果统一格式为json。

2.3 注册中心

两台Eureka Server互相注册

2.4 网关

网关的作用是负载均衡、路由转发、请求过虑等。
项目中网关与Nginx配合使用

2.5 Spring在项目中的使用

YouVideo使用的Spring全系列框架,由SpringBoot作为基础工程,包括基础通用模块
yv-framework-common 存放常量
yv-framework-model 存放实体类
yv-framework-parent 存放pom
yv-framework-utils 存放工具类
Eureka Sever
yv-govern-center Eureka 注册中心
。。。
1.所有的微服务开发采用Spring Boot开发
2.MQ使用Spring AMQP组件
3.数据层使用Spring Data JPA、Spring Data MongoDB、Spring Data redis。
4.业务层使用Spring来控制本地事务,还使用了Spring Task任务调度框架
5.控制层使用SpringMVC、Sprnig Security Oauth2。
6.微服务管理使用Spring Cloud的Eureka注册中心,微服务之间调用使用Ribbon和Feign Client完成。
7.使用Zuul网关完成微服务安全验证

2.6 Spring Cloud在项目中的使用

1.每个微服务使用Spring Boot开发,每个微服务工程包括了web、service、dao三层:
a、web层使用Spring MVC实现,对外暴露API接口给前端调用。
b、service层就是根据业务逻辑编写JavaBean,并使用Spring的声明式事务控制方式来控制事务。
c、dao层就是数据访问接口,来访问MySQL和Mongodb,访问MySQL使用Spring Data JPA和Mybatis,访问 mongodb使用Spring data mongodb。
2.微服务开发完成要向Eureka注册中心注册,以便被其它微服务查找和访问。
3.微服务与微服务之间使用feign来调用,需要在接口上声明@FeignClient注 解,Spring底层会产生动态代理对象,使用ribbon客户端完成调用。
4.前端访问微服务需要通过网关,网关使用Nginx和Zuul来实现,Nginx是最前边的负载均衡,通过Nginx之后便到达了Zuul,项目中Zuul的功能是过虑用户请求,
判断用户身份,对于一些对外公开的微服务则需要经过Zuul,直 接通过Nginx负载均衡访问。

2.7 Spring Data JPA 和 MyBatis

项目中使用Spring Data JPA和MyBatis都是用来访问MySQL,但是它们的分工不同: Spring Data JPA是Spring 提供的一套JPA接口,使用Spring Data JPA主要完成一些简单的增、删、改、查功能。
对于复杂的查询功能会使用MyBatis编写SQL语言来实现,因为使用Spring Data JPA来做一些复杂的查询是没有 MyBatis方便的,Spring Data JPA是面向的对象,而MyBatis直接面向SQL语句

2.8视图层

1、视图层在前端和服务端都存在。
2、前端视图采用vue.js+elementUI
3、服务端都是暴露的rest接口,统一用json展示数据。

2.9 接口的定义,采用的数据格式

1、接口定义
使用SpringMVC编写Controller方法,对外暴露Http接口,在Controller方法上使用RequestMapping、 PostMapping、GetMapping等注解定义Http接口。
2、数据格式
请求: get 请求时,前端请求key/value串,SpringMVC采用基本数据类型(String、Integer等)或自定义类型接收。 Post请求时,前端请Form表单数据(application/x-www-form-urlencoded)和Json数据(ContentType=application/json)、多部件类型数据(multipart/form-data),对于Json数据SpringMVC使用 @RequestBody注解解析请求的json数据。
响应: 统一响应json格式。
3、实现
json格式数据SpringMVC采用FastJson解析为对象。非json格式数据SpringMVC提供参数绑定的方法,将key/value或Form-Data数据转换为对象或基本数据类型的变量。

三.前端采用什么技术栈?

前端工程大多为单页面应用(SPA),采用vue.js框架开发,搜索功能前端采用nuxt.js服务端渲染(SSR)框架开发。
技术栈包括:
1、node.js
2、vue.js
3、npm/cnpm
4、webpack
5、axios
6、nuxt.js
7、element-ui

四.CMS管理系统

CMS (Content Management System)即内容管理系统,本项目对CMS系统的定位是对各各网站(子站点)页面的管理,本项目的CMS系统不去管理每个子网站的全部资源,比如:图片、CSS、html页面等,主要管理由于运营需要而经常变动的页面,从而满足根据运营需要快速开发、上线的需求。
功能包括:
1、站点管理,站点就是本项目各各子网站,站点信息包括:站点名称、站点域名、端口、服务器物理路径等。
2、模板管理,由于要对页面进行静态化,使用freemarker引擎技术,所以需要定义模板。
3、页面管理,包括:页面添加、页面修改、页面删除等操作。
4、页面预览,对页面静态化,在浏览器预览页面静态化内容。
5、页面发布,将页面静态化后发布到所属站点服务器。

GirdFS是什么?工作原理是什么?

GridFS 是 MongoDB 提供的用于持久化存储文件的模块,它可以作为分布式文件系统使用,CMS 子系统将页面文件、模板文件存储到 GridFS 中,由于本项目使用 MongoDB,选用 GridFS 可以快速集成开发。

它的工作原理是:
在 GridFS 存储文件是将文件分块存储,文件会按照 256KB 的大小分割成多个块进行存储,GridFS 使用两个集合(collection)存储文件,一个集合是 chunks, 用于存储文件的二进制数据;一个集合是 files,用于存储文件的元数据信息(文件名称、块大小、上传时间等信息)。
从 GridFS 中读取文件要对文件的各个块进行组装合并。
使用方法是:
使用 Spring data mongodb 包下提供的 GridFsTemplate 访问 GirdFS

gridFsTemplate.findone() 查询文件
gridFsTemplate.delete() 删除文件
gridFsTemplate.store()存储文件

持续更新。。。

YouVideo在线视频平台相关推荐

  1. 前后端分离djangorestframework—— 在线视频平台接入第三方加密防盗录视频

    加密视频 在以后的开发项目中,很可能有做在线视频的,而在线视频就有个问题,因为在线播放,就很有可能视频数据被抓包,如果这个在线视频平台有付费视频的话,这样就会有人做点倒卖视频的生意了,针对这个问题,目 ...

  2. 海外弱网下的在线视频平台优化实践​

    正文字数:10745  阅读时长:16分钟 在弱网下,视频启动时间和播放卡顿都会增加.为提升弱网用户体验,需要识别出主要问题再针对性调优.本演讲将结合四达时代在非洲建设"StarTimesO ...

  3. Brightcove完成对Ooyala旗下在线视频平台业务的收购

    波士顿--(美国商业资讯)--领先的视频云服务提供商Brightcove Inc. (NASDAQ: BCOV)今天宣布,公司已完成对云视频技术提供商Ooyala旗下在线视频平台业务的收购. 此次战略 ...

  4. 投中观点:在线视频平台创造视频行业B2B盈利新模式

    8月6日,优酷(YOKU.NYSE)公布新一期财报,公司二季度收入6100万美元,环比增长41%,同比增长96%;净亏损990万美元,环比减少60%,同比增长125%.内容采购成本下降,给国内在线视频 ...

  5. 爱优腾芒“跑马圈地”,AI广告营销能拯救“盈利难”的视频平台吗?

    文/螳螂财经 作者/图霖 编辑/陈小江 根据QuestMobile 2020年7月的数据,爱奇艺和腾讯视频的月活跃用户数均已超5亿,紧跟其后的优酷视频和芒果TV的月活跃用户数也已超2亿. 巨大的用户体 ...

  6. 会员付费超前点播模式争议背后,我们该怎么看待在线视频的未来?

    很多人都没有想到,一部备受用户热捧的IP大作,竟然会引发中国视频行业关于未来的争议.近日,由多位实力派演员参与的<庆余年>电视剧火热播出后,在腾讯视频和爱奇艺针对已购买会员用户推出额外收费 ...

  7. 「得印度者,得天下」聊聊你不知道的印度在线视频江湖

    印度,一个神奇古老的国度-- 千百年来,恒河水鉴证了古印度王朝的兴衰更迭,壮丽的历史文化,和印度文明缘起缘灭的生死轮回. 时光飞转,来到公元2018年.恒河水波澜不惊一切如昨,但一场发生在虚拟空间的互 ...

  8. 如何搭建低延时、交互式的在线教育平台?(内附视频回放)

    本文由腾讯互动课堂技术负责人缪少豪在LiveVideoStack线上分享中的内容整理而成,详细介绍了腾讯云在线教育互动课堂方案的设计与技术挑战,重点解析了互动白板的实现技术难点与突破. 文 / 缪少豪 ...

  9. 在线渗透测试网址信息收集网站-密码工具-漏洞查找平台-安全视频平台

    在线渗透测试网址信息收集网站 http://tool.chinaz.com/nslookup/ - 在线NSLOOKUP http://whois.chinaz.com/- 站长工具:whois ht ...

最新文章

  1. 面试官:Redis 新版本开始引入多线程,你怎么看?
  2. 将AI落地到福州、贵阳的「幕后推手」,到底在想些什么?
  3. arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏
  4. request设置请求头_收藏 Scrapy框架各组件详细设置
  5. [Python人工智能] 六.TensorFlow实现分类学习及MNIST手写体识别案例
  6. MySQL内连接方法_Mysql常用的几种join连接方式
  7. post请求改成body_如何使用BODY快速发送POST请求
  8. 信息学奥赛一本通(2018:【例4.3】输出奇偶数之和)
  9. centos安装python3.4 pip3
  10. python中head_Python(Head First)学习笔记:二
  11. python元组可以修改吗_python元组元素可以修改吗
  12. 基于JAVA教师教学质量评估系统计算机毕业设计源码+数据库+lw文档+系统+部署
  13. Axi协议和verilog实现1-AXI总线和关键问题描述
  14. 扩展odoo res.partner的问题
  15. 个人电脑详细的安全设置方法
  16. LED阵列PCB灯板绘制
  17. NAS群晖Docker安装odoo16社区版和企业版教程
  18. 如何构建全球实时音视频云及其海外网络传输优化
  19. VsCode插件之vscode-icons
  20. ffmpeg 下载后缀为.m3u8的视频文件

热门文章

  1. JavaWeb-云日志
  2. Attribute特性定义及应用
  3. duilib设置透明窗口_使用duilib开发半透明异形窗体程序(补充)
  4. new Date()时间格式转时间戳在苹果机iOS上无效
  5. idea使用中项目出现library root
  6. 微信小程序父组件向子组件传递数据
  7. TP6 + Layui实现无限极分类
  8. [推荐]全球第一互动成人英语学习软件《ELLIS 英语培训系统》ISO下载
  9. 鸿蒙OS内核分析|解读鸿蒙源码
  10. 微信小程序之文字淡入