本项目利用 Golang 以及相关技术如 Gorm、MySQL、Redis、JWT、RabbitMQ、Hystrix、七牛云 等构建了基于 Gin 和 Go-micro的微服务应用,实现了视频处理、对象存储、限流、降级熔断、负载均衡等功能,并通过 Opentracing、Jaeger 等工具进行监控与追踪,Testify进行单元测试,Docker进行容器化部署,形成高可用高性能的分布式服务。
本项目有v1、v2两个版本,可前往Releases下载使用,前者是传统的单体架构,用beego实现,后者是微服务架构,由gin+go-micro实现。
下面介绍v2版的使用:
如果不使用docker进行容器化部署(docker部署参照文末),可以参考以下步骤进行本地部署。建议使用环境为Ubuntu20.04
。
git clone https://github.com/UESTCByteDance/ByteRhythm.git
go mod tidy
打开config.ini
,修改以下内容:
DBHost = 127.0.0.1
DBPort = 3306
DBUser = root
DBPassWord = 123456
DBName = tiktok
确保你的Ubuntu20.04
已经装了MySQL
,并且能够连接上,然后新建数据库tiktok
打开终端,依次执行下列命令(逐条执行):
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev
sudo apt install -y libavdevice-dev libavfilter-dev libswscale-dev libavcodec-dev libavformat-dev libswresample-dev libavutil-dev
sudo apt-get install yasm
export FFMPEG_ROOT=$HOME/ffmpeg
export CGO_LDFLAGS="-L$FFMPEG_ROOT/lib/ -lavcodec -lavformat -lavutil -lswscale -lswresample -lavdevice -lavfilter"
export CGO_CFLAGS="-I$FFMPEG_ROOT/include"
export LD_LIBRARY_PATH=$HOME/ffmpeg/lib
如果未安装,前往官方网站:https://github.com/etcd-io/etcd/releases/tag/v3.5.9下载适合你系统的安装包并解压。
按需修改配置:
EtcdHost = 127.0.0.1
EtcdPort = 2379
在对应终端执行:
./etcd
如果权限不够,可以使用chmod +x etcd
赋予可执行权限再执行./etcd
。
可以安装etcdkeeper
进入UI界面进行查看。
如果未安装,前往官方网站:https://www.jaegertracing.io/download/下载适合你系统的安装包并解压。
按需修改配置:
JaegerHost = 127.0.0.1
JaegerPort = 6831
在对应终端执行:
./jaeger-all-in-one --collector.zipkin.host-port=:9411
如果权限不够,可以使用chmod +x jaeger-all-in-one
赋予可执行权限再执行./jaeger-all-in-one --collector.zipkin.host-port=:9411
。
可以访问:http://localhost:16686进入UI界面。
如果未安装,前往官方网站:https://www.rabbitmq.com/install-debian.html下载安装。
按需修改配置:
RabbitMQ = amqp
RabbitMQHost = 127.0.0.1
RabbitMQPort = 5672
RabbitMQUser = guest
RabbitMQPassWord = guest
确保RabbitMQ能在本地运行。
如果未安装,打开终端,依次执行下列命令(逐条执行):
sudo apt update
sudo apt install redis-server
按需修改配置:
RedisHost = 127.0.0.1
RedisPort = 6379
确保Redis能在本地运行。
根据你的七牛云账户信息,修改以下配置:
Bucket = your bucket
AccessKey = your access key
SecretKey = your secret key
Domain = your domain
//构建项目
chmod +x build.sh
./build.sh
//运行项目
chmod +x run.sh
./run.sh
如果你是将项目克隆到Windows系统里,再转移到Ubuntu系统里,很可能会遇到Windows和Linux换行不兼容的问题,建议先执行命令sed -i -e 's/\r$//' build.sh run.sh
,再执行上述命令。
cd test
go test -v
注:测试文件的参数可能会需要根据实际情况更改。
tips:由于服务器性能限制,因此将所有微服务放在同一个容器中,后续可用docker-compose部署为7个业务容器
docker run -d -p 3306:3306 --name tiktok-mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=tiktok mysql/mysql-server:latest
docker run -it -p 8080:8080/tcp -p 16686:16686/tcp --name byterhythm david945/byterhythm:v2.1