GopherTok
| 第六届字节跳动青训营大项目作品,使用go-zero搭建的微服务项目,由gopher小队完成,一个简易版抖音项目 |
|---|
🪵架构
🚀技术栈
| 功能 | 实现 |
|---|---|
| http框架 | go-zero |
| rpc框架 | go-zero |
| orm框架 | gorm |
| 数据库 | Innodb-cluster,redis-cluster,mongodb |
| 对象存储 | 腾讯云cos,minio |
| 服务发现、注册与配置中心 | etcd,nacos |
| 链路追踪 | jaeger |
| 服务监控 | prometheus,grafana |
| 消息队列 | kafka |
| 日志搜集 | filebeat,go-stash,elasticsearch,kibana |
| 网关 | traefik |
| 部署 | Docker,docer-compose |
| CI/CD | Github Action |
高可用
- mysql选择
innodb-cluster
- redis选择
redis-cluster
- minio集群
四个节点
- kafka集群
3节点
- 服务的
api和rpc启动多个docker实例,api使用traefik负载均衡,rpc通过etcd`实现负载,保证服务的可靠性,高峰时期可以轻松扩容
高并发
-
调用各个服务的
rpc时采用并发调用,显著减少了响应时间 -
将高频率的数据采用
redis作缓存,减少了mysql压力 -
使用
kafka异步写入mysql,增加系统吞吐量
高性能
- kafka采用聚集写入,大大减少磁盘io和网络io
配置中心和服务发现、注册中心
nacos作为配置中心
etcd作为服务发现和注册中心
链路追踪
使用jaeger作为链路追踪
日志搜集
filebeat收集业务日志,然后将日志输出到kafka中作为缓冲,go-stash获取kafka中日志根据配置过滤字段,然后将过滤后的字段输出到elasticsearch中,最后由kibana负责呈现日志
监控
使用prometheus进行服务监控
再由grafana进行可视化呈现
网关
使用traefik作为网关,根据路由规则将请求负载均衡到各个服务的api上面
再通过负载均衡到各个服务api容器实例
CI/CD
- 使用
Github Action进行CI/CD,每次提交上去后进行自动化测试 - 然后可以手动构建各个服务的镜像,构建好后自动推送到
dockerhub上面 - 再ssh登录远程服务器,利用新的镜像和已经写好的
docker-compose自动部署好新的容器
🎉感谢
| 字节跳动青训营 |
|---|
📣许可证
GopherTok 在 MIT 许可证下开源,请在遵循 MIT 开源证书 规则的前提下使用
总结
这个项目还是花费了我们很多心思的,如果你觉得对比有所帮助,请点击star支持我们,star就是对我们最大的鼓励🥰🥰🥰