这是我参与「第三届青训营-后端场」笔记创作活动的的第4篇笔记。
总的来说抖音项目的后端是写完了,但是受限于各种原因,感觉很多的地方都可以优化。
- 视频上传问题,客户端一次性发送的数据,服务端也就只能一次接收。视频存至OSS部分为一次性上传所有视频数据,但是用的免费OSS,带宽小,且不支持数据流分片上传,如果优化成分片上传可能需要自己实现一个存储视频的服务
- 部分数据查询问题,大部分关系数据,即点赞,评论等都是直接从Mysql拉取,但是对于热点数据,可以考虑从redis中拉取,提高速度。
- 对于视频流,每次需要查询每个视频,当前用户是否已经点赞,需要查询30次,考虑是否能优化成一次。
- 大部分服务没有单元测试,感觉微服务不方便写单元测试,需要模拟请求,比较麻烦,且涉及到数据库增删查改,只能手动测试
- 微服务感觉不是很合理,有部分重复代码
go语言测试代码示例
Ending a file's name with _test.go tells the go test command that this file contains test functions.
同时每个函数必须添加一个*testing.T类似的参数,用于报告测试失败和附加的日志信息,go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。
package greetings
import (
"testing"
"regexp"
)
// TestHelloName calls greetings.Hello with a name, checking
// for a valid return value.
func TestHelloName(t *testing.T) {
name := "Gladys"
want := regexp.MustCompile(`\b`+name+`\b`)
msg, err := Hello("Gladys")
if !want.MatchString(msg) || err != nil {
t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
}
}
// TestHelloEmpty calls greetings.Hello with an empty string,
// checking for an error.
func TestHelloEmpty(t *testing.T) {
msg, err := Hello("")
if msg != "" || err == nil {
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
}
}