Skip to content

lennondotw/snaptime-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snaptime 服务端

快速开始

需要提前设置的环境变量

HOST="0.0.0.0"
QINIU_ACCESS_KEY="xxx"
QINIU_SECRET_KEY="xxx"
REDIS_ADDR="xxx"
REDIS_PASSWORD="xxx"
DB_ADDR="xxx"
DB_USERNAME="xxx"
DB_PASSWORD="xxx"

下载依赖

在项目的根目录下

go mod tidy

运行

go run main.go

如果想 修改 / 生成 gRPC 代码

go get github.com/gogo/protobuf/proto
go get github.com/gogo/protobuf/gogoproto
go get google.golang.org/grpc
go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
go install github.com/gogo/protobuf/gogoproto

然后在 proto 的文件夹下执行:

但是需要确保 github.com/gogo/protobuf/gogoproto/gogo.protoGOPATH/pkg/mod 目录下

最后执行

protoc -I=. -I=$GOPATH/pkg/mod --go-grpc_out=. --gogo_out=. *.proto

技术选型与开发设计

技术选型

img.png

开发设计

  • JWT 鉴权: 基于 golang - jwt 包实现了 token 的颁发与解析
  • 使用原生 gRPC 框架, proto 自动生成 pb.go 文件。
  • 用户头像、背景的随机获取:图片与视频的存储采用了 OSS 云对象存储,相较于一般本地服务器,具有更加安全、持久、方便、快捷等特性,由于客户端没有设置头像的设置,这里采用的是随机生成,在用户注册后会自动得获取一组随机得头像与背景。

架构设计

使用七牛云的云对象存储 kodo,先将视频上传到指定的 bucket ,上传完成后出发工作流,回调项目中的接口,从而完成视频链接的存储。

img_7.png

数据库设计

img_2.png img_3.png img_4.png img_5.png img_6.png img_8.png img_9.png img_10.png img_11.png

  • 关注数、点赞数等计数操作使用额外字段记录,避免使用 COUNT() 计数。
  • 每张表都添加了 deleted_at 字段用于软删除。
  • 索引:
    • 用户表:对( username , deleted_at )做唯一索引;
    • 评论表:viduid 做索引;
    • 点赞表:uidvid 做索引,( uid, vid , deleted_at )做唯一约束;

缓存层,使用 RedisString 的数据结构,使用 key - value,存储一个视频的点赞数量。

采取使用定时任务的方式,间隔一段时间将缓存中的数据与数据库中的数据进行同步,一定程度上解决数据一致性的问题。

部署

该项目使用 Serverless 云函数进行部署,充分发挥云函数自动扩容、按需分配资源的优势,在保证了高并发和高可用性的同时也能够节省成本。

About

Snaptime server.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors