极简版抖音 — 降本增效队

一、项目介绍

基于 “Hertz/Gin HTTP框架 + Kitex 微服务框架” 完成的第五届字节跳动青训营—极简版抖音项目

总分 功能实现-60 安全可靠-20 代码质量-10 服务性能-10
86.7 54.5 17.2 6.2 8.8

二、项目实现

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

本项目包含三大类接口:基础接口、互动接口、社交接口。采用微服务架构以及 Docker 部署的方式。总共需要 16G 存储空间,1 台服务器,项目中所需要的数据库以及中间件均由 Docker 下载并挂载运行。

以下是开发文档。

ApiFox开发文档

2.2 架构设计

2.2.1 架构方案

由于抖音的各接口之间耦合度不高,故采用微服务的架构,分为 HTTP、RPC 和 DAL 三层:

当客户端发来 HTTP 请求时,HTTP 层会调用 RPC层 的 RPC Client,然后 RPC Client 去 ETCD 中心寻找已经注册的对应的微服务,交给 RPC Server 处理。RPC Server 会去调用 DAL 层的数据库,数据库处理完毕后把结果返回给 RPC Server,RPC Server 将其返回给 RPC Client,最后 RPC Client 返回给 Hertz 并由 Hertz 返回 HTTP 响应结果。

2.2.2 架构图

抖声_后端架构图.png

2.3 项目代码介绍

2.3.1 技术栈

2.3.2 目录结构介绍

目录 子目录 说明 备注
cmd api api 服务代码 包含http server 和 RPC client
comment comment 微服务代码
favorite favorite 微服务代码
message message 微服务代码
relation relation 微服务代码
user user 微服务代码
video video 微服务代码
config 微服务以及第三方包的配置文件
dal db 操作 MySQL 代码 包含 Gorm 初始化、Gorm 结构体以及 MySQL 的操作逻辑
redis 操作 Redis 的代码 包含 go-redis 初始化、Redis 结构体、Redis 操作逻辑以及 Redis 与MySQL 数据同步的逻辑
dockerfiles api API 服务的 DockerFIle 文件
rpc RPC 服务的 DockerFile 文件
internal response 封装返回的结构体
tool 封装项目中常用的工具函数 包含 RSA、MD5、SHA256 等加密算法以及操作 ffmpeg 对上传视频截图
kitex 包含 proto 文件以及由 Kitex 生成的 go 代码 Kitex 生成的 Go 代码在 Kitex_gen 子目录下
pic 保存一些图片
pkg errno 错误码的实现
etcd 服务注册与发现
gocron 定时任务
jwt token生成与校验
middelware 常用的中间件
minio 对象存储
rabbitmq 消息队列
viper 配置读取
zap 日志打印与日志切割
scripts 存放启动脚本 包含使用 Docker 启动的 MySQL、Redis、etcd、nginx、rabbitmq、minio 等,以及 MySQL主从复制的配置

三、测试结果

3.1 功能测试

功能项 功能需求 测试点 模块 结果
基础功能项 视频 Feed 流 支持所有用户刷抖音,视频按投稿时间倒序推出 获取视频列表 正确运行
视频投稿 支持登录用户自己拍视频投稿 发布视频 正确运行
个人主页 支持查看用户基本信息和投稿列表,注册用户流程简化 注册 正确运行
登录 正确运行
个人信息 正确运行
方向功能项 喜欢列表 登录用户可以对视频点赞,在个人主页喜欢Tab 下能够查看点赞视频列表 获取喜欢列表 正确运行
点赞 正确运行
取消赞 正确运行
用户评论 支持未登录用户查看视频下的评论列表,登录用户能够发表评论 获取评论列表 正确运行
新增评论 正确运行
删除评论 正确运行
关系列表 登录用户可以关注其他用户,能够在个人主页查看本人的关注数和粉丝数,查看关注列表和粉丝列表 关注 正确运行
取关 正确运行
获取关系列表(关注、粉丝、朋友) 正确运行

3.2 性能测试

3.2.1 视频流测试

测试-feed-1.png

测试-feed-2.png

3.2.2 点赞测试

测试-favorite-1.png

测试-favorite-2.png

测试-favorite-3.png

3.2.3 关注测试

测试-relation-1.png

四、项目总结与反思

4.1 目前仍存在的问题

4.2 已识别出的优化项

点赞关注同步机制.png “消息队列 + 缓存 + 定时同步” 图示

4.3 架构演进的可能性

4.4 项目过程中的反思与总结

Note

第五届字节跳动青训营抖音项目

数据库表名 Golang 类名 备注
comment Comment 评论
messages Message 聊天消息
relation FollowRelation (/relation.go) 社交(粉丝、关注、朋友)
user User 用户
video Video (/feed.go) 视频
user_favorite_videos FavoriteVideoRelation (/favorite.go) 视频点赞记录
user_favorite_comments FavoriteCommentRelation (/favorite.go) 评论点赞记录

注:

启动/停止运行