鉴于用真实生活的逻辑思考程序设计:火车订票系统有感(菜鸟先飞)

想像一下,只有一家寺庙来舍粥,但天下穷人都要来喝一碗或几碗(黄牛)。总不能谁厉害谁先喝吧?解决思路无非是两个
A:排队
B:开各地分寺庙+排队

显然都在一个地方排队是不太现实的,绕地球半圈的喝粥长队肯定也是叹为观止的,而现在这个订票系统显然就是这个状况。

思考?为什么没听说大家一起上QQ就有上不去的?难倒是天下QQ号码没有天下火车票多?嘿嘿。

先说说排队。大家都有过去银行办理业务的经历吧,反正我父母那一辈的人都是去柜台办理。各种卡他们还是玩不转地,于是银行就学习医院的做法,在门口设立了一个自动挂号机(突然想到如果全市都是老年人,是不是连这个号黄牛也要分一杯羹?哈哈,请原谅我的跳跃思维:-))于是忠实的柜台营业人员只认号码不认人了。妙哉,可是问题又出现了,现在只解决了秩序问题,不打架了,但是还是没有解决长队的问题。

随着互联网安全的日益完善,现在很少听到网络风暴这个词了,大量的package在网络层拥堵,造成网络设备的不堪重负,服务器的应接不暇,正是这些原因才造成用户体验上的网页无法打开,无响应等等现象。可不是,大家一起伸手要粥,和尚累死不说,你端着粥碗的手根本就拿不回来,最终只能人仰粥翻。我们可以在数据链路层划分vlan,可以在网络层通过ip协议让数据分门别类,但我们的程序应该怎样设计?天下的道理都是一样的。(呵呵,面向对象思想真伟大)突然想起我在北外考试的情景,大家分组,每组20个人,进入考场,这样便于统计人数,也好管理,只记组数就ok了。那其他人不能无止境的等吧,已经进入考场的人不出来怎么办?好办,拿到线程的人也就是进入考场的人,必须在10分钟内结束交易,否则对不起,从新排队。(这难倒不人性化吗?你前面占一个人磨磨唧唧不办完事,后面人不哄她?)实名制,让每个购票的人拥有唯一的id,也就是说,当我输入id,点击我要买票的时候,已经可以挂好号了(带属性:当前第几组,还有xxx时间(倒计时)到这组,请等候买票)。不用急,因为服务器完全有足够的能力在10分钟内处理完当前组中所有交易,而且会人性化的设定提示音提示该买票了。一定要注意哟,否则又要从新排队啦。这样就能从根本上保证至多20分钟就可以完成买票的事情

新的问题又出现了,进入考场也不能随便坐啊?腾讯的斗地主又给了我们新的启发,我们只能找有空位子的桌子玩吧?对程序会自动将当前线程分配到有余地的组中(需要分布式系统的支持)。至于交易成功,但是到时候又出不了票的情况,完全是骗外行的鬼话。事务难倒没有隔离级别?交易成功后应该自动提示可打印凭单,作为日后扯皮的法律依据。而且这条交易记录是拥有唯一性的,也就是说这张票再也不会卖给别人,因为交易成功了,数据库应该有信息可查,理所应当给人家出票。否则双倍退还票款金额(有点狠,但不这样就不能体现以民为本,铁道部想不吃亏也行,拿出诚意来出单。)当然了,银行的接口要给力啊,他要是故意掉链子,谁又敢谴责你呢?(不会需要一个第三方的铁路宝吧?)

关于防止黄牛:电话购票本意是想方便不会上网的民众,但这块鸡肋却大大方便了黄牛,不知道是故意的故意的还是故意的呢?想个办法,(春运或高峰期间取消电话预定吧,反正又打不进去,还有很多骗子电话)。到车站去买票吧,反正黄牛已经拿不到票了,(除非有人故意不放票,对于吃“牛”肉的人,司法立法部门要予以酒驾一样的打击,才能见效)。对于网络购票者,要对其判断id之外的其它属性,不能让其同一个id购买同一天的其它任何票,但退票后例外。还应对其ip进行判断防止某牛拿一摞身份证在一个地方操作,快速的换个网吧也没意义,因为延误时间,票早卖完了。对于实在不会操作的人,只能窗口买票,但是有代价的,必须本人,只卖一张。窗口售票应优先于网络购票(春运期间禁止异地ip购票,没办法了只能这样顾全大局了)应推迟窗口1小时放票,让排了一夜队的人有机会买到票,由于是一人只有一张且是本人购票。且只能一次。所以不会全卖光(除非工作人员徇私,严惩之)。放票后退票原则应在火车开走后。防止黄牛二次倒卖。退票后扣除相应款项。且下次购票还要扣除相应的信用分数,信用分数达到一定分值,加收大量服务费,曾加其退票成本,从而杜绝倒卖。对于放票期间瞬间的高访问量google和Tencent是怎么作到的我还才疏学浅,但我想多庙放粥的办法还是不错的,平时铁道部自己各个省市按照需求的统计合理分配服务器(够用就好)高峰时,可以租用类似腾讯的设备(要给钱的哦,要么做广告也行哈),这样可以极大节约成本资源。(很多人一定会想,要是QQ上有买票功能就好了,是,我想腾讯这样的雄厚企业要做这个一定会做的很好,可是有些问题我们这些搞技术的永远也不会想通,否则也不学技术了。)

总之,就是技术加制度,但重中之重还是制度。没有相关人员的秉公无私,再好的技术也是浮云。压着不放,助黄牛,什么技术都没辙。

 

       胡言妄想之,看到腾讯报道辛辛苦苦的民工回家连夜排队也买不到票,心里无比酸痛。思路在2个小时内也不可能完善,肯定有许多荒谬错误,同行们别骂我,看在我一个忧民的码农的份上。

 

阅读更多

更多精彩内容