1.项目介绍
实现极简版抖音,包括user service/ video service/ favorite service。
基础功能:
- 视频Feed流:支持所有用户刷抖音,视频按投稿时间倒序推出
- 视频投稿:支持登录用户自己拍视频投稿
- 个人主页:支持查看用户基本信息和投稿列表,注册用户流程简化
互动方向: - 点赞操作:登录用户可以给视频点赞和取消点赞。
- 喜欢列表:登录用户,在个人主页喜欢Tab下能够查看点赞视频列表
2.架构设计
整体框架:
整体架构采用微服务架构,用户通过HTTP请求接入api层,api层分析HTTP请求调用不同的handler功能,而这些功能都对应着不同的微服务,通过etcd进行服务发现进而进行rpc调用。微服务user、video、favorite注册到etcd上。
3. 项目实现
user服务
目前基本实现登录,注册以及用户信息显示的功能接口
为了防止数据库意外泄露/破坏和出于保护用户隐私的目的, 不应该在数据库中存入明文密码。
常用做法是通过哈希算法对明文密码加密后存入数据库。本项目采用MD5码对明文密码进行散列编码,因此数据库中密码那一列并非明文。
但是人们有使用便于记忆的密码习惯, 并且不同应用也往往使用相同的密码。 因此使用MD5码散列后的编码仍可能一致。项目改进可以通过向密码中加盐的方式提高密码的保护等级。
video服务
目前基本实现了feed流,发布投稿,投稿列表的功能接口。在实现feed流以及投稿列表时,进行查询用户信息,并且查询favorite数据表是否点赞。
缓存采用了手写的miniCache。在video功能中,需要根据用户id获取发布列表,按发稿时间的倒序获取feed流。因此缓存中需要存储视频信息,及用户发布的视频信息列表。考虑到热点视频的作者就是热点用户的可能性。并将视频信息与用户列表解耦,减少视频信息在缓存中重复 。 缓存中记录的用户发布列表,里面仅含是视频id而不包含视频的详细信息。
favorite服务
实现了获取某用户的点赞列表,某用户对某video进行点赞或取消点赞操作。同样返回喜欢列表时,查询视频发布者的信息并且根据点赞/取消点赞的动作修改videos数据表中的作品点赞数。
多次点赞同一视频不能够马上更新喜欢的视频列表,之后可以做的优化是,采用video服务中的minicache进行先查询缓存找不到再查找数据库的方案,能够加速响应。
4.项目地址
github仓库:https://github.com/LaiYuShuang/douyin