这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
一、项目介绍
- 介绍:通过Go语言编程,来实现极简版抖音的各项功能,帮助我们能够快速上手学习Go语言的web开发,巩固基础。
- 项目服务地址-:http://124.222.90.47:8080/
- Gitee 地址:gitee.com/wu-rheght/g…
二、项目分工
| 团队成员 | 主要贡献 |
|---|---|
| 贾桐 | 负责项目开发技术选型、安排开发工作、协调组员配合负责开发接口:用户信息、评论操作、评论列表、好友列表、发送消息、聊天记录负责主要测试部分、并设计部分数据库 |
| 吴天赐 | 负责开发接口:用户注册、用户登录、视频feed流、视频投稿、发布列表、个人主页查看、和喜欢功能、喜欢列表、关注操作、关注列表、粉丝列表.负责视频抽帧,redis实现等、并设计部分数据库 |
| 刘自臻 | 提供开发意见、开发部分代码、并设计部分数据库 |
三、项目实现
3.1 技术选型与相关开发文档
相关环境
- golang>= 1.18
- mysql>=8.0:数据库
- redis>=7.0.0:缓存
- gin v1.8.2 处理Http请求
- gorm v1.24.3 操作数据库
- ffmpeg:获取视频封面
技术选型
- 采用Gin的Web框架
- 采用MySQL数据库作为底层数据的存储
- 使用GORM进行数据库操作
- 使用ffmpeg生成视频封面
- 引入Redis作为中间件,用来实现对象缓存,提升响应速度,减少IO操作,减少服务器压力
- 使用jwt生成token,实现权限认证,并且设置过期时间,使用MD5加密,进一步加强数用户数据安全
开发方向
我们队伍是开发完了全部的接口,互动方向和社交方向都有开发。
实现功能
| 功能 | 说明 |
|---|---|
| 基础功能 | 视频feed流、视频投稿,个人信息、用户登录、用户注册 |
| 互动方向 | 视频点赞/取消点赞,点赞列表;用户评论/删除评论,视频评论列表 |
| 社交方向 | 用户关注/取关;用户关注列表、粉丝列表;用户展示好友列表、聊天发送消息 |
使用技术
- 框架技术:
-
- Gin
- Gorm
- 中间件:
-
- Redis
- 数据库:
-
- Mysql
- 密码安全
-
-
Jwt
-
MD5
-
3.2 架构设计
数据库设计
3.3 项目代码介绍
目录结构
.
├── common
│ └── Init.go
├── controller
│ ├── comment.go
│ ├── common.go
│ ├── favorite.go
│ ├── feed.go
│ ├── message.go
│ ├── publish.go
│ ├── relation.go
│ └── user.go
├── models
│ ├── comment.go
│ ├── favorite.go
│ ├── message.go
│ ├── relation.go
│ ├── user.go
│ └── video.go
├── response
│ └── response.go
├── service
│ ├── commentService.go
│ ├── message.go
│ └── ping.go
├── test
│ ├── jwt.go
│ └── redis_test.go
├── go.mod
├── main.go
└── router.go
common:中间件、数据库初始化
controller:视图层,处理前端消息
models:数据层,直接对数据库进行操作
response:对返回消息进行封装
service:逻辑层,执行业务操作,从数据层获取数据,封装后返回试图层
main.go:服务入口
router.go:路由入口
四、测试结果
功能测试:
五、Demo 演示视频 (必填)
六、项目总结与反思
-
目前仍存在的问题
- 消息接口会不断请求,没有做限流
- 视频加载较慢
-
已识别出的优化项
- 后续视频可以采用minio分布式存储来加载
-
架构演进的可能性
- 后续是像微服务架构演进,把每个服务简化治理,同时将主要的业务服务,例如视频加载等服务再度优化,再使用一点智能的大数据分析技术,智能推送高质量视频,同时再做一个视频压缩技术,进一步优化视频加载!
-
项目过程中的反思与总结
- 本次项目本是6人,但由于各种原因,最后开发只剩两人了,我与另一位同学短期合力开发,过程还是比较吃力的,摸索的过程也十分的迷茫,希望我与队友能多掌握点好的编程能力,在今后的开发中开发的更加的高效!同时真诚感谢字节跳动的各种活动和学习资料!
七、其他补充资料(选填)
运行前需知
-
controller包下的public.go中的baseUrl改成 运行的服务器的地址,视频和图片存储路径为/file/ -
本地打包 windows 环境
set GOARCH=arm64set GOOS=linuxgo build
-
打包上传服务器
-
chmod 777 打包后的名字
-
nohup ./打包后的名字 &
-
数据库默认 用户名root 密码******
-