/TinyTiktok

基于Hertz+Kitex框架开发的极简版抖音服务端,具备基本的流媒体和社交互动功能。

Primary LanguageGoApache License 2.0Apache-2.0

TinyTiktok 简易版抖音

项目介绍

本项目基于青训营提供的抖音项目方案说明实现接口开发,最终实现极简抖音App的服务端。若想得到本项目更详细的信息,可以阅读该项目的答辩文档点击此处获奖情况

架构

调用关系

3

技术架构

1

服务关系

2

展示

点击此处查看本项目的演示视频

该项目的链路追踪结构如下:

4

项目目录介绍

.
├── cmd #存放提供各个服务的服务器代码
│   ├── api #Api服务器
│   │   ├── biz
│   │   │   ├── handler
│   │   │   │   ├── ApiServer #对应客户端接口的处理逻辑
│   │   │   │   └── pack      #对应客户端接口的响应逻辑
│   │   │   ├── middleware    #存放中间件(目前仅包含jwt组件的相关代码)
│   │   │   ├── model         #Hertz自动生成
│   │   │   │   └── ApiServer
│   │   │   ├── router        #路由
│   │   │   │   └── ApiServer #可在此处加入路由地址所需的中间件
│   │   │   └── rpc           #Api服务器初始化其他服务的RPC客户端
│   │   ├── initialize        #Api服务器的初始化
│   │   ├── main.go           #Api服务器启动设置
│   │   ├── ....              #Hertz自动生成
│   │   └── tmp               #持久化日志
│   │       ├── hlog
│   │       │   └── logs
│   │       └── klog
│   │           └── logs
│   ├── comment  #Comment服务器
│   │   ├── config             #Comment服务器所需的全局变量
│   │   ├── initialize         #Comment服务器的初始化
│   │   │   └── db
│   │   ├── main.go            #CommentRPC服务器的启动设置
│   │   ├── handler.go         #Comment服务器对应RPC接口的处理逻辑
│   │   ├── output             #Comment服务器的启动文件
│   │   │   ├── bin
│   │   │   └── log
│   │   ├── rpc                #Comment服务器初始化其他服务的RPC客户端
│   │   ├── script             #脚本
│   │   ├── service            #Comment服务器所提供服务的业务逻辑
│   │   │   ├── dal            #Comment服务器对数据库的操作
│   │   │   └── pack           #Comment服务器对RPC响应的逻辑封装
│   │   └── tmp                #持久化日志
│   │       └── klog
│   │           └── logs
│   ├── favorite
│   │   ......                #目录结构同上
│   │── video
│   │   ......                #目录结构同上
│   ├── relation
│   │   ├── config            #relation服务器所需的全局变量
│   │   ├── initialize        #relation服务器的初始化
│   │   │   ├── db
│   │   │   ├── mq            #rabbitMQ初始化及其提供的处理逻辑
│   │   │   │   └── amqpclt
│   │   │   └── redis         #redis初始化及其提供的处理逻辑
│   │   ......                #目录结构同上
│   ├── user
│   │   ......                #目录结构同上
├── data                      #对象存储服务的存储目录
├── idl                       #所有RPC服务的idl接口以及ApiServer的Http接口---接口说明书
├── image                     #Readme的图片所在
├── kitex_gen                 #ktex自动生成,提供go语言的idl接口
└── pkg
    ├── configs               #存放该项目运行环境的设置
    │   ├── nginx
    │   ├── otel
    │   ├── redis
    │   └── sql
    ├── errno                  #存放全局设置好的错误码
    ├── middleware             #存放全局都可用的中间件(目前仅含打印日志)
    ├── minio            
    └── shared                 #存放全局都可用的常量

快速开始

  1. 下载ffmpeg完成视频截取图片功能:linux下命令sudo apt-get install ffmpeg
  2. 在项目的根目录执行命令docker-compose up -d,生成运行环境
  3. 在项目的根目录执行命令go mod tidy整理go所需要的依赖
  4. 修改./pkg/shared/const.go的文件,将里面的第一个参数host_ip设置为自己内网ip,将第二个参数"minio_ip"设置为公网ip(若本地测试,则这个都设置为内网ip)。
  5. 启动ApiServer
cd ./cmd/user
go run .

PS:如果你部署机器的内存和cpu并不给力,推荐提前在性能较好的机器上执行go build .来提前编译,随后只在部署机器上执行chmod +x ./api./api即可运行。 6. 启动各个服务模块的RPC服务器

  • 启动User服务器

    cd ./cmd/user
    sh build.sh
    sh output/bootstrap.sh
  • 启动Video服务器

    cd ./cmd/video
    sh build.sh
    sh output/bootstrap.sh
  • 启动Comment服务器

    cd ./cmd/comment
    sh build.sh
    sh output/bootstrap.sh
  • 启动Favorite服务器

    cd ./cmd/favorite
    sh build.sh
    sh output/bootstrap.sh
  • 启动Relation服务器

    cd ./cmd/relation
    sh build.sh
    sh output/bootstrap.sh

PS:如果你部署机器的内存和cpu并不给力,推荐提前在性能较好的机器上执行sh build.sh来提前编译,随后只在部署机器上执行chmod +x ./xxxx./xxx即可运行。

TODO

  • 随后将整理开发过程的文档至README
  • 将完成信息模块

鸣谢

感谢队员:

感谢项目主办方 字节跳动后端青训营