# 12306_0 **Repository Path**: CarlKong_admin/12306_0 ## Basic Information - **Project Name**: 12306_0 - **Description**: 12306 铁路购票服务是与大家生活和出行相关的关键系统,包括会员、购票、订单、支付和网关等服务。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-05-26 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 什么是 12306? ![](https://oss.open8gu.com/12306-base-biz-20230801.png) ## 技术架构 在系统设计中,采用最新 JDK17 + SpringBoot3&SpringCloud 微服务架构,构建高并发、大数据量下仍然能提供高效可靠的 12306 购票服务。 ![](https://oss.open8gu.com/1676637853202-c2af9e93-fe03-4c01-9fed-20ca07263476.png) 下方的架构图全面描述了项目的服务集合、组件库列表和基础设置层等要素。 ![](https://oss.open8gu.com/image-20230802104007774.png) 以用户服务系统为例,低并发和低数据量的系统相对简单,但高并发和海量数据的系统则需要考虑很多额外因素。 1. 当用户在 12306 网站注册新账号或添加乘车人时,系统需验证用户提交信息的真实性和准确性。如何有效预防用户提交虚假信息,保障系统购票的安全? 2. 12306 的大规模用户和乘车人数据如何选择分库分表?选择哪个字段作为分片键?如何在老业务上平滑上线分库分表?出现问题如何快速回滚? 3. 系统支持会员使用用户名、手机号以及邮箱等多种方式进行登录。由于登录时无法确定用户的分片键,造成的“读请求扩散”问题如何解决? 4. 在高并发的会员注册场景下,绝对会出现缓存穿透问题。网上鼓吹的对不存在 Key 进行缓存值设为 Null,以及布隆过滤器等都存在漏洞,如何解决? 5. 存在较多的敏感信息,比如会员或者乘车人的姓名、手机号、邮箱、证件号码以及住址,如何防止数据库被攻击时造成的敏感信息泄露? 再以购票服务为例,当用户购买两个乘车人的高铁一等座票且没有选座时,座位的分配逻辑如下: 1. 首先检查当前列车的一等座余票是否足够。如果余票不足,直接向客户端返回购票请求失败的响应; 2. 获取所有车厢中有两个座位余票的车厢,并对这些车厢进行遍历,按照下述流程执行; 3. 首先检查所有车厢中是否存在一等座车票的相邻座位。如果所有车厢中都没有相邻座位,进入下一步逻辑; 4. 接着检查是否有车厢中包含两个不相邻的一等座座位?因为同车厢两座位相邻座位没有的话,就退而找同车厢不相邻座位; 5. 如果以上逻辑都无法满足,那么最后选择分配不同车厢的不相邻座位。这种情况下,由于已经确认一等座的余票充足,因此一定能够成功完成购票; 6. 通过以上步骤,购票系统能够在高铁一等座票余票充足的情况下,合理地分配座位,确保乘车人出行时有良好的座位体验。同时,如果余票不足,系统会优先满足乘车人顺利购票的需求。 ### 1. 车票查询功能 ![](https://oss.open8gu.com/image-20230716114538112.png) ### 2. 提交订单页,选择乘车人下单 ![](https://oss.open8gu.com/image-20231006135057984.png) ### 3. 高铁在线选座页面 ![](https://oss.open8gu.com/image-20231006123150513.png) ### 4. 订单确认页 ![](https://oss.open8gu.com/image-20231006123458176.png)