一个资深程序员看12306(一)

         12306铁路售票系统,这是近两年来难以绕开得话题。在2012年的时候,刚看到谩骂调侃12306售票系统的各种文章的时候, 我是其中的一个,鄙视那么大一笔钱,做出来的是啥玩意儿,并没有细想过什么。后来,当我试着从技术角度来分析12306的时候,却是一身冷汗,感慨于谁没脑子,竟然敢接手这样的一个系统,以至于也有忍不住想为其呐喊鸣冤的冲动,但基于多种原因,最后没有写。时值今年,又到了买票的高峰期,当12306再次成为人们关注的焦点的时候,我又重新从技术角度评估了以下这个网站,想通过我这个群体,以一个资深程序员的角度来说一下我对12306这个网站的看法。

一、它具有重要的历史意义。

先不从技术角度出发,仅从该网站的产生和使用角度来说,这具有划时代的意义。首先,他改变了一个习惯,一个多年来大家排队买票的习惯,跟上了科技发展趋势。当手机、互联网等设备成为大多数人的生活必的时候,该网站也随之诞生了,从这个角度讲,它适应了科技的发展,是一个具有里程碑意义的工程,他必然也会成为中国铁路史上重要的一笔。

二、它的诞生周期太短,上线过于仓促。

        这个话题,得从访问量来分析。作为一个系统来说,中国的铁路售票系统,但就因为“中国”二字,那么他的庞大和复杂性就是世界唯一的,可以载入吉尼斯世界纪录的。原因就在于人口多,多到什么程度呢?可以这么说,目前还没有一款软件敢说在瞬时访问爆发量上敢于和该系统比肩,即便是腾迅、百度、支付宝等这些知名软件,号称以用户量大而著称的他们,最高峰期的并发访问量,估计连这个系统的三分之一都没有,更不用说用户的每个交易都要和钱相关了,一旦涉及到钱的问题,就需要相当高的安全性,这要求每个用户交易细节都要有很严格的处理日志可以查看,更需要将用户购票信息记录入库。那这就会存在一个瓶颈,一个无法逾越的瓶颈问题,当然,怎么解决瓶颈,怎么更好的避免瓶颈,那架构必须要考虑的问题。

记得当汶川地震的时候,无论是联通、移动、电信等的电话,都出现了十几分钟甚至更长时间陷入瘫痪情况。那时候的电话瞬间访问量,有可能能和这个系统来比肩一次吧。从开发周期来讲,用过并知道问腾迅、百度、支付宝发展历史的人,都想一下他们那个是一年就发展好,推出就有这么大访问量的?即便这么多年了,他们谁敢说能抗得住瞬间如此之大的用户访问量?(注意,我说的是并发访问,不是同时在线,支付宝在双11的时候,不是也瘫痪了一段时间么?对于这样的一个系统,从开始研发到上线,竟然才1年的时间,不得不说,这个推出过于急促,诞生周期短的可怕。

三、他的一些缺陷无法避免,一些则不能说为缺陷

很多人说,12306存在大的漏洞,比如说,身份证可以造假,界面不美观,用户体验不好等,对于这些,那是认知的误区。

首先:身份认证不可能不存问题,任何一个国家,都存在有*专有网和民众网,比如说部队有部队的专网,*有*的专网,普通大众使用的是互联网则是通用的,不能把这些融合到一起,试想一下:如果这些都融合在一起了,那这个国家还有那一部分不容易被攻击呢?特别是对于中国这样的大国来说,不可能把*网络系统、部队网络系统和普通用户网络系统连接到一起。既然不能连接在一起,那身份证认证当然会存在问题了,那他就只能根据一些基本规则来识别身份证是否合法了,因此,这个漏洞无法避免。或者说还不到解决时机。因此,黄牛党抓这个漏洞,从技术上来说,那是不可避免的。

其次:界面不美观那很正常,这个网站,本就应该是以访问量和实用为主,而不是为了人们在这上面赏心悦目的欣赏,更何况,美化的界面,那是和流量有直接关系的。对于用户来说,你获取到信息的流量可能只是几兆的流量而已,不知道有没有人这么算过:普通家庭,拉上一个带宽,大概是8M流量,一年大概一千左右,如果同时又1000个用户访问一个系统,这个系统如果并发输送给每个用户的流量在2M(256KB*1024 *8,流量是以bit来计算的,1M 一般为128KB每秒,即128 * 1024 * 8b),那么1000个用户就是2G的流量。而一个普通网吧的流量也就是千兆。上了G的流量价格就不一样,那10万用户,20万用户,1000万用户呢?这个总入口的多大的流量?这个耗子会对大?因此,从这个角度来讲,界面够用就行,尽可能的在满足用户使用的情况下减小流量,那么,目前的12306界面,可以说这个水平已经算是不错了。

四:这个项目的投资相对是比较低

很多人鄙视这个系统这么多问题,但起初投入竟然达到千万级别,后续更是过亿或者过了几亿。感觉一定很多人在这里面黑了不少钱,贪污了。

是不是有贪污我不清楚,也不敢肯定的说就没有,但基于我做项目的经历来说,一个这样的项目,投入低于2个亿,假如是我,我是不会接的,说这可能被笑话。不过我又这样一个经历:一个项目,历时3年,前后投入人力500人,投入超过2个亿,最后能同时并发容纳不到50万用户同时工作,但年收益却能达到将近1个亿。那作为一个这么大的项目,又该是多少呢?要知道,一个项目的产出,不仅仅是研发成本,还要附带有软件、硬件、设计、策划、管理等各种成本,研发成本在里面占用的最多也就三分之一。那么投入2个亿做一个铁路售票系统,又不让人批评,同时不能陷入瘫痪。我想这个要求如果真提出来,估计没几个公司敢接,即便真有能力接,相信这些公司也看不起这2亿了。谁愿意为2亿而背负这么大的风险呢?这样算来,这个项目的投资不高,可以说是相对比较低。这应该也是为什么不是一个大公司开发出来的原因吧。

五:这个项目整体架构存在缺陷,考虑不足

不过,这个项目既然作为一个大项目,是为了为整个中国人民提供方便快捷的服务的话,就要站的高度高一些。审视这个项目,作为一个程序员说,我们应该同情他,但作为一个资深程序员来说,我认为,这个项目的设计架构存在一定的问题,风险预估也明显不足。比如说,网站的架构,就不应该仅仅是12306一个域名,而应该分区域架设多个域名,每个域名连接不同的平台,也即把原本是一套的平台,拆分成多套来部署,并设计每套之间的联系。这样,就不至于所有人登录同一个网站了,也就分散了访问量了,比如,我们有叫12305.西安的,有叫12306.广州1;12306.广州2;12306.北京1;12306.北京2;12306.上海1;12306.上海2;等等的。当然,因为我并不了解整个铁路售票系统,具体里面的业务复杂度也难以想到很多,因此,这只是一家之言罢了。

 

至于其他不可解决的缺陷,也是有的,比如票和人供不应求的局面,那必须得靠运输能力本身才能解决。

一个资深程序员看12306(一)

上一篇:《Apache MINA 2.0 用户指南》第十章:执行者过滤器


下一篇:数据结构---基于邻接表表示的图的实现 DFS(递归和非递归), BFS