逍遥游

分析火车票订票系统与微信系统相比的难点

寒假的时候老师布置了这么一个题目,虽然觉得这两个系统没什么可比性,还不如拿淘宝来比。但是既然写了,就顺便发布吧,正好最近博客刚开,需要文章来吸引搜索引擎。^-^

对容错性要求更高

一条微信发送失败或者在发送途中丢失、内容变化不会产生太大的影响,但是订票系统关系着用户的出行、金钱。如果出错,将会导致各种交易失败、购得的车票不正确、交易金额出错等多种严重后果。

对待突发性大流量的能力要更高

对于微信来说,几秒甚至几十秒的延迟是允许的,而这延迟对于订票系统来说是不可以接受的。经历过抢火车票或者天猫双十一的人都知道,一秒钟也能发生很多事,一秒钟可能你要的票就被别人抢光了。面对如此疯狂的请求,服务器如何在扛住高流量的基础上进而迅速准确地处理不是一件容易的事。

记得去年双十一的时候,阿里巴巴的员工晒出照片,显示所有技术人员在前一天熬到零点,就是为了处理可能因大流量出现的错误。如果订票系统的技术员也这么干,估计早熬成人干了吧。众所周知,订票系统每一天的某些整点都会经历一次双十一的洗礼,普通用户、黄牛、第三方,其冲击不亚于DDOS,这真的是“众人虐我千万遍,我待大家如初恋”啊。

业务处理的难度更高

火车票互联网订票系统12306在刚投入使用时,故障不断,引来无数技术人员、非技术人员的吐槽,批评铁道部浪费大量钱做出一个烂系统,可大家都是自以为简单,不懂其中的难处。

前面也说到了,微信的处理流程相对简单,发——收。但是订票系统的业务处理不容易。曾经看过一些帖子,说某大牛吐槽坑爹的12306,放言要做出一个开源的系统送给铁道部.结果一段时间后放弃了。的确,订票系统的难度不是我们想象的那么简单,一个用户的操作会影响一大堆用户,这点微信是不存在的(别跟我提公众号)。

例如,一辆火车从A地开往H地,途经B、C、D、E、F、G。某用户购买了一张C到F的车票,意味着A到D、A到E、B到G等一大堆车票的减少,不仅仅是减一操作那么简单。

当然,可以简单点,划分车票,相邻两地算一张票,那么买C到F的车票就是买了C到D、D到E、E到F三张票。当然了,只出一张票,称为“联票”。

这样一简化,似乎处理起来就没问题了。NO NO NO,票量剩余的问题解决了。随之而来的是另一个问题,用户把中间的票都买完了,而其他人又不需要其他路段的票,这就造成了买不到票和票大量剩余的看似矛盾的现象。于是铁道部(其实早在网上购票之前就)出台了各种不为人知的规定,比如,限制中间站点的票源,隐藏部分票供紧急用途等等等等,我想,写成代码,服务器都得晕吧,更别提攻城狮了。

安全性要求更高

给你一道选择题,选择有很多好友的微信号被盗,还是刚刚买到票的12306账号被盗?微信数据的泄漏从某些层面上来讲是无关痛痒的,即使被侵入,对于多数用户来说,只是闲聊天的内容被人听见罢了,顶多就是冒用账号骗骗钱什么的。而订票系统则是政府所有,被攻击的可能性更高,所涉及的都是公民的隐私。而一旦有人侵入服务器随意修改了数据库,那么后果就是公民的合法权益被侵犯,对政府的信任度大幅降低。

总结

微信一个通讯软件,提升用户数是最难的,技术难度第二,订票系统是技术上的难度远远超出微信。

声明:本人只是对12306的技术难点做一个分析,至于网上流传的花钱太多的吐槽,不做评论。


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com