如果我是 12306 的架构师,我保证它不挂!

一大早上,N 多的技术公众号发文章称,12306 又挂了。使用 Github 上 2.3K 的抢票软件,我不到 3 秒就抢到票了。。。

类似的话题,一大堆技术号在发,好像在吹响胜利的号角。

不管你用不用抢票软件,都有可能抢不到票。因为票就那么多,有人抢到就有人抢不到。

除此之外,还有不少技术号称,只有程序员才知道 12306 的技术有多难。我个人就是一个程序员,以我个人的经验来看,12306 的技术其实是走歪了。

所以,我发了一个朋友圈,不少人求教思路,于是,就有了这篇文章。

我们都知道,一辆火车,每一天都有 N 种卖法。多数人的思考和实现方法都是动态计算车票。动态算票有多难?

假设你买手机,库存 100,卖出去一台,库存就是 99。但车票不一样,,他是可以买半个的,比如 Z35,北京到广州,一共停 5 个站:北京西,郑州,武昌,长沙,广州。

如果硬卧有 200 张,并且全部没有被限制,随便买。有人买了北京西到郑州的一张票,12306 数据库的记录就要变,当天 Z35,北京到广州剩余 199 张,郑州到广州剩余 1 张。

如果有人又买了郑州到长沙的两张票,12306 数据库的记录就要变。当天 Z35,北京到广州剩余 198 张,长沙到广州剩余 2 张,北京西到郑州剩余 1 张。

以此类推,每天有那么多班次,那么多人,那么多流量,想不挂都难。

其实,12306 之所以是这么难,我认为它的技术线路走歪了。

第一是,我们不能把买票变成抢购,因为它需要动态计算余票。因此,我们需要把预订改成预约,预约后就付款,付款后,后台慢慢的出票,再计算余票。这样就分流了,没有票的就发短信通知,购买失败。

第二种是,借助大数据。预测每辆车每天每个站的预估票数,提前生成票数,然后再上架。对,和买商品一样。我上架多少,卖多少。如果有没有卖出去的,或不够卖的情况,后台在计算一遍,把没卖出去的调整站间票数,再次上架销售。

这两种做法都是避免,每卖出一张就算一次余票,和剩余卖法。减少服务器的压力。

如果不从根上解决这个问题,每年你再增加动车,新开高铁等,系统实时计算的需求就越来越多。服务器始终是扛不住的。

这还不说,线上,线下,电话预订,第三方刷票软件等的疯狂流量。你说你能不挂吗?

说实话,过年不一定要回家,出去旅游也是一个不错的选择。平时出去旅游,到处都是人。过年,人少的时候,正是旅游的好时机。

最后,送 3 个抢票软件的。

12306项目地址:https://github.com/testerSunshine/12306

py12306项目地址:https://github.com/pjialin/py12306/

12306bypass (分流抢票)傻瓜式操作,链接: https://pan.baidu.com/s/1fxNOHHytcfutEP8YgoSZ6g 提取码: 8h7k

如果我是 12306 的架构师,我保证它不挂!相关推荐

  1. 假如我是核酸系统架构师,我会...

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  2. 如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?

    今年火车票网上售票的情况大家都见到了,如果让你来设计该订票网站,你会如何设计才能应对如此大规模以及高并发的情况呢? 邵辉 13 票 806 列车在线订票系统的业务逻辑比较简单,不用多说.可能的瓶颈有两 ...

  3. [转载]如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?...

    转载至德问网站.链接地址为:http://www.dewen.org/q/963/?ts=edm20121018&e=MzAyNjY5NzU3QHFxLmNvbQ%3D%3D 今年火车票网上售 ...

  4. 职场中怎样评估系统架构师的成绩?

    优秀的系统架构师是保证软件系统强大生命力的核心人物.专业架构师能够帮助公司全面研究现有架构和设计模式.评估系统设计的优缺点和可能存在的风险,通过一系列的专题指导和具体案例帮助公司掌握先进的.成熟的设计 ...

  5. 什么是软件测试架构师?

    转:https://www.cnblogs.com/henryhappier/p/3216921.html 软件测试架构师是一个新职位,但确实是一个非常必要的职位,主要有几点: 1. 根据V模型.广义 ...

  6. 软件测试架构师——众里寻她千百度

    "众里寻她千百度,蓦然回首,人却在灯火阑珊处",还算幸运.而对于"软件测试架构师", 众里寻她(他)千百度,那人何在?难以上青天. 软件测试架构师是一个新职位, ...

  7. 架构师须知97件事精华版

    原文 摘要 描述 17.    Business Drives   by Dave Muirhead [业务决定技术] 为了建设一个系统,架构师必须把技术部门和业务部门团结在一起.但要明白二者的立场是 ...

  8. 什么是软件测试架构师!【一文了解系列】

    软件测试架构师是一个新职位,但确实是一个非常必要的职位,主要有几点: 1. 根据V模型.广义测试概念等,(静态)测试的越早,发现缺陷越早,越有利于产品的质量.加快产品开发周期.降低企业的成本.更重要预 ...

  9. 97条架构师必须掌握的知识

    1.      Don't put your resume aheadofthe requirements by Nitin Borwankar [需求先于履历] 身为架构师要平衡客户.公司和个人的利 ...

最新文章

  1. 与工作流关联的服务器发生意外错误
  2. python安装的模块在pycharm中能用吗_pycharm内无法import已安装的模块问题解决
  3. 服务器操作系统百度文库,Linux操作系统配置服务器的方法及实现_百度文库(6页)-原创力文档...
  4. 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余
  5. java视频流传输_目前在Web浏览器中流式传输实时视频的最佳做法?
  6. halcon使用直线标定板,标定相机内参代码
  7. java中n次方怎么表示_java如何计算一个数的n次方
  8. sql安装弹出sqlcmd_SQL Server中SQLCMD实用工具概述
  9. Python MySQL操作
  10. 【数学】海 盗 埋 宝 pt.2
  11. 注册表操作,reg脚本简单编写
  12. python实战演练(二)三级菜单
  13. 对中国国家气象局进行api数据分析
  14. ECCV 2022 | 超越MobileViT!EdgeFormer:学习ViT来改进轻量级卷积网络
  15. matlab用RNN预测股票,使用RNN预测股票价格系列一
  16. 论文框架和目录一样吗_看黑板,划重点!速来get论文写作10技巧
  17. 报错说 filename 不能写成 [name].[chunkhash:8].js ,改成[hash]就可以了
  18. linux inode使用率过高,解决inode占用过多
  19. adobe全系列最新安装教程
  20. 芯科EmberZNet_ZigBee3.0_EFR32MG开发日记三:开发平台搭建3

热门文章

  1. 见义不为,非勇也——说“义”“勇”
  2. python去除字符串两边空格_Python去除字符串两端空格的方法
  3. python contains魔法方法_python魔法方法
  4. jmeter断言操作——响应断言
  5. python抓包遇到Status 400 - Required String parameter ‘params‘ is not present错误
  6. txt转换pdf格式转换器的操作步骤
  7. Windows服务器定时重启设置教程
  8. Eclipse 官宣: 替代 VS Code!网友:随便替,反正两个都不用....
  9. vivo手机系统android9,vivo手机更新安卓9.0!4款产品尝鲜:有你的吗?
  10. 传统机器学习笔记6——回归树模型