【铁道部网上购票系统优化方案】之拙见

 

今天早上开电脑,就发现登录购票系统时,提示“登录用户过多,请稍后尝试”,遂联想到前段时间购票系统瘫痪,引起社会不满,然后铁老大就发言正在解决。原来这就是所谓的“解决方案”,把哥给恶心到了,不知道是哪个外包公司拿到了这个项目,想到这个馊主意。然后便向铁道部发了一封建议邮件,邮件内容跟我接下来的方案大致相同。

...

 

 

由于只是一时心血来潮,并未对自己的想法进行缜密的验证,只是提出自己的想法,大家有什么好的方案也可以向铁道部反馈。接下来说说我的想法吧。

      
      前段时间,由于登录用户过多,造成了网站瘫痪,引起了社会各界的关注。铁道部也在短时间内作出了回应,将优化购票网站,避免瘫痪。今天一早,当我登录12306的时候,提示“登录用户过多,请稍后登录”的信息。如果说这就是所谓的整改方案,我觉得是一个不可取的。该方案只是治标,并未达到治本的目的。控制了登录用户数量,但是并没能让绝大多数用户能够正常登录进行购票。在此方案上,也会让登录的用户感觉到不公平,也许一个用户一直在进行登录操作几个小时仍没有进入,但是一些刚操作的用户,由于用户退出登录,恰好能够进入到系统中,进行正常购票。更有甚者,一些“黄牛党”或者别的恶意操作者通过一直登录在系统中,不退出,造成整个系统一直阻塞在那里,使资源得不到更充分的利用。

       对以上描述的问题,我觉得可以采用排队系统和轮转机制进行控制。比如,当用户因为登录过多,而不能进入系统的时候,能够进入到一个“队伍”中,通过排队等待进去登录系统。此时界面上可以显示当前排队人数,及该用户目前处于队伍中的哪个位置,同时,界面上可以有一个“退出”队伍的按钮,用户可以随时退出,当然,重新排队的时候必须得重队尾开始排列。这样可以解决用户因为网速或者“时机”的原因产生的“不公平待遇”。轮转机制则是限定每个登录用户的登录时间,例如当用户登录10分钟或者15分钟后,强制其下线,让其他用户能够进入系统,这样即可以解决“恶意操作用户”占用资源的问题。

     

     对我提出的两种方案,算法和实现上有一些小的想法,或许效率上并不完美,那么就权当抛砖引玉了。

    排队系统算法,我觉得可以采用二维队列实现(具体情况需要根据用户使用数量进行分析)。我们假定用户不能进入系统的时候就会来到“队伍”排队,一个队列可以排列1000人,如果第一个队列A1中1000个人已经排满,则继续排下一个队列A2,以此类推,队列一直排下去,直到排完所有人的队列An。同时,每个队列也作为一个元素,排列到上层队列B中。B中也按顺序进行排列,A1排在B队列的第一个,然后A2,以此类推到An队列。为什么采用二维队列而不使用循环队列,主要是因为整个元素的数量是可变的,过于频繁的对循环队列进行增删及队列拼接操作,效率上会受到极大影响。而采用二维队列,每个用户作为一个对象,当新增一个用户时生成对象,用户退出队伍(自己点退出按钮和进入购票系统两种情况),撤销对象,该方案更具有可行性。

       轮转机制的实现,我觉得采用用户登录购票系统后,生成的session时,开一个线程进行倒计时,当时间达到后,撤销session,释放资源,并强制退出系统。

        以上拙见谨为本人闲暇之时所想,考虑可能不会太周全,希望大家把好的建议直接发至铁道部。当然,这只是从软件上来解决当前问题,更希望铁道部能够更新硬件,使用更多更好的服务器,来增加数据并行处理能力,让更多用户能享受到更流畅的购票流程。

       最后,春运购票关系到民生问题,大家的出发点都是好的,就是希望在外的每个同胞都能买到票,回家过个好年,来年能够准时出发不耽搁工作。希望今年我们的愿望能够实现。

你可能感兴趣的:(优化,算法,工作,session,服务器,联想)