12306项目:铁路购票系统 学习笔记 【上】

本文是我在做12306铁路购票项目的笔记。

总结出来吃透12306项目分4步走:1、把git上的代码拷下来,想尽一切办法运行;2、然后吃透项目中的核心业务,对项目有大致了解;3、把项目中运用的核心技术吃透,多打断点多跟踪代码;4、改动项目持续内化,产生一个新项目。

上述方法论对理解任何一个项目有效,本文仅对1、2步进行深入讲解。

壹、项目运行

一、克隆项目

克隆网址:https://gitee.com/nageoffer/12306

出现下面这个问题:

可以通过如下方式解决:

依赖下载成功:

二、安装中间件环境

这里是马哥提供的中间件服务器,免去中间件环境搭建的问题(如果需要Redis、RocketMQ以及 Nacos 域名可微信私信我)

-Dspring.data.redis.password=Sm9sVXBOYJjI030b5tz0trjpzvZzRhtZmEbv0uOImcD1wEDOPfeaqNU4PxHob/Wp
-Dspring.data.redis.port=19389
-Dunique-name=-自定义名称,可以切换为自己的名称
-Dframework.cache.redis.prefix=自定义名称,可以切换为自己的名称:
-Dspring.data.redis.host=Redis域名
-Drocketmq.name-server=RocketMQ域名
-Dspring.cloud.nacos.discovery.server-addr=Nacos域名

-Dspring.data.redis.password=Sm9sVXBOYJjI030b5tz0trjpzvZzRhtZmEbv0uOImcD1wEDOPfeaqNU4PxHob/Wp
-Dspring.data.redis.port=19389
-Dunique-name=-PBJ
-Dframework.cache.redis.prefix=PBJ:
-Dspring.data.redis.host=common-redis-dev.magestack.cn
-Drocketmq.name-server=common-rocketmq-dev.magestack.cn:9876
-Dspring.cloud.nacos.discovery.server-addr=common-nacos-dev.magestack.cn:8848

注意注意,一定要注意,要给下面每一个Application添加VM options这个参数,否则的话会因为缺少参数而无法启动。

基本启动成功:

中间件控制台:

Nacos: http://common-nacos-dev.magestack.cn:8848/nacos/index.html

用户名/密码:nacos/nacos

RocketMQ:RocketMq-console-ng

以分布式开启:

如果遇到下面Command line is too long的错误

可以修改下面这个地方:

三、初始数据库表

在项目中有自带数据库:

12306 铁路购票模式有两种启动模式,分别是聚合版 SpringBoot 模式以及 SpringCloud 微服务模式。

下面是SpringBoot聚合模式:

建立数据库12306:

下面是SpringCloud分布式模式:

建立下面4个数据库:

12306_ticket、12306_user_0、12306_pay_0、12306_order_0

按照上面的套路把12306_ticket、12306_user_0、12306_pay_0、12306_order_0 的数据库结构和数据全部导入。

确保这些表的数据都已全部导入?

四、运行后端

 第一次运行启动聚合服务和网关服务即可:

五、运行前端

下面是前端nginx的下载地址:

https://pan.baidu.com/s/1IGrr8xjtFc7c-UJSn-pBtg

提取码:zzyb

如需压缩包可付费找我获取。

访问localhost如果出现下面页面代表成功:

访问:http://localhost:5175 ,跳转到12306的页面:

如果想用本地前端的方式启动,需要先下载node.js,推荐16以上的版本:

Index of /download/release/v16.20.1/ (nodejs.org)

安装yarn:

npm install -g yarn

贰、核心业务熟悉

六、发起支付

七、车票搜索

八、列车数据检索

九、注册用户

十、乘车人模块

十一、敏感信息加密

十二、用户购票责任链验证

十三、座位分配图

十四、实现列车购票流程

十五、列车余票保障缓存数据一致性

十六、库存扣减令牌限流

十七、分库分表

十八、车票订单查看

一、核心业务和技术

1、判断用户名是否已被注册接口,如何应对海量并发请求带来的缓存穿透问题?

2、用户敏感数据存储到数据库后,如何避免被黑客将数据库攻破并窃取用户信息?

3、海量并发查询车票列表接口,如何应对海量请求的查询,以及众多条件如何满足?

4、海量并发下单接口,如何应对海量用户下单请求,如何进行限流以保证系统不崩溃?以及如何正确落库?

5、用户下单后如何保障列车座位余票缓存和数据库一致性?非常典型的数据库和缓存一致性问题。

6、用户下单十分钟未支付,如何取消用户未付款订单?如果用户已支付,如何避免错误取消?

7、系统中用了消息队列后,如何确保消息不会被重复消费,保证业务系统消费幂等性?

8、海量用户和订单数据如何存储,通过什么分库分表规则保障系统高性能响应用户查询等请求?

9、如何通过分库分表基因算法保障分片键的易用性?比如一个订单号字段同时支持订单号和用户 ID 查询。

.10、海量数据分库分表后,为什么选择雪花算法作为 ID?如何保障雪花算法在大规模集群下生成不重复?

【如需文档加下方微信私信】

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值