基于 kitex RPC微服务 + Gin HTTP服务完成的第三届字节跳动青训营-极简抖音后端项目
-
采用RPC框架(Kitex)脚手架生成代码进行开发,基于 RPC 微服务 + Gin 提供 HTTP 服务
-
基于《接口文档在线分享- Apifox》提供的接口进行开发,使用《极简抖音App使用说明 - 青训营版 》提供的APK进行Demo测试, 功能完整实现 ,前端接口匹配良好。
-
代码结构采用 (HTTP API 层 + RPC Service 层+Dal 层) 项目 结构清晰 ,代码 符合规范
-
使用 JWT 进行用户token的校验
-
使用 ETCD 进行服务发现和服务注册;
-
使用 Minio 实现视频文件和图片的对象存储
-
使用 Gorm 对 MySQL 进行 ORM 操作;
-
使用 OpenTelemetry 实现链路跟踪;
-
数据库表建立了索引和外键约束,对于具有关联性的操作一旦出错立刻回滚,保证数据一致性和安全性
服务名称 | 模块介绍 | 技术框架 | 传输协议 | 注册中心 | 链路跟踪 | 数据存储 | 日志 | 配置存取 |
---|---|---|---|---|---|---|---|---|
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 |
目录 | 子目录 | 说明 | 备注 |
---|---|---|---|
cmd | api | api 服务的 业务代码 | 包含 Gin和 RPC_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 配置存取初始化及代码封装 |
-
提前修改 config目录的相关配置
-
运行基础依赖
# 自行安装 docker 及 docker-compose docker-compose up -d
-
运行 user 服务
cd cmd/user 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
-
运行 feed 服务
cd cmd/feed sh build.sh sh output/bootstrap.sh
-
运行 publish 服务
cd cmd/publish sh build.sh sh output/bootstrap.sh
-
运行 relation 服务
cd cmd/relation sh build.sh sh output/bootstrap.sh
-
运行 api 服务
cd cmd/api chmod +x ./run.sh sh ./run.sh
-
检查 自封装的 dlog 包中 callerSkip存在的问题 / 使用 obs-opentelemetry 提供的 Logger 作为 DefaultLogger
-
DAL 层优化
for
循环内的 db 查询 -
使用 Jaeger 实现链路跟踪可视化
-
添加 RPC微服务 Handler 部分的单元测试内容
-
编写 DockerFile 实现分布式容器部署
-
采用 Redis 作为 NoSQL 缓存,优化 JWT 鉴权,结合消息队列和 Redis 实现对定时更新 Token、各种操作数据 的缓存和持久性存储
-
使用 Hertz 替换 Gin, 提高 HTTP 层的性能和可扩展性
-
实现分库分表