不知道大家发现一个现象没有,无论 12306 网站崩溃成什么样子,火车站售票大厅的售票窗口都是正常的!这说明什么呢?这说明铁道部有个内部网络, 12306 仅仅是个入口而已。如果我们把铁路内部网比作信息的高速公路,12306 网站就是高速公路上的收费站。

说到高速公路,这两天有很多新闻,据说很多高速公路入口处变成了停车场,有人在上面做操、有人遛狗、还有生孩子的、随地大小便的、犯心脏病的等等等等,总之是一片混乱,崩溃!但是入口处再怎么乱,进入了高速公路,基本上还是比较顺畅的。

仔细看看竟然和12306的情况一摸一样,12306 就是为了防止内部网络瘫痪而设立的一道调度关卡,结果和高速公路一样悲剧,都是内部顺畅,入口处卡住了。

下面我们就把高速入口和12306看做一个问题,分析分析怎么解决:

方案一:拆分,每个车次都设立一个车票服务器。

这个方案理论上绝对可以解决问题,但现实中根本不可能。想象一下,为全国任何两个城市之间都建设一条单独的高速公路,并设置单独的出入口,当然不会拥堵了,但是可能吗?就算不考虑成本问题,铁路公路部门从管理运营其他方面考虑,也不会同意拆分的。

方案二:分布式,大缓存区。

现在很多人都没搞清楚问题的实质,一上来就是分布、缓存之类的。高速公路入口难道没有分布吗?难道没有缓存区吗?

先说分布式的问题:每个大城市上高速都不止一个入口吧,这应该是一种分布式处理吧?有人说入口不够多,其实再多的入口也没用,因为不管你分布多少入口,最终所有的流量还是要汇集到那么几条主干道上去。只要流量是一瞬间大量出现的,最终还是会堵在某个地方,只不过变成了外面不堵里面堵而已。

再说缓存的问题: 每个高速入口处都有一个小广场,停个百八十两车没问题,这不就是缓存区吗?有人说缓存区不够大,好吧,建个能停十万辆车的广场,再配套上医院、饭店、旅馆、公园之类的, 这个缓存区够大了吧,有用吗?入口处就那么几个路政人员,他二十四小时不停地发卡,结果工作人员口吐白沫手抽筋了(请查找相关新闻),这是什么?这不就是系统崩溃了吗?入口的处理能力有限,再大的缓存区又有什么用???

方案三:排队

现在唯一的方法可能就是排队了,但是传统的排队能解决问题吗?人的耐心都是有限的,一般人等个二三十分钟可能还行,如果让你从日出等到日落,估计任何人都崩溃了。崩溃了怎么办?有人就开始加塞抢道、有人直接上了应急车道、有人准备原地调头,有一个人做就有两个人做,然后就是一片混乱,缓存区彻底瘫痪了,进也进不去,出也出不来,所有人就塞在那里,动弹不得。和12306一摸一样。在这样一个人多、资源少、素质也不太高(比如说买一张票,几十个人一块刷)的环境中,传统的排队好像也不太现实

思考题:火车站进站为什么很少崩溃?

有一个问题不知道大家想过没有,过年过节时候的火车站,也是检票进站,那人山人海的,流量可比高速公路入口大多了,为什么火车站进站很少听说有崩溃的?

秘密就在于火车票上面的那个发车时间

比如你的车票发车时间是12:00,现在是8:00,时间还早,你不会堵在检票口处死等吧!你可以先去网吧上上网、逛逛商店、吃个饭、会会网友之类的。等到时间到了,闹钟提醒你了,你再往火车站赶。

原先是几十万人依赖一个入口,现在是火车站和乘客都依赖一个发车时间,依赖反转了。一旦反转,就会发生很多变化:

变化1:检票系统对流量的处理就变被动为主动,原先是来多少就得处理多少;现在是通过调度,让流量按照时间一波一波的来。

变化2:原先的缓存区仅仅只有候车大厅那么大一点;现在整个城市都是火车站的缓存区,只到登车前才进入候车大厅。

变化3:原先的侯检、排队是一种混乱的、无秩序的、让人无法忍受的排队;现在虽然也是一种排队,但是是一种有秩序的、有调度的、体验良好的排队。

通过上面的分析,问题的症结已经很清楚了:

1、内部网络为了保证安全、稳定和统一调度,必须设置入口关卡;就像高速公路入口、火车站检票口之类的。这一点无法改变! 

2、 入口的处理能力是有限的,而且只能一个一个放行,强度大了可能还会口吐白沫、手脚抽筋(系统崩溃)。这一点也是无法改变的。

3、入口对任务的处理是被动的,来多少就得处理多少,没有调度,直到系统崩溃为止。这一点是唯一能够改变的地方。

解决方案:依赖反转

高速公路入口或者12306网站,他们作为入口之所以会经常瘫痪的原因就是上面的第三条:对任务的处理是被动的,来多少就得处理多少,没有调度。

既然找到了问题所在,解决起来就比较简单了。

先说高速公路的例子:

假如你和我两个人明天都是要9:30上高速,按照原来的流程,我们两个人会在高速公路入口处排队,当然还有很多其他人。

现在, 我们提前一天将任务提交给高速公路管理部门,第二天9:05我收到短信,告诉我可以出发了;9:13分你收到短信,可以出发了。当然,时间可能不会像你要求的那么准确,但是绝对比大家都挤到入口处等待节省时间。

再说 12306 的例子:

上亿次的请求被几千台外围的服务器拦截处理以后,怎么办?一块向入口挤吗?千万不要!!

把所有的请求被缓存下来,然后就啥也不用管了。千万不要向中央服务器提交,因为入口就那么几个,主干道可能就那么一条道。

庞大的流量依赖几个有限的资源,必然会造成混乱。

那怎么办?依赖反转啊!你们别来找我,我去找你们!中心服务器主动从外围服务器上获取请求数据,然后统一调度处理,处理完毕以后再通知用户。

额外的好处:用户再也不用找几十个亲戚朋友不停地刷新页面了!

为什么?因为原先刷新页面的目的是为了挤进入口去,刷的次数越多,进去的可能性越大。

现在,你刷多少次也没用,你的数据只是被缓存起来,而不会被处理。什么时候处理,由中心服务器统一调度。

秩序恢复了,体验变好了,大家的素质看上去好像也提高了。

其实,有时候,能排队也是一种幸福!

本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2012/10/03/2710899.html,如需转载请自行联系原作者

12306 说:有时候,能排队也是一种幸福!相关推荐

  1. 12306排队是什么意思_12306 说:有时候,能排队也是一种幸福!

    不知道大家发现一个现象没有,无论 12306 网站崩溃成什么样子,火车站售票大厅的售票窗口都是正常的!这说明什么呢?这说明铁道部有个内部网络, 12306 仅仅是个入口而已.如果我们把铁路内部网比作信 ...

  2. 上周热点回顾(10.1-10.7)

    热点随笔: · 从一个职校走出来的微软最有价值专家(Microsoft MVP)(南京.王清培) · 如果 12306 依赖反转 -- 都给劳资消停点,谁也别来找我,我会去找你们的(左洸) · 关于j ...

  3. 显示12306服务器处理中正在排队,12306排队等待中怎么办 12306一直在排队解决方法(图文)...

    12306一直在排队解决方法: 大家都知道,使用12306订票是为了图个方便,不用去火车站排队买票了,但是现在使用12306的用户竟然遇到了12306购票还要排队的情况,这到底是怎么回事呢? 如果您也 ...

  4. 显示12306服务器处理中正在排队,12306排队等待中怎么回事_12306排队等待时间_12306一直在排队解决方法...

    12306排队等待中怎么办?用网上订票时,有时会显示"12306排队等待中",下文介绍12306一直在排队解决方法,一起和小编来了解下吧! 12306一直在排队解决方法: 大家都知 ...

  5. 显示12306服务器处理中正在排队,12306一直在排队中怎么办

    12306一直在排队中怎么办?想必很多玩家还不知道吧,那么小编就为大家带来12306一直在排队解决方法,下面就赶紧和小编一起去看看具体内容吧. 12306一直在排队解决方法: 大家都知道,使用1230 ...

  6. 10秒钟登录12306

    注:本文来自网络. 只要在电脑C盘里加一条记录,就能瞬间登录12306购票网站:靠谱的第三方软件可以帮助网友捕捉购票良机:如果第一种方法不可行,开个美国的VPN立马就OK了--昨天,是国庆抢票大战最火 ...

  7. 如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?

    今年火车票网上售票的情况大家都见到了,如果让你来设计该订票网站,你会如何设计才能应对如此大规模以及高并发的情况呢? 邵辉 13 票 806 列车在线订票系统的业务逻辑比较简单,不用多说.可能的瓶颈有两 ...

  8. 关于12306网络购票的架构方面思考

    自从2012开始那天,网络购买火车票成了国内最火的话题,12306.cn的Alexa排名从三个月前的全球万位以外迅速窜升至今日的全球排名1560位.中国排名102位.并且成为第11大电商网站.但是由于 ...

  9. 12306.cn网站的思考 (整理篇)

    针对12306.cn网站应用架够的一些看法 背景 针对最近比较热点的列车网上订票系统频繁出现的系统问题,提出了一些自己的看法. 分析 几经分析考虑,认为可能存在几个系统瓶颈. 1.关联系统的系统负载能 ...

最新文章

  1. C#基础知识点梳理一
  2. jenkins集群测试环境原理
  3. apache代理时java获取IP的问题
  4. Jenkins实现Android自动化打包
  5. SQL Server 2005中的分区表
  6. 【线上分享】云原生时代,华为云音视频质量监控与优化实践
  7. Java操作Excel中HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义解决方法
  8. Tomcat虚拟根目录与虚拟目录
  9. MySQL数据类型及sql模型及服务器变量
  10. [补档]noip2019集训测试赛(十三)
  11. asp.net页面的生存周期
  12. uva11992-Fast Matrix Operations(区间增值、改值)
  13. 一文讲清楚【KL距离】、【torch.nn.functional.kl_div()】和【torch.nn.KLDivLoss()】的关系
  14. 按需使用vue-cli-plugin-element插件
  15. 修复图片移入移出抖动错位bug
  16. SQL语句集锦 [转]
  17. python+selenium实战搭建PO模型
  18. 极客时间「大师课·深度剖析 RocketMQ5.0」上线啦,欢迎免费领取!
  19. 有哪些好用的读书笔记app
  20. IBM Guardium

热门文章

  1. windows server 2003 AD
  2. checkbox:获取所有已选中的值
  3. JS详细入门教程(上)
  4. 锋利的JQuery —— DOM操作
  5. FreeRTOS初步认识
  6. 安装RRDtool 1.4.5
  7. NSS_06 extjs弹出窗口上的文本框默认获得焦点
  8. ASP组件AspJpeg(加水印)
  9. 为Web应用建立基于JMX的管理系统
  10. windows核心编程-第二章 Unicode