铁道部网络购票网站存在的一个大问题----一个大大的事务!!!

来源:互联网 发布:安徽师范大学网络教育 编辑:程序博客网 时间:2024/04/29 22:30

原来的帖子《铁道部网络购票网站存在的一个大问题----一个大大的事务!!!》放到这里:http://blog.csdn.net/dragonimp/article/details/7192777

这几天的评论里面,大部分是比较理性思考的,而也有部分朋友不理解全文就进行批评。首先非常感谢大家的关注,但也希望在评论前认真地阅读文章内容,冷静思考

这里对原来帖子的观点和思路,以及大家的评论里面我个人比较赞同的内容重新做了整理,内容如下,欢迎大家拍砖。

 

关于铁道部购票网站业务流程的问题分析和改进建议----可减少大量并发请求

 

  • 现有购票流程问题

        优点是:先锁定票,然后再支付,确保客户支付成功都有票,“客户满意度高”。 缺点很多,个人觉得这个流程问题也是造成目前网站不堪重负的原因之一,具体说明如下:

         1、  票被锁定,但实际未销售。因为支付过程存在不确定因素,可能因为银行系统问题或者本人操作原因或者其他各种原因,没有支付完成。更有可能有人给你锁定了却不支付。

        2、  对于传统渠道,只要系统实际票没售出,他就可以出票,但现在一旦余票全部被锁定,此时虽然实际还有票,但现在他出不了,而且他无法跟网上一样在队列等待,他只能回到队伍重新排,但轮到他的时候票可能还是锁定状态,他根本无法买到票。在我的原帖里提到这个事情,我亲身经历了在火车站被告知票全部被网站锁定了,去网上还能查到很多余票,并且经过半个多小时经过很多次的订单提交后终于买到的情况。可以想像一下,在我去火车站的那个时间点,其实还是有很多票的,如果那个时候给我票了,我就没必要去网站又贡献了那么多点击量。而且这个时候我已经骂娘无数次了,你明明有票,我这都来排到队了,干嘛不直接给我买啊。

        3、  因为支付结果具有不确定性的原因,没有锁定到票的人,就想尽办法来刷新等待别人没支付成功的退票,对于买票的人,也很浪费时间和资源,需要耗着等,对于大部分人来说,本来几分钟完成的事情,现在买不到的话就可能要好几个小时甚至更多。更重要的问题是造成了大量的访问,平白增加了造成大量系统请求,浪费系统资源。而不管买不买得到,本来每个人买票就访问一次就好了,结果现在不知道要访问多少次了。我猜这也是12306网站访问量已经到达14亿的原因之一。

 

  • 建议的流程及收益

          这里的核心思想就是想办法把现在的访问量尽量减少到每人一次的话,那算下来访问量将可能少掉几十倍。而经过简单的流程调整就可以达到这样的效果,提升性能,减少访问量,收获会比任何海量设计都来得容易,实在。流程优化说明如下:

         1、  基本思想:去掉锁定功能。在下单后进行支付,支付完成直接出票,出票时如真的没票了,那就退款。(看到这里别急着评论,请继续往下看完,看完再客观思考一下利弊,谢谢。俺实在没有时间重复解释每条评论,很多没看完就反对的,大部分可能是站着说话不腰疼的----自己可能根本不买票。可以想象一下当年没准也有这样的提案但被某些人一刀否决的场景)

         2、  提前支付:前面的下单和支付过程可以提前完成,这个可以根据情况定,但由于这个过程是提前的,所以大家完全没有必要在一个时间点进行,于是系统压力就分散了,并发需求大大下降。大家也可以从容支付,不要数着那45分钟的时间来完成。

         3、  批量出票:在遇到秒杀情况(大量抢同一个车次的情况),出票则可以考虑批量出,也就是收集所有已经支付的订单,按照一定的规则(时间或者有人建议的抽奖的方式都行)进行分配,这个过程处理简单,无论有多少请求,因为是在后台处理,相信性能都没有问题。

         4、  批量出票2:下单时可以做个跟银行账户金之类的或股票之类的“挂单”,你支付完钱,就可以把这个单子挂着,系统一旦有票,一旦轮到你了,就给你成交,也就说,你只要交完钱,只要你愿意,你可以把这个订单留着,等着系统给你出票了,但你如果提交得实在太晚,都没有票也可以告诉你,你自己撤单,把钱退到你自己在网站的“账户”下,可以接着下单。(这个方法有些网友的评论也提到了,我觉得很好。

         5、  及时退款:由于存在支付完但没票的情况,所以必须能及时给人退款。考虑银行应该都提供批量转出(退款)借口,第二天或第三天即可转回客户帐。典型的比如支付宝的提现功能,好像就是第二天到账(现在还看到一个2小时速体现功能)。而这个过程因为也是批量文件交互,也不存在大家担心的流量啊资源什么问题,这是银行日常问题的业务之一,性能更不在,也没有增加什么成本。而铁道部如果想要实现及时退款,我想他不可能输给支付宝吧,我想这不是技术问题,而是政治问题。

        6、  这个流程可以得到的收益就是,每个人只要支付一次,提交一次订单就不用操心了,不管买不买得到,答案在提交的时候就已经确定,也不需要等待,在网站上耗着,从系统性能来说,那就是可能减少了几十倍的并发访问需求,系统整体可用率得到保证。但要付出的一个代价就是在秒杀情况下,可能需要退款,这就会造成大家的质疑(帖子后面的留言就能看出来了,很多人没看清楚全贴,就在那边骂了),但如果及时进行批量转出不消耗资源但又能快速(2小时)退款,这个问题解释清楚也许大家也能支持。

 

对比两个流程图: