非原创——
12306的难度不是你想的那么简单,对比一下12306与淘宝系统开发技术难度就知道了。首先阐明一点,淘宝技术比12306强大很多倍,接下来我们用详细的数据和案例来说明。
先说秒杀活动和抢购
淘宝平台现在的专题秒杀活动,如淘抢购、聚划算等活动,部分由于是超低价抢购,所以参加的活动人数非常的多,部分单品的抢购人数可能会突破百万人。拿前几年的一个数据,2013年圣诞的时候,天猫放出1.5W个天猫魔盒,所有商品在19秒内被全部抢完,此外还有一些品牌的手机,因为只在官网或者天猫旗舰店限量供应。
今年暑期,某品牌手机刚上架销售,当时限量5000台手机,我蹲守在电脑前面希望能抢到一部,结果就在时间刚到的那一秒,一刷新就卡住了,再刷新的时候,就显示已经售完。这样的情况相信很多人都经历过,这其实跟12306上的抢票是一样的。淘宝在早期也一度为解决用户拥挤的问题而想破了脑袋。
要知道,淘宝拥有各种自主研发团队:服务器、交换机(网上可以搜索到淘宝公开的绿色服务器开放标准);Web服务器(Tengine)、Java语言虚拟机(JVM taobao版)、操作系统(Linux Kernel taobao版,yunos手机操作系统是阿里云的,暂时不计入)、数据库(MySQL内核 taobao版,google和facebook也有自己的版本,HBase淘宝版、还有自己全部从头开发的OceanBase)、负载均衡器(LVS,LVS始创人就在淘宝,担任研究员)、Java运行容器(Jboss,其创始人之一,王文彬,也在淘宝,担任副总裁)
此外,淘宝的技术团队为了解决用户拥挤的问题还自己开发了非常多的开源项目和一些中间件,像高性能Java通信中间件HSF、分布式数据库中间件TDDL、异步消息系统notify等,但就是这样的淘宝,还是在流量高峰期出现卡顿的情况。
淘宝这么强大的技术还是不能解决流量高峰期的拥挤感是为什么?
第一:事物发展需要遵循物理原理,单个服务器所能承受的运算能力拥有上限(千万别提什么超级计算机,那个不是拿来做服务器的,你也用不起),所以必须使用集群服务器,但这就又引申出第二个问题。
第二:考虑现实经济效益,用无数多个服务器组成集群,确实可以解决这些问题,但是要知道12306和淘宝的流量都是有一定规律的。在春运期间,网站的峰值流量可能是平时的上千上万倍,如果部署过多的服务器,将会造成这些资源在平时里的极大浪费。在这一方面,淘宝会在流量不大的时候,将多余的硬件和带宽用来做云计算。
动态库存
淘宝秒杀和火车抢票,其实都要考虑到一个动态库存,对于每一个商品(专业的人管它叫SKU),在每一产品被卖出去之后,库存数就会减1。如果一个库存几万的产品在几秒内被抢购完,可能实际产生的请求数已经几十万个。
而在处理这些请求时,不是一个简单的http请求,服务器需要做:检查是否恶意访问、请求时间排序、核对用户资格、生成订单号、库存减少等等内容,这每一件事都要花费毫秒级别的时间,这些操作加起来的时间可能是接近1秒级别的,但由于淘宝的服务器比较强悍,而且采用了分布式和集群技术,结果比1秒理想一点。但即使有1万台服务器,也不能把这个时间稀释成万分之一秒,因为,商品只有一种,比如它有一万个库存,对应的数据库记录只有一行,所有的交易请求都要到这里来处理。
再来对比一下淘宝和12306的产品区别
淘宝单个商品的属性基本上也就是那么几种,但是12306的车票就不止了,以北京西到深圳北的G72为例。北京西到深圳北一共有17个站点,3种不同类型的座位(商务、一等、二等)。
那这里有多少种票呢,若从北京西开始出发,后面需要经过16个站点,每到一个站点的票,就相对于是一个独立的商品。在第二站上车的,有15种不同的下车可能,在第三站上车的,有14种不同的下车可能,以此类推就有了136种方式,再算上三种不同类型的车票,就有3*136=408种不同类型的车票。
而在处理库存时,也并没有大家想的这么简单,如果一个人从第一站上车,到第二站下车,这样就需要在第一到第二的商品库存减一,同时第一站到后面的每一个站台都需要减少一个库存,一共需要减少16个商品的库存。
再如果这个人是从第一站到最后一站,则第一站到后面16个站点都要减一,总计就要减少16+15+14。。。+1=120个。而这些数据还都是理论上的数值,现实中还要考虑铁道部对于不同站点分配的车票数。
在淘宝上买一个商品,需要减少对应商品的库存,但是卖出一张火车票,可能就需要对数十个商品的库存做修改。
此外12306的历史包袱我们也不能忽略,它后面还需要考虑票池、电话售票、火车站售票、代售点售票等传统服务。
说了这么多,并不是笔者一味的捧12306平台,只是不少人确实对其还存在很多的误解。作为一个民用的系统,12306的提升空间还非常的大,PC端的页面若采用太多JS或者CSS样式都会大大加重服务器的负担,但在APP上其实确实还可以好好修改一下,毕竟整个系统的设计风格确实是十年前的审美。
说回来还是钱的问题,像12306这种网站后台的服务器集群不是想象中的放几台服务器就搞定的,从服务器架构到软件部署以至于数据库的开发这些过程是一个海量的工程,当然也是一个需要巨额投入的过程,网站好编写,但是与票务系统,支付系统乃至于铁道系统的对接显得格外的重要,任何一个环节出问题都会造成购票过程的失败,双十一的淘宝在最初两年系统在支付环节就出现过问题,这还是在阿里云多年的投入与研发基础上才能基本保证海量的数据交换。那么12306的系统和淘宝类似但是春运购票期间的数据量应该超出阿里云很多,也许继续投入海量资金砸进去能解决问题,但是这么干真的经济吗?资本的投入是要回报的,在合理的资金投入情况下又想保证购票过程的顺利这在规则上进行改变,比如延长车票的预售期,铁路部门提前与那些外地务工人员集中的单位进行沟通,做好摸底工作,尽量把购票高峰均摊到平时,这样也可以极大的缓解高峰时期网站的负载量,总的来说就是科学的管理可以改善此类网站高峰时期的运行环境,这需要考量铁路部门的管理水平了。
本文来自投稿,不代表天一生活立场,如若转载,请注明出处:http://tiyigo.com/baike/41281.html