/bilibili

基于Spring Boot 2.x 的仿b站后端项目

Primary LanguageJavaMIT LicenseMIT

bilibili(仿)

基于 Spring Boot 的仿bilibili后端项目

项目简介

注意⚠️:本项目是一个纯后端项目,没有前端页面

  • 之前发生的b站源码泄漏事件,我表示很遗憾,与此同时很多仿b站架构的项目如雨后春笋,甚至还掀起了一股学习go语言的热潮,也称得上是这次事件的少有的积极影响了

作为**国内最成功的视频网站之一,b站的网站架构,功能模块的划分,以及各种“特色功能”(弹幕系统等)非常值得学习

我作为一名个人开发者,我用自己的技术试图复现b站的后端系统,这里我也暂时将项目叫做“bilibili”

’bilibili‘是一个开源的后端项目,任何企业和个人可以免费学习使用

  • 本项目实现了哔哩哔哩大部分核心功能:用户(权限)视频弹幕,**视频流(个性化推荐)**等

  • 用户模块运用三种算法(RSA,MD5,AES)实现 JWT-Token 登录

  • 将登录模式进一步改造成双令牌登录(RefreshToken),实现自动刷新Token,大大提升了用户体验

  • 使用自定义注解以及数据库表设计(用户表,权限表,角色表,关联表),设计了一套可拓展的权限体系,实现页面,接口,数据等层面的精细化权限控制

  • 使用Redis缓存动态相关信息,提升了动态列表以及视频流的响应速度与实时性,降低数据库压力

  • 使用FastDFS搭建分布式文件系统,将视频分片后上传下载,降低了因网络波动导致出错的概率

  • 使用RocketMQ实现动态消息异步推送视频文件信息异步存储,提升了动态发送,视频上传的速度

  • 使用ElasticSearch实现全文检索并且高亮搜索字段,让用户拥有良好的搜索体验

  • 使用Mahout推荐算法量化用户行为,根据用户喜好进行个性化推荐

  • 使用WebSocket实现长连接,发送实时弹幕,进行在线观看人数统计

  • 采用前后端分离的开发模式,项目目前只有后端

  • 为了便于开发,这里从文件系统上分为了dao,service,api三个模块,并没有完全按照功能划分

  • 因为是个人开发,考虑到不会有很大流量,这里暂时没有使用分布式微服务

  • 会持续改进,后续可能考虑上线

项目架构图

业务架构图

b站项目业务架构

技术架构图

b站技术架构

项目用到的技术

  • Java 1.8
  • Spring Boot 2.x
  • MyBatis (Plus)
  • MySQL
  • Redis
  • ElasticSearch
  • RocketMQ
  • FastDFS
  • JWT
  • Mahout
  • FastJson

项目模块说明

  • bilibili-api:项目核心模块,提供项目对外API接口以及权限校验
  • bilibili-service:提供各种配置类以及工具类,拦截器等,提供服务接口(Interface)及其实现类
  • bilibili-dao:提供实体类对象,Repository,mapper,自定义异常,常量,自定义注解

如何使用本项目

在使用本项目前,请在MySQL中新建‘bilibili’数据库,然后执行sql文件夹下的sql文件,生成对应的表

  • 方法一:

下载源码,导入Idea,配置运行bilibili-api模块下的BilibiliApp即可

注意:因为隐藏了配置文件,所以需要修改各个模块下的application.yml配置文件才可以正常启动

  • 方法二:

使用java -jar 命令运行bilibili-api模块下的 bilibili-api-1.0-SNAPSHOT.jar 即可