Go实现极简版抖音开发文档(2月24日) | 青训营笔记

644 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

一、项目介绍

二、项目分工

团队成员主要贡献
贾桐负责项目开发技术选型、安排开发工作、协调组员配合负责开发接口:用户信息、评论操作、评论列表、好友列表、发送消息、聊天记录负责主要测试部分、并设计部分数据库
吴天赐负责开发接口:用户注册、用户登录、视频feed流、视频投稿、发布列表、个人主页查看、和喜欢功能、喜欢列表、关注操作、关注列表、粉丝列表.负责视频抽帧,redis实现等、并设计部分数据库
刘自臻提供开发意见、开发部分代码、并设计部分数据库

三、项目实现

3.1 技术选型与相关开发文档

相关环境

  • golang>= 1.18
  • mysql>=8.0:数据库
  • redis>=7.0.0:缓存
  • gin v1.8.2 处理Http请求
  • gorm v1.24.3 操作数据库
  • ffmpeg:获取视频封面

技术选型

  1. 采用Gin的Web框架
  2. 采用MySQL数据库作为底层数据的存储
  3. 使用GORM进行数据库操作
  4. 使用ffmpeg生成视频封面
  5. 引入Redis作为中间件,用来实现对象缓存,提升响应速度,减少IO操作,减少服务器压力
  6. 使用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 演示视频 (必填)

六、项目总结与反思

  1. 目前仍存在的问题

    1. 消息接口会不断请求,没有做限流
    2. 视频加载较慢
  2. 已识别出的优化项

    1. 后续视频可以采用minio分布式存储来加载
  3. 架构演进的可能性

    1. 后续是像微服务架构演进,把每个服务简化治理,同时将主要的业务服务,例如视频加载等服务再度优化,再使用一点智能的大数据分析技术,智能推送高质量视频,同时再做一个视频压缩技术,进一步优化视频加载!
  4. 项目过程中的反思与总结

    1.   本次项目本是6人,但由于各种原因,最后开发只剩两人了,我与另一位同学短期合力开发,过程还是比较吃力的,摸索的过程也十分的迷茫,希望我与队友能多掌握点好的编程能力,在今后的开发中开发的更加的高效!同时真诚感谢字节跳动的各种活动和学习资料!

七、其他补充资料(选填)

运行前需知

  • controller 包下的public.go中的baseUrl改成 运行的服务器的地址,视频和图片存储路径为/file/

  • 本地打包 windows 环境

    • set GOARCH=arm64
    • set GOOS=linux
    • go build
  • 打包上传服务器

    • chmod 777 打包后的名字

    • nohup ./打包后的名字 &

    • 数据库默认 用户名root 密码******

项目代码托管