抖音项目 | 青训营笔记

207 阅读4分钟

抖音项目

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

💡 项目简介

仓库: github.com/StellarisW/…

本项目完成了抖音的简单后端,主要实现了功能有:用户的注册与登录,视频feed流,视频投稿,用户关注,聊天等操作

🗼 项目设计

技术栈

apollo.svg

一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

使用apollo做配置管理系统,可以有效的在认证系统,用户系统等等不同的环境下进行配置的管理

go-zero.png

一个集成了各种工程实践的包含 微服务框架。

它具有高性能(高并发支撑,自动缓存控制,自适应熔断,负载均衡)、易拓展(支持中间件,方便扩展,面向故障编程,弹性设计)、低门槛(大量微服务治理和并发工具包、goctl自动生成代码很香),

同时go-zero也是现在最流行的go微服务框架,所以本项目采用go-zero为主框架搭建后端

mysql.svg

一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一

关系型数据库选型

minio.png

MinIO是一个用Golang开发的基于Apache License v2.0开源协议的高性能对象存储服务

它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

本项目使用minio作为对象存储平台

nsq.png

Go 语言编写的开源分布式消息队列中间件,具备非常好的性能、易用性和可用性

​ 刚开始想用RabbitMQ,但是很难做到集群和水平扩展,再看了看其他的队列组件(Darner,Redis,Kestrel和Kafka),每种队列组件都有不同的消息传输保 证,但似乎并没有一种能在可扩展性和操作简易性上都比较优秀的产品。

​ 然后就看到了nsq,支持横向拓展,性能也很好,同时也是go语言原生开发的,因此选型nsq

redis.svg

一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

缓存存储还是选型最普遍的redis

consul.svg

一套开源的分布式服务发现和配置管理系统,由HasiCorp公司用go语言开发的。提供了微服务系统中服务助理、配置中心、控制总线等功能。

在consul和etcd之间比较,consul的服务发现很方便,也有健康检查,多数据中心等功能,同时也是go云原生项目,因此选型consul

jaeger.svg

由Uber开源的分布式追踪系统

go-zero框架集成了对jaeger的支持,因此使用jaeger做追踪系统

traefik.png

一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。

本项目写的微服务很多,用nginx难管理,也比较懒得写配置文件,所以用traefik,虽然性能没nginx好,但是对微服务的反向代理和负载均衡的支持很便捷,

同时使用traefik中的http中间件,oauth proxy也很方便

架构图

architecture.png

模块设计

认证模块

用户模块

视频模块

聊天模块

📝 项目文档

项目接口文档

青训营抖音项目方案说明

青训营官方抖音项目接口说明文档