zoukankan      html  css  js  c++  java
  • 个人认为12306解决危机的方法

      小弟很菜,只求轻喷……
      12306这个网站的名称近年已经压过了阿理、腾讯这些互联网大佬们的风采了。虽然是它的侧陋之气,但是也在一定程度上说明大家对它的关注程序以及其性能对老百姓的影响程序。
        说起互联网的“抢”,我第一次接触是在抢小米的时候,我自己用的是小米1s,但是,我没经历“抢”,当时运气好的原因。但是,后来帮同事们”抢“的时候 ,就出现问题了,服务器无响应,或者如近来小米直接给了你一个不没有”抢“功能的愚弄大家的页面,也就是,让你等待,等待完了可以点了,点了之后还是这个等待,debug了一下,发现,根本就没有网络传输,呵呵了~~。当然,说上面小米的事情,只是在说“抢”东西的时候卡,是互联网之常情。
        前段时间也看见一位前辈写的12306的复杂的无奈的架构,作为一名小菜,我不和大家讨论分布负载,内存查询这些牛逼的东西,据说,这一次12306也请来了阿理等知名公司的技术团队做支持,说明,在提高性能上已经发挥到一定程度了。
        但是!为什么用户还不满意呢?为什么还是怨声载道呢?这种程度的怨声载道历史上从来出现过,就连当年的vista,大家也是说没有xp好用而已。其它的第三方软件或者系统就更不用说了。归根到底,这种怨声载道的情况,按照剧情是不应该发生的!说白了,还是12306没有做好。
        那么12306哪些地方没做好呢?“小雨们”请不要骂我,我也是程序员,深知你们的不易!但是,确实是没有做好,准确的说,是UI没有做好。一个好的UI设计师,能帮助程序弥盖住各种bug,各种不合理情况,当然,也能帮助机器弥盖各种性能上的不足。以前老的windows开机是光标在那里一直闪,等待系统加载完成后进入系统,用户在等待的时候总是异常的恼火与不爽,现在,看,都改用动画了,现在还有哪个系统开机的时候不是显示动画呢?另外一个,就是进度条的发明,没有进度条,你却让用户干等,多数情况下,会受到用户的吐槽,甚至用户中途out,比如,实在不想等了,直接强制关机重开,实在不想等了,按f5,实在不想等了,终止进程。
        下面说理想的解决方法。我高中那会儿,应该是在09年之前,wow异常火爆,当时wow的服务器也承载不了这么多人,而代理商直接了当的戳中要害——排队!排队就是今天的主题!那个时候,也没听谁说wow的服务器垃圾或者wow垃圾,大家排队的时候,不用别人提醒,都能理解服务器的承载量是有限的。what?他们可以理解wow,为什么就不理了成千上万乃至上亿的瞬间访问量的12306呢?差别在于,一个告诉他们,前面还有多少人是否继续排队——实时参与,而另一个,则是让他们的浏览器卡掉——不知死活!
        相信大家看过之前那位前辈所讲的12306的原理的时候,也应该可以理解,12306花了大把心思来加快那条生产线的生产速度,但是,如果他们真的动用了阿理等技术团队,那么只能说是硬件瓶颈了,因为,12306总不能为了几个假期的高峰,自己搞个大型的计算中心啊,阿理可以给他技术支持,总不会把自己几千台服务器给他吧。难道无解了?怎么可能无解,人类的世界从来就没有这样的剧情!
        速度提到了极限还无法满足用户的原因在于,12306非要把用户塞到生产线中!如果之前那位前辈说的没错,用户下单了之后,服务器要查询各种数据库的表,进行各种操作,其复杂性,独立性,互斥性,无一不影响着其它用户,无一不影响着整个服务器的业务流程。重要的是,你把用户绑在这个里面了,他们死不如死啊!
        现在不管是ajax还是websocket或者是第三方flash等插件,都满足了s2b的信息推送!
        费话不多说,原理讲得多了都是扯淡。
        话说,我希望我下一次抢票的时候,会出现一个窗口,告诉我我前面已经有多少人在排队,而且那个数据一直在减少(每处理一个,给成千上万的人发通知不现实,可以在距离我越近的时候,刷新的速度越快,比如我前面还有10000人排队,还剩下10020张票,我就每隔3秒刷新一次,如果还剩下10人,那么我就500毫秒刷 一次),当然,说我前面有10000人排队,我还真不信!这个时候,处理票务的服务器们要做的事情恰好相反,以前是越快越好,而现在,则是不能太快,不然,2秒内我前面10000人就被处理完了,我还没收到通知,然后票丢了……。
        总的来说,强制排队,每个人给一个排队超时时间,时间过了,服务器就不等你了(你在车站买票的时候睡着了,叫不醒了,后面人还站着干等么?),处理下一个,一旦排队完成,轮到我了,我的定单便会被处理,完成 之后 ,提示我成功。而服务器要处理的用户一直在其能力范围内。这样,直接把挤死人的一分钟变成了十分钟,一个小时,五个小时。而且,用户开着浏览器,排队排个几分钟,哪怕是一个小时,能一直看见自己前面还有多少人,后面还有多少人,还剩下多少张票,就相当于花钱雇了人去车站帮自己排队买票了,都这样了,幸福感 能不上升么?即使自己没抢到,也不会多说什么 ,毕竟你前面那么多人排队呢。
        再来说对于队列的管理,不读数据库,不干吗的,直接就入队了,学会数据结构的人应该都明白,这性能有多快,而队列管理服务器的后端,也就是处理票务的服务器,慢悠悠地从队列里面取走人进行处理,多舒服啊~~
  • 相关阅读:
    一本通1018
    并查集&MST
    hdu 1875 畅通工程再续
    hdu 1811 Rank of Tetris(拓扑排序+并查集)
    hdu 1325 is it a tree?
    hdu1285拓扑排序
    hdu2063 过山车(最大二分匹配)
    最小生成树二·Kruscal算法
    hiho一下 第二十一周(线段树 离散化)
    hiho一下 第二十周(线段树模板)
  • 原文地址:https://www.cnblogs.com/ensleep/p/3532728.html
Copyright © 2011-2022 走看看