# damai **Repository Path**: MMAYW/damai ## Basic Information - **Project Name**: damai - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-19 - **Last Updated**: 2025-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 大麦订票服务系统提供了可以在线上对相应的节目(包括:演唱会、话剧歌剧、体育比赛、儿童亲子)进行订票的功能,用户可以进行注册,登录,然后选择节目和座位后进行购票,支付,以及查询自己的订单功能 # 技术结构 - 使用了 **SpringCloud+SpringCloudAlibaba** 的微服务结构 - 使用了 **Nacos** 作为注册中心 - 使用 **Redis** 不仅仅作为缓存,还使用了`Lua脚本`/`延迟队列`/`Stream消息队列` 等高级特性 - 引入了 **Kafka** 消息中间件,**SpringBootAdmin** 作为服务的监控通知 - **ELK** 作为日志的记录,**ElasticSearch**提供搜索和展示功能, - **Sentinel/Hystrix** 作为熔断保护层 - 使用 **ShardingSphere** 实现分库分表,来存储海量的数据 通过以上设计,来实现应对高并发、高吞吐的能力,以及海量数据的存储和服务状态的监控 # 业务结构 通过此业务结构图进一步详细的介绍项目中的功能,包括:**服务配置**、**技术选型**、**核心业务**、**设计组件**、**中间件的使用**、**监控方式**、**高并发解决策略** 等各个方面,方便大家能够对大麦项目的整体架构和设计有一个清晰的认知 # 技术选型 | 技术 | 说明 | 官网 | | -------------------- | ------------------ | ------------------------------------------------------------ | | Spring-Boot | Web服务框架 | [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) | | Spring-Cloud | 微服务框架 | [https://spring.io/projects/spring-cloud](https://spring.io/projects/spring-cloud) | | Spring-Cloud-alibaba | alibaba微服务框架 | [https://github.com/alibaba/spring-cloud-alibaba](https://github.com/alibaba/spring-cloud-alibaba) | | Spring-Cloud-Gateway | 微服务网关 | [https://spring.io/projects/spring-cloud-gateway](https://spring.io/projects/spring-cloud-gateway) | | Nacos | 服务注册中心 | [https://nacos.io/zh-cn/index.html](https://nacos.io/zh-cn/index.html) | | Sentinel | 服务熔断 | [https://sentinelguard.io/zh-cn/](https://sentinelguard.io/zh-cn/) | | Log4j2 | 日志框架 | [https://github.com/apache/logging-log4j2](https://github.com/apache/logging-log4j2) | | Mysql | 数据库 | [https://www.mysql.com/](https://www.mysql.com/) | | MyBatis-Plus | ORM框架 | [https://baomidou.com](https://baomidou.com) | | MyBatisGenerator | 数据层代码生成器 | [http://www.mybatis.org/generator/index.html](http://www.mybatis.org/generator/index.html) | | AJ-Captcha | 图形验证码 | [https://gitee.com/anji-plus/captcha](https://gitee.com/anji-plus/captcha) | | Kafka | 消息队列 | [https://github.com/apache/kafka/](https://github.com/apache/kafka/) | | Redis | 分布式缓存 | [https://redis.io/](https://redis.io/) | | Redisson | 分布式Redis工具 | [https://redisson.org](https://redisson.org) | | Elasticsearch | 搜索引擎 | [https://github.com/elastic/elasticsearch](https://github.com/elastic/elasticsearch) | | LogStash | 日志收集工具 | [https://github.com/elastic/logstash](https://github.com/elastic/logstash) | | Kibana | 日志可视化查看工具 | [https://github.com/elastic/kibana](https://github.com/elastic/kibana) | | Nginx | 静态资源服务器 | [https://www.nginx.com/](https://www.nginx.com/) | | Docker | 应用容器引擎 | [https://www.docker.com](https://www.docker.com) | | Jenkins | 自动化部署工具 | [https://github.com/jenkinsci/jenkins](https://github.com/jenkinsci/jenkins) | | Hikari | 数据库连接池 | [https://github.com/brettwooldridge/HikariCP](https://github.com/brettwooldridge/HikariCP) | | JWT | JWT登录支持 | [https://github.com/jwtk/jjwt](https://github.com/jwtk/jjwt) | | Lombok | Java语言增强插件 | [https://github.com/rzwitserloot/lombok](https://github.com/rzwitserloot/lombok) | | Hutool | Java工具类库 | [https://github.com/looly/hutool](https://github.com/looly/hutool) | | Swagger-UI | API文档生成工具 | [https://github.com/swagger-api/swagger-ui](https://github.com/swagger-api/swagger-ui) | | Knife4j | Swagger 增强框架 | [https://doc.xiaominfo.com](https://doc.xiaominfo.com) | | Hibernator-Validator | 验证框架 | [http://hibernate.org/validator](http://hibernate.org/validator) | | XXL-Job | 分布式定时任务框架 | [http://www.xuxueli.com/xxl-job](http://www.xuxueli.com/xxl-job) | | ShardingSphere | 分库分表 | [https://shardingsphere.apache.org](https://shardingsphere.apache.org) | # 架构和组件设计 针对于分布式和微服务的项目来说,随着业务的发展,项目的数量上千个都是很正常的,但如何要把这些项目做好配置,做好架构设计,设计出组件库,都是要考虑的因素 既然组件库是要给其他服务提供使用,所以在设计时要考虑的细节非常的多,**设计模式和高内聚低耦合的思想更加的重要**,而且代码的健壮性和高效率的执行也是同样重要,而在大麦项目中,使用了SpringBoot的自动装配机制来设计组件库 除了组件库外,还有对**异常的处理、数据的封装格式、多线程的使用等等也都要进行相应的封装设计**,这些在项目中同样具备 # 业务流程 对于大麦项目来说,核心的业务就是用户选择节目然后进行购票功能了,项目中不仅完整了对整个业务流程的完整闭环,而且考虑到既然设计此项目是为了应对高并发的特点,那么在从业务的角度上也做了很多的优化设计 ## 项目中的各个亮点部分 项目的亮点可以分成多个部分,比如涉及到用户服务的业务时,项目在海量并发的场景下的问题: - **用户服务如何设计分库分表,存在用户邮箱、用户手机号多种方式登录,要怎么设计不会发生读扩散问题?** - **当一瞬间有大量的用户注册请求时,如何防止 缓存穿透问题?网上说的那些方案到底靠谱吗?到底要怎么解决并且不影响用户体验?** - **用户和购票人数据为了应对高并发的场景下,在缓存中要怎么设计?把所有数据都放进去吗?** - **如何设计缓存策略?采取哪种结构来存储?采取哪种维度来存储?哪些数据适合放入缓存?哪些不适合?** 在用户进行浏览的过程中,对于问题的存在同样也不少: - **如何应对高并发下的用户查询请求?在主页列表、类型列表、的请求查看下,如何将设计分库分表的数据查询方案?** - **节目详情要怎么设计缓存?有了Redis就可以了吗?突发性流量激增的问题怎么解决?** - **如何设计多级缓存来应对几十万,甚至几百万的访问压力?如果发生了缓存雪崩要如何解决和提前预防?** 而在用户购票的流程中,为了解决高并发的压力,需要考虑的问题和细节就会更多: - **如何应对高并发下的用户购票压力?在购票流程中怎么考虑缓存和数据库的交互?** - **库存数量在缓存中应该如何设计?用户购票和支付过程中,要怎么正确的扣除库存?异常了怎么回滚?数据库中的余票数量一致性要如何解决?** - **分布式锁使用起来的细节到底有哪些?只要加上一行锁就可以了吗?** - **高并发下的分布式锁如何进一步的优化?锁的粒度?网络请求的性能?** - **幂等功能如何实现?有哪些维度需要考虑?** - **经典的缓存数据库一致性的问题实际生产环境中到底如何解决?直接删除缓存、延迟双删 这些方案到底可行吗?** 而在整个项目的架构设计上,也有很多的问题存在: - **高并发下订单延迟关闭功能如何实现?使用中间件作为延迟队列的问题?使用redis作为延迟队列可以吗?如何提高性能?** - **分布式id如何生成?经典的雪花算法?直接使用MybatisPlus中的生成策略可以吗?有什么问题?** - **订单的分库分表如何设计?既要支持订单详情查询、又要支持订单列表查询而不发生读扩散?** - **如何执行灵活的限流规则?能支持到某个时间段、某个请求、并能记录下异常行为信息?** - **项目的架构配置、服务配置、数据结构要如何统一设计和管理?异常如何捕获?** # 大麦pro 在高并发业务中,关于中间件的状态和一致性问题要考虑的细节也要充分的考虑到才行,例如: - **Redis宕机了怎么办?** - **MQ宕机了怎么办?** - **MQ消息丢失了怎么办?** - **MQ消息延迟消费了怎么办?** - **数据库的余票数量和Redis中的不一致怎么办?** - **Redis恢复后,丢失的数据要怎么恢复?** 等等一系列的这种令人头疼的问题!之前的 damai 项目关于这方面的问题有做过处理,但有些是人工处理,没有实现全面的自动化,有的面试官听着感觉比较普通,没有给人十足的亮点。 所以针对上述说的这种疑难杂症,特意开发出了 damai 项目的升级版本: **大麦pro** ### 大麦pro详细介绍:[👉 点击查看讲解](https://javaup.chat/damai/damai-pro/release-intro) ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6pro/%E6%9E%B6%E6%9E%84%E9%9A%BE%E7%82%B9%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3.png) # 项目展示 为了尽可能的还原,本项目尽可能贴近官网的页面设计和业务流程,小伙伴可以通过前端项目一边来学习业务,一边体会业务中调取了哪些后端接口,这种学习方式是简单且高效的,也建议小伙伴在学习公司的业务时也使用这种方式 ### 主页列表 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E4%B8%BB%E9%A1%B5%E5%88%97%E8%A1%A8-%E6%B8%85%E6%99%B0.png) ### 分类列表 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E5%88%86%E7%B1%BB%E5%88%97%E8%A1%A8-%E6%B8%85%E6%99%B0.png) ### 节目详情 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E8%8A%82%E7%9B%AE%E8%AF%A6%E6%83%85-%E6%B8%85%E6%99%B0.png) ### 生成订单 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E7%94%9F%E6%88%90%E8%AE%A2%E5%8D%95-%E6%B8%85%E6%99%B0.png) ### 订单列表 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E8%AE%A2%E5%8D%95%E5%88%97%E8%A1%A8-%E6%B8%85%E6%99%B0.png) ### 订单详情 ![](https://multimedia-javaup.cn/%E5%A4%A7%E9%BA%A6%E9%A1%B9%E7%9B%AE%E6%88%AA%E5%9B%BE%E6%B8%85%E6%99%B0/%E5%A4%A7%E9%BA%A6%E6%88%AA%E5%9B%BE-%E8%AE%A2%E5%8D%95%E8%AF%A6%E6%83%85-%E6%B8%85%E6%99%B0.png) ### 学生人群 无论是正在大学中或者是培训机构中的学生,其实对项目的需求更高,可以这么说能不能决定你能正式工作的因素除了学历外就是项目了,既然学历已经成了定局,那么最能提高竞争力的就是 **项目**,如果能在简历和面试中已经有了比较出色的项目经验,那么对于面试官来说绝对是必杀技! 不用担心怕自己看不懂项目,项目的文档和视频讲解非常的详细,分成了 **项目的总体介绍**、**如何启动**、**项目基础介绍**、**项目的架构设计**、**详细业务讲解**、**基础组件讲解**、**设计到的技术讲解**、**深挖细节亮点讲解**,配合 **详细的代码加注释以及解释流程和设计思路并且还结合了流程图** 方便大家更好的理解。学生可根据自己目前学习的进度来跳转到对应的目录来学习 ### 工作了几年的人群 对于这些人群,学习大麦项目更是必要的,通过项目的讲解能学习到项目的架构设计、设计模式、高并发解决方案,来让自己的技术能力得到提高,并且让自己的简历和面试中通过此项目来增加个人亮点 # 提供的服务 **文档数量120+,总字数26W+,加上视频极为细致的讲解,并且还在不断更新中,带你全方位360度无死角彻彻底底掌握项目!** 包括对 **项目从0到1的讲解**、**项目的细节和亮点总结**、**遇到的面试真题**、**详细的各种优化后的压测报告**、**如何将项目有亮点的写到简历上**。并且提供后续的答疑解惑,小伙伴在学习项目时遇到没有理解的问题,或者面试过程中遇到的问题都可以在社区中进行反馈,本人会进行详细的分析解答 # 如何启动项目 - [准备项目启动条件](https://javaup.chat/damai/getting-started/prerequisites) - [如何安装项目需要的中间件环境](https://javaup.chat/damai/getting-started/install-dependencies) - [后端项目部署启动](https://javaup.chat/damai/getting-started/backend-deploy) - [前端项目部署启动](https://javaup.chat/damai/getting-started/frontend-deploy) # 文档和视频目录 ![](https://multimedia-javaup.cn/%E6%9E%B6%E6%9E%84%E5%9B%BE/%E6%96%87%E6%A1%A3%E7%9B%AE%E5%BD%95.png)