Skip to content

极简版抖音,由Hertz和Kitex框架开发,实现了抖音的基础功能

License

Notifications You must be signed in to change notification settings

chuxin0816/douyin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

极简版抖音

Visitors

该项目为字节跳动青训营项目,实现了抖音主要功能模块,包括视频、用户、点赞、评论、关注、消息等服务,从单体架构升级到微服务架构,并持续优化相关技术实现。

接口文档: Apifox | 项目演示地址:http://chuxin0816.com:8888/ (已关闭)

项目部署

docker-compose up -d

项目结构:

. #篇幅有限,只展示主要部分
├── cmd
│   ├── docker              Dockerfile
│   └── gen                 Gorm/Gen
├── etc                     配置文件
├── src
│   ├── config
│   ├── dal                 访问数据库(MySQL, Redis, MongoDB, NebulaGraph)
│   ├── idl
│   ├── kitex_gen
│   ├── logger              日志及其配置
│   ├── pkg
│   │   ├── jwt             JWT认证
│   │   ├── kafka           Kafka消息队列
│   │   ├── oss             阿里云OSS
│   │   ├── snowflake       雪花算法
│   │   └── tracing         链路追踪
│   └── service
│       ├── api             HTTP服务端
│       ├── comment         评论服务
│       ├── favorite        点赞服务 
│       ├── message         消息服务
│       ├── relation        关注服务
│       ├── user            用户服务
│       └── video           视频服务
└── docker-compose.yml

性能测试

使用wrk进行性能测试,400个连接,16个线程,压力测试30s:读接口QPS 3500+,写接口QPS 2800+,压测过程全链路无错误

技术选型:

  • 框架选型:使用 Hertz 作为 HTTP 微服务框架,Kitex 作为 RPC 微服务框架;使用 GORM GEN 生成代码并操作 MySQL 数据库
  • 数据库:使用 MySQLRedis 集群实现读写分离,使用 MongoDB 存储用户消息,使用 NebulaGraph 存储用户关系
  • 服务注册与发现:使用 Consul 作为服务发现与注册中心和配置中心,并通过 viper 实时监控和读取配置文件
  • 缓存策略:通过 Cache Aside + Write Behind 等多种策略提升数据访问速度。使用 SingleFlight 减轻数据库压力并防止缓存击穿、使用布隆过滤器减少缓存穿透,并通过随机延时策略避免缓存雪崩
  • 中间件:采用令牌桶作为限流中间件,JWT 作为用户认证中间件,使用 Kafka 作为消息队列,实现异步写入数据库、配合 Canal 删除缓存、同步布隆过滤器等操作
  • 云原生:通过 OpenTelemetry + Jaeger 实现分布式链路追踪,使用 Docker Compose 一键部署项目,并通过 GitHub Actions 自动构建和推送镜像
  • 其他:使用 Snowflake 算法生成全局唯一ID,使用 ffmpeg 截取视频第5帧作为封面,使用 OSS 存储视频和视频封面

代码生成示例:

1. Gorm/Gen代码生成
go run cmd/gen/generator.go
2. Kitex代码生成
cd src/service/feed
kitex -module douyin -service user -gen-path ../../kitex_gen/ ../../idl/user.thrift

未来更新:

  • 使用ElasticSearch对用户消息和系统日志进行索引存储
  • 使用Prometheus和Grafana监控服务
  • 使用Kubernetes编排容器

About

极简版抖音,由Hertz和Kitex框架开发,实现了抖音的基础功能

Topics

Resources

License

Stars

Watchers

Forks