说些大家对于 12306 购票时没有考虑到的一些业务点,或者存在误区的地方。
背景:假设,有一站列车,途径北京南、济南西、南京南、杭州东。
查询站点对应的列车车次信息。
- 你以为:通过搜索引擎技术 ElasticSearch 技术解决,因为涉及大量的查询条件。比如:车次、车组、出发车站、到达车站、出发时间等。
- 实际上 :当海量并发查询时,ElasticSearch 的并发能力以及资源占用情况来说,并不适用。而且,大家如果仔细思考,发现这些查询条件都是可以通过类似于 Redis 的缓存技术存储,并在内存中进行组装。
买一张北京南到南京南的车票。
- 你以为:只扣减北京南到南京南单趟的票。
- 实际上:会扣减北京南-济南西,北京南-南京南,济南西-南京南的三趟车票。如果其中有任意条件不满足都不会购买成功。
买一张济南西到南京南的车票。
- 你以为:按照上述逻辑,如果通过软件恶意刷票,只买济南西-南京南的票,北京南-杭州东是否就买不到了?
- 实际上:每个站数之间的数量都有规则。虽然放票时间都是一致的,但是优先大站之间的票量,避免因为大量用户购买了中间站的车票导致始发站和终点站的购票困难。该问题通过动态放票解决,比如刚开始放票时对小站之间仅开放少量票,大站之间放出来多数票。如果后续接近发车时间,再开放小站间的车票。
当然,业务以及技术上的难点和亮点并不止于这些,更多的信息可以通过代码以及 12306 的使用上进行发掘。
在 12306 铁路购票系统中,包括会员、购票、订单、支付以及网关服务。
另外,为了方便大家部署,给大家抽象了一个聚合层服务,实际部署服务器或运行时,仅需启动网关和聚合层服务即可。
开源不易,右上角点个 Star 鼓励一下吧!
如果大家想要实时关注 12306 更新的文章以及分享的干货的话,可以关注我的公众号:马丁玩编程
。
使用过程中有任何问题,或者对项目有什么建议,添加好友备注:12306,和 2000+
志同道合的朋友交流讨论。
前端目前正在开发中,还有部分业务及细节处还在调整,完成后统一给出控制台操作手册,请耐心等待。
1)车票查询功能。
2)提交订单页,选择乘车人下单。
3)高铁在线选座页面。
Q:面向人群是学生,但是里面这么多的代码设计方案,学生能看明白么?
A:文档中准备了两部分资料,一部分是讲解技术实现细节,通过该部分可以很好掌握核心技术;另一部分是讲如何从零到一实现系统;通过两种文档结合,可以很好吸收 12306 系统中的设计。
Q:如何把 12306 项目写到我的简历上?
A:马哥在文档库最后给大家提供了 12306 写到简历上的亮点、难点以及解决方案。其次,通过 12306 去面试的小伙伴的面试题也会进行汇总,免费供大家学习使用。
Q:工作几年的有必要看 12306 这个系统么?
A:我觉得有必要,已经工作的同学虽然没办法把这个项目应用到简历上,但是系统中好的设计却是可以代入到自己的项目中,提高自己项目的亮点以及难点。
共计 100+ 核心技术文档!帮助你深入了解以及快手上手 12306 系统。
项目中的文档包括三部分,快速开始、核心技术文档以及从零到一开发。可根据自己的兴趣选择深入了解核心技术或从零到一复刻系统。