go语言实现的一个基于go-zero框架的微服务影院票务系统cinema-ticket

news/2024/4/29 2:47:59/文章来源:https://blog.csdn.net/CAOSHUCAOSHU/article/details/128960758

一个基于go-zero框架的微服务影院票务系统cinema-ticket

前言

项目基本介绍

项目开源地址: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
  • 服务监控:PrometheusGrafana
  • 链路追踪: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介绍图片

微服务内容拆分

该项目的业务逻辑思想来源于当前市场上的其他主流票务系统。

advert 广告服务

商业广告和普通公告相关信息和操作等服务。

comment 评论服务

用户评论相关信息和操作等服务。

根据用户的购买记录,推送广告/消息;推送系统公告。

film 电影服务

电影相关信息和操作等服务。

order 订单服务

用户订单相关信息和操作等服务。

pay 支付流水服务

支付流水:用户创建订单后,会生成一份支付流水保存在库中,然后当用户支付后,会进行支付回调,用实际支付的价格判断是否与库中的支付流水价格等信息相同,我们就可以以此来判断支付是否成功。

user 用户服务

普通用户、管理员相关信息和操作等服务。

部分接口特别说明

  • /pay/callback 支付回调接口:

支付回调是连接订单和支付两个模块的桥梁,先根据订单创建一份支付流水存入数据库,然后回调函数执行时,会把支付的金额与支付流水中的金额进行比较判断,若符合则判断订单生效、流水完成,否则不生效。

支付回调应用场景:

例 :用户支付成功->通过回调判断->数据库操作(设置订单已支付,流水完成)

用户支付失败(或取消支付)->通过回调判断->跳转到支付失败页

部分项目技术说明

消息队列

本项目使用吞吐量大、可用性高的Kafka作为消息队列。go-zero框架原生支持Kafka,可以简化许多配置。

分布式事务

本项目在进行不同服务的DML操作,使用分布式事务保证数据一致性。DTM是一个开源的实现分布式事务的工具,基于SAGA 协议。

官网:DTM架构 | DTM开源项目文档

本项目中的DTM部分子事务屏障日志效果如下:
在这里插入图片描述

服务监控

本项目使用Prometheus工具统计各个APi服务、RPC各自的监控数据,并用Grafana对数据指标进行表格化展示。

部分效果图如下:
在这里插入图片描述

(总览)
在这里插入图片描述
(api监控效果)
在这里插入图片描述
(rpc监控效果)
在这里插入图片描述
(Grafana的折线图效果)

链路追踪

本项目使用Jaeger工具实现链路追踪。Jaeger是一个开源的分布式追踪系统,使用这个工具可以轻松地对api、rpc进行链路追踪。

部分效果图如下:
在这里插入图片描述

在这里插入图片描述
(链路追踪效果)

如何运行该系统

先做好准备工作

  • 填写工具类中的设置常量
    • 为系统的验证码发送邮箱申请授权码,并填写EmailAuthCode等值。注意邮箱要开启SMTP功能服务。

再运行基础服务:

  • 运行etcd,并配置相应的地址和端口号
  • 运行redis,并配置相应的地址和端口号
  • …同上,不再赘述,配置Mysql等在上面技术栈提及的相应技术

最后运行项目:

  • Linux环境直接按顺序运行脚本startRpc.sh、startMQ.sh、start.sh文件即可。
  • Windows环境,可以选择运行六个服务中的共9个yaml文件即可。(Linux环境也可以通过该方式运行项目)

尚未完成的:

  • 增加管理员模块,在原用户模块上修改
  • 增加两个模块/服务:广告模块advert和评论模块comment
  • 修改id为分布式全局统一id
  • 实现查询时的缓存优化,并解决带来的缓存击穿、缓存穿透等问题
    • 主要针对于对普通用户可能查询量大的电影服务和订单服务
  • 基于分布式锁和消息队列优化用户下单业务
  • 完善手机验证码功能
  • 考虑增填用户签到、优惠券等功能模块

最后

本项目是作者在学习golang框架,自建并学习的项目。在构造并完善该项目的过程中,还是学习到了很多内容的。

若有其他问题的欢迎指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_255648.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java进阶打卡】JDBC- jdbc连接池

【Java进阶打卡】JDBC- jdbc连接池概述自定义数据库连接池归还连接-装饰设计模式归还连接-适配器设计模式动态代理动态代理-归还数据库连接概述 自定义数据库连接池 DataSource接口概述 javax.sql.DataSource接口:数据源(数据库连接池) Java…

LaoCat带你认识容器与镜像(实践篇二上)

实践篇主要以各容器的挂载和附加命令为主。 本章内容 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 Docker > 20.10.22 在开始本章内容之前,我解答一个问题,有小伙伴问我说,有的容器DockerHub官网并没有提供任何可参考的文…

软件测试标准流程

软件测试的基本流程大概要经历四个阶段,分别是制定测试计划、测试需求分析、测试用例设计与编写以及测试用例评审。因此软件测试的工作内容,远远没有许多人想象的只是找出bug那么简单。准确的说,从一个项目立项以后,软件测试从业者…

【项目精选】基于Java的敬老院管理系统的设计和实现

本系统主要是针对敬老院工作人员即管理员和员工设计的。敬老院管理系统 将IT技术为养老院提供一个接口便于管理信息,存储老人个人信息和其他信息,查找 和更新信息的养老院档案,节省了员工的劳动时间,大大降低了成本。 其主要功能包括: 系统管理员用户功能介绍&#…

面临激烈竞争的汽车之家仍有新的增长机会

来源:猛兽财经 作者:猛兽财经 竞争激烈是汽车之家面临的主要问题 在汽车之家(ATHM)2021财年的20-F文件中,汽车之家将自己描述为中国最大的“汽车服务平台”运营商,但行业数据却显示,汽车之家的…

Python 如何快速搭建环境?

Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。) Win 9x/NT/2000 Macintosh (Intel, PPC, 68K) OS/2 DOS (多个…

10条终身受益的Salesforce职业发展建议!

Salesforce这个千亿美金巨兽,在全球范围内有42,000多名员工。作为一家发展迅速的科技公司,一直在招聘各种角色,包括销售、营销、工程师和管理人员等。 据IDC估计,从2016年到2020年,该生态系统创造了190万个工作岗位。…

训练营day16

104.二叉树的最大深度 559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数104.二叉树的最大深度 力扣题目链接 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示…

Java基础-网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…

Vue中路由缓存及activated与deactivated的详解

目录前言一,路由缓存1.1 引子1.2 路由缓存的方法1.2.1 keep-alive1.2.2 keep-alive标签中的include属性1.2.3 include中多组件的配置二,activated与deactivated2.1 引子2.2 介绍activated与deactivated2.3 解决需求三,整体代码总结前言 在Vu…

【深度学习基础8】卷积神经网络 经典网络

一、卷积操作 1. 基本原理 相信大家对卷积操作并不陌生,先来回顾一下卷积的工作原理(2-D):👇 卷积的目的是进行特征提取,不同的卷积核可以提取到不同的特征,比如下面的三个卷积核的功能分别是:模糊化、锐化、边缘化👇 卷积的本质就是滤波器, 将滤波器沿着图像…

【JavaScript】面向对象和构造函数详解

💻 【JavaScript】面向对象和构造函数详解 🏠专栏:JavaScript 👀个人主页:繁星学编程🍁 🧑个人简介:一个不断提高自我的平凡人🚀 🔊分享方向:目前…

加拿大访问学者家属如何办理探亲签证?

由于大多数访问学者的访学期限都为一年,家人来访不仅可以缓解访学的寂寞生活,而且也是家人到加拿大体验国外风情的好机会。家属在国内申请赴加签证时,如果材料齐全,一般上午递交了申请,下午就可以拿到签证。以下是家人…

基于merlin使用chatGPT进行对话

最近chatGPT很热,大家都想试用它。但由于各种限制,一般情况下国内不能试用。 下面给大家介绍基于merlin使用chatGPT(目前每天只有11次问答次数)。 1 打开merlin页面 访问地址merlin.foyer.work,点击“add to chrome”…

流程控制之循环

文章目录五、流程控制之循环5.1 步进循环语句for5.1.1 带列表的for循环语句5.1.2 不带列表的for循环语句5.1.3 类C风格的for循环语句5.2 while循环语句5.2.1 while循环读取文件5.2.2 while循环语句示例5.3 until循环语句5.4 select循环语句5.5 嵌套循环5.4 利用break和continue…

Elasticsearch安装IK分词器、配置自定义分词词库

一、分词简介 在Elasticsearch中,假设搜索条件是“华为手机平板电脑”,要求是只要满足了其中任意一个词语组合的数据都要查询出来。借助 Elasticseach 的文本分析功能可以轻松将搜索条件进行分词处理,再结合倒排索引实现快速检索。Elasticse…

crawler爬虫抓取数据

crawler爬虫实现 学习目标: 了解 crawler爬虫运行流程了解 crawler爬虫模块实现 1. crawler功能 初始化driver输入公司名称,并点击判断是否需要验证如果需要验证,获取验证图片并保存获取打码坐标点击验证图片判断查询结果选择第一条查询结果获取主要信…

Vue2仿网易云风格音乐播放器(附源码)

Vue2仿网易云风格音乐播放器1、整体效果2、使用技术3、实现内容4、源码5、使用图片1、整体效果 2、使用技术 使用了HTML5 CSS3进行页面布局及美化使用Vue2进行数据渲染与页面交互使用Axios发送http请求获取数据 3、实现内容 实现了搜索歌曲功能,输入歌手或歌曲关…

2023年做跨境电商的4个小忠告

2023年做跨境电商的小伙伴日益增加,但不管是对于新手还是老人,都是一个极具挑战的事情,因为做好跨境电商不是一件容易的事情,需要花费不少时间与精力。这里我们小编就给大家几个小忠告,希望对大家有用。2023年做跨境电…

私募证券基金动态-23年1月报

成交量:1月日均7,901.31亿元2023年1月A股两市日均成交7,901.31亿元,环比上升0.33%、同比下降25.18%。1月恰逢春节仅16个交易日,节后2个交易日交易量明显回暖。管理人:新提交备案51家,备案通过21家1月新提交备案申请的5…