# graduation design **Repository Path**: itpan/graduation-design ## Basic Information - **Project Name**: graduation design - **Description**: 毕业设计《仿b站在线视频网站》 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-09-14 - **Last Updated**: 2024-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # graduation design # 项目链接 前端项目链接:[graduation_front: 毕业设计前端 (gitee.com)](https://gitee.com/hejunyu123/graduation_front) 项目访问地址:http://jsuhjy2020401310.asia (项目不一定能正常访问,因为服务器为一台2核+8G的云服务器,在部署该项目时,即使以及限制了各个中间件的内存占用,内存负载还是高达91%) # 项目介绍 毕业设计《仿b站在线视频网站》后端项目。本项目一个在线视频网站,提供了一个用户共享视频资源的平台。用户可在平台上观看其他用户分享上传的视频,同时用户自己也可以作为视频创作者上传自己的个人视频。 # # 项目技术栈 SpringCloud、SpringSecurity、SpringBoot等Spring框架、ElasticSearch、Redis、Logstash、kibana、xxlJob、Seata、Nacos、Gateway、Minio、RabbitMQ、ffmpeg、MyBatis、Ribbon、Nginx、OpenFeign # 项目模块介绍 从后端角度出发,本项目分为**认证授权模块**、**视频模块**、**搜索模块**、**网关模块**、**日志模块**、**消息处理模块**、**验证模块**、**基础模块**、**父模块** ## 认证授权模块 使用SpringSecurity+Oauth2对用户进行身份认证和授权。 数据库基于RBAC模型设计了5张表,分别为用户表、角色表、权限表、用户角色关联表、角色权限关联表。 当前端发送登录请求时,后端先判断用户是否存在,如果存在则查询用户角色,进而查询用户拥有的权限,同时将用户信息和权限 封装进Access_Token中,随后向前端返回Access_Token和Refresh_Token。其中Refresh_Token用于重新获取Access_Token,避免因 Access_Token失效导致用户短时间内多次登录。 后台每个方法都有细粒度的权限管控,只有Token中存在对应权限才能访问。 ## 视频模块 主要负责视频资源的管理。 当用户上传视频时,将视频和封面上传到分布式文件系统Minio中,同时将用户信息存在到预发布表中。 当视频经过转码和审核后,视频将存储到发布表、ElasticSearch、Redis中,此时其他用户即可观看此视频。 ## 搜索模块 使用ElasticSearch完成搜索功能。 当用户进行搜索时,可以对视频时长、视频分类进行过滤,也可以通过视频播放量、视频发布时间进行排序。 ElasticSearch会对用户搜索内容进行分词,然后对分类、视频标签、视频标题进行相关度查询,查询出相关内容。 ## 网关模块 网关维护者一个白名单,当前端请求在白名单中,则直接转发到对应的服务。否则,则对请求头中携带的Token进行验证, 如果Token不存在或失效,则拦截该请求。 ## 日志模块 日志模块通过Elk+Logstash+Kibana搭建。 当服务接收到请求、响应请求、出现异常时,日志会输出到Logstash中,Logstash会对数据进行过滤,然后将日志输出 到ElasticSearch中,Kibana读取ElasticSearch中的数据,进行可视化展示。 日志系统可以帮助运维人员及时定位到错误信息,同时也可以通过日志Id,查看到一次请求的请求信息和响应信息。 ## 消息处理模块 主要负责处理各种消息,例如存储在RabbitMQ中的消息。 同时,在凌晨0点-6点通过xxlJob任务调度中心的分片广播对调用ffmpeg对视频进行转码。 因为视频转码是一个耗时长且耗费CPU的工作,当服务器正常运行时,大量视频转码会导致服务器CPU负载过高, 而凌晨服务器压力小,通过多线程以及xxljob的分片广播,能及时的处理视频转码任务。 ## 验证模块 主要负责验证码分发、验证码验证。 当用户打开登录页面时,生成图片验证码和checkKey。 当用户登录时,获取Redis中存储的验证码和checkKey,同用户输入的信息进行验证。 ## 基础模块 主要负责提供各个基础的工具类以及一些公用的实体类。 ## 父模块 负责管理各个模块之间的关系,以及控制各个依赖的版本。