项目开源地址:butane123/cinema-ticket: 一个基于go-zero框架的微服务影院票务系统cinema-ticket (github.com)
这是一个微服务影院票务系统,基于go-zero框架实现,官网:go-zero帮助文档
注意!!!本项目目前仍在制作中,可以看到一些图、许多文字介绍部分什么的都还没画,这段时间作者会继续开搞的
go-zero
Mysql
Redis
Golang 1.18
Docker Compose
Kafka
(、Zookeeper
)Etcd
DTM
Prometheus
、Grafana
Jaeger
使用的技术依赖有点多,强烈建议使用docker配置虚拟环境(不过如果只是想要先跑动项目的话,只要配置redis、mysql、etcd就可以了)
使用JWT Token工具,生成了接口验证Auth的token,保证用户数据传输的安全
使用Squirrel工具,在go-zero框架中简化了Sql语句的编写
使用jordan-wright写的email工具,进行邮箱验证码的发送
使用ApiFox工具,生成了在根目录下的接口测试导出文件cinema-ticket.openapi.json,标准是openapi-3.0.1版本
使用Goctl-Swagger插件,可以自行生成用于接口介绍的swagger网页
cinema-ticket
├─code //代码根目录
│ ├─common //通用工具包
│ │ ├─errorx
│ │ ├─kqueue
│ │ ├─response
│ │ ├─scripts
│ │ └─utils
│ └─service //服务层
│ ├─advert //广告服务
│ │ ├─api
│ │ ├─model
│ │ └─rpc
│ ├─comment //评论服务
│ │ ├─api
│ │ ├─model
│ │ └─rpc
│ ├─film //电影服务
│ │ ├─api
│ │ ├─model
│ │ └─rpc
│ ├─order //订单服务
│ │ ├─api
│ │ ├─model
│ │ ├─mq
│ │ └─rpc
│ ├─pay //支付流水服务
│ │ ├─api
│ │ ├─model
│ │ └─rpc
│ └─user //用户服务
│ ├─api
│ ├─model
│ └─rpc
└─images //ReadMe介绍图片
该项目的业务逻辑思想来源于当前市场上的其他主流票务系统。
商业广告和普通公告相关信息和操作等服务。
用户评论相关信息和操作等服务。
根据用户的购买记录,推送广告/消息;推送系统公告。
电影相关信息和操作等服务。
用户订单相关信息和操作等服务。
支付流水:用户创建订单后,会生成一份支付流水保存在库中,然后当用户支付后,会进行支付回调,用实际支付的价格判断是否与库中的支付流水价格等信息相同,我们就可以以此来判断支付是否成功。
普通用户、管理员相关信息和操作等服务。
/pay/callback
支付回调接口:支付回调是连接订单和支付两个模块的桥梁,先根据订单创建一份支付流水存入数据库,然后回调函数执行时,会把支付的金额与支付流水中的金额进行比较判断,若符合则判断订单生效、流水完成,否则不生效。
支付回调应用场景:
例 :用户支付成功->通过回调判断->数据库操作(设置订单已支付,流水完成)
用户支付失败(或取消支付)->通过回调判断->跳转到支付失败页
本项目使用吞吐量大、可用性高的Kafka作为消息队列。go-zero框架原生支持Kafka,可以简化许多配置。
本项目在进行不同服务的DML操作,使用分布式事务保证数据一致性。DTM是一个开源的实现分布式事务的工具,基于SAGA 协议。
官网:DTM架构 | DTM开源项目文档
本项目中的DTM部分子事务屏障日志效果如下:
本项目使用Prometheus工具统计各个APi服务、RPC各自的监控数据,并用Grafana对数据指标进行表格化展示。
部分效果图如下:
(总览)
(api监控效果)
(rpc监控效果)
(Grafana的折线图效果)
本项目使用Jaeger工具实现链路追踪。Jaeger是一个开源的分布式追踪系统,使用这个工具可以轻松地对api、rpc进行链路追踪。
部分效果图如下:
(链路追踪效果)
本项目是作者在学习golang框架,自建并学习的项目。在构造并完善该项目的过程中,还是学习到了很多内容的。
若有其他问题的欢迎指出。
下一篇:【逐步剖C】-第六章-结构体初阶