tiktok

module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2022 License: Apache-2.0

README

tiktok

基于 kitex RPC微服务 + Gin HTTP服务完成的第三届字节跳动青训营-极简抖音后端项目

一、项目特点

  1. 采用RPC框架(Kitex)脚手架生成代码进行开发,基于 RPC 微服务 + Gin 提供 HTTP 服务

  2. 基于《接口文档在线分享- Apifox》提供的接口进行开发,使用《极简抖音App使用说明 - 青训营版 》提供的APK进行Demo测试, 功能完整实现 ,前端接口匹配良好。

  3. 代码结构采用 (HTTP API 层 + RPC Service 层+Dal 层) 项目 结构清晰 ,代码 符合规范

  4. 使用 JWT 进行用户token的校验

  5. 使用 ETCD 进行服务发现和服务注册;

  6. 使用 Minio 实现视频文件和图片的对象存储

  7. 使用 Gorm 对 MySQL 进行 ORM 操作;

  8. 使用 OpenTelemetry 实现链路跟踪;

  9. 数据库表建立了索引和外键约束,对于具有关联性的操作一旦出错立刻回滚,保证数据一致性和安全性

二、项目地址

三、项目说明

1. 项目模块介绍

服务名称 模块介绍 技术框架 传输协议 注册中心 链路跟踪 数据存储 日志 配置存取
api API服务将HTTP请求发送给RPC微服务端 Gorm Kitex Gin http etcd opentelemetry 下一步计划采用Redis zapklog viper
user 用户管理微服务 Gorm Kitex Gin JWT proto3 MySQL gorm
relation 用户关注微服务
feed 视频流微服务
favorite 用户点赞微服务
comment 用户评论微服务
publish 视频发布微服务 MySQL gorm minio对象存储
dal 数据层实现 MySQL gorm - MySQL gorm

2. 服务调用关系

image.png

3. 数据库 ER 图

image.png

4. 代码介绍

4.1 代码目录结构介绍
目录 子目录 说明 备注
cmd api api 服务的 业务代码 包含 GinRPC_client
comment command 服务的业务代码
favorite favorite 服务的业务代码
feed feed 服务的业务代码
publish publish 服务的业务代码
relation relation 服务的业务代码
user user 服务的业务代码
config 微服务及 pkg 的 配置文件
dal db 包含 Gorm 初始化Gorm 结构体及 数据库操作逻辑
pack Gorm 结构体 封装为 protobuf 结构体业务逻辑 Protobuf 结构体由 Kitex自动生成
idl proto 接口定义文件
kitex_gen Kitex 自动生成的代码
pkg dlog 基于 klog 和 zap 封装的 Logger 及其接口
errno 错误码 错误码设计逻辑:a76yyyy/ErrnoCod
jwt 基于 golang-jwt的代码封装
middleware Kitex的中间件
minio Minio 对象存储初始化及代码封装
ttviper Viper 配置存取初始化及代码封装
4.2 代码运行
  1. 提前修改 config目录的相关配置

  2. 运行基础依赖

    # 自行安装 docker 及 docker-compose
    docker-compose up -d 
    
  3. 运行 user 服务

    cd cmd/user
    sh build.sh
    sh output/bootstrap.sh 
    
  4. 运行 comment 服务

    cd cmd/comment
    sh build.sh
    sh output/bootstrap.sh 
    
  5. 运行 favorite 服务

    cd cmd/favorite
    sh build.sh
    sh output/bootstrap.sh 
    
  6. 运行 feed 服务

    cd cmd/feed
    sh build.sh
    sh output/bootstrap.sh 
    
  7. 运行 publish 服务

    cd cmd/publish
    sh build.sh
    sh output/bootstrap.sh 
    
  8. 运行 relation 服务

    cd cmd/relation
    sh build.sh
    sh output/bootstrap.sh 
    
  9. 运行 api 服务

    cd cmd/api
    chmod +x ./run.sh
    sh ./run.sh 
    

四、下一步计划

  1. 编写 DockerFile 实现分布式容器部署

  2. 检查 自封装的 dlog 包中 callerSkip存在的问题

  3. 采用 Redis 作为 NoSQL 缓存,优化 JWT 鉴权,结合消息队列和 Redis 实现对定时更新 Token、各种操作数据 的缓存和持久性存储

  4. 使用 Jaeger 实现链路跟踪可视化

  5. 添加 RPC微服务 Handler 部分的单元测试内容

Directories

Path Synopsis
cmd
api
使用 Gin 提供 API 服务将 HTTP 请求发送给 RPC 微服务端
使用 Gin 提供 API 服务将 HTTP 请求发送给 RPC 微服务端
api/handlers
定义 Gin HTTP API 的 handler
定义 Gin HTTP API 的 handler
dal
db
kitex_gen
comment/commentsrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
favorite/favoritesrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
feed/feedsrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
publish/publishsrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
relation/relationsrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
user/usersrv
Code generated by Kitex v0.3.2.
Code generated by Kitex v0.3.2.
pkg
dlog
基于 klog 和 zap 封装的 Logger 及其接口
基于 klog 和 zap 封装的 Logger 及其接口
errno
错误码
错误码
jwt

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL