一说起12306,大家总爱和淘宝、谷歌、京东之类的高访问量网站比较。 他们真的一样吗?我们来分析一下:
先分析谷歌。假如同一时间我谷歌“苹果”,从服务器 A 得到数据,你谷歌“橘子”,从服务器 B 得到数据,他同样谷歌“苹果”,却是从服务器 C 得到数据。这就是所谓的分布式架构。
再来分析淘宝,你买一件衣服,我买一双鞋子,业务请求很可能是从不同的服务器处理的。
淘宝、谷歌这类的网站,他们的特点是: 每个用户的操作和其他用户的相关性不大;也可能相关性可能很大,但是从时间上来说却不需要立刻处理。在这个前提下,才有可能进行分布式架构。
12306的核心车票数据可以分布吗?我们再来分析一下:
你购买了一张北京到广州的车票,同一时间我也购买了一张北京到广州的车票。
假如系统是分布式的,会出现什么情况呢。

服务器 A 给你出了一张票,服务器 B 给我出了一张票,结果等车的时候发现,我们两个人的票是同一个座位,撞车了!

如何解决这个问题呢?那就是设置一个中心服务器!
外围分布式服务器可以处理一切和车票无关的业务,比如说注册、登陆、身份验证、购票请求、款项支付等等等等,因为这些数据只和你自己相关,和任何其他人都没有关系,这些数据可以用类似谷歌、淘宝之类的架构设计处理。
但是唯独车票数据例外,因为 任何一张车票的数据发生了变化,系统必须立刻知道,并在紧接着的下一笔购票业务中反映出来,否则就会出现混乱。
会出现什么可怕的情况,大家想象一下。
真正可怕的不是一瞬间上亿的访问量,真正可怕的是 上亿的访问在同一时刻必须依赖同一个“核心”!
对,就是一个“核心”。这个核心可能是一台服务器,也可能是几千台服务器。无论多少, 从逻辑上看,他们就是一个核心
现在问题很清楚了, 购票的业务逻辑必然导致一个依赖核心!而上亿的访问同一时刻 依赖同一个“核心”必然导致崩溃!
似乎崩溃是必然的,但是如果我们将依赖反转过来就发现一切问题迎刃而解。
打个比方吧,大家电脑里都有一个中心处理器 ,即CPU ,他是一个核心。假如我们让几万个运算任务同一时间去抢 CPU 的控制权,CPU 必然会发呆的,给谁好呢? 
CPU 想了一下发话了,大家都别抢了,都给劳资消停点!所有人,都把数据准备好:放到磁盘、内存、一二三级缓存中,然后等着。
你们谁也别来找我,我会一个一个找你们的,每人一个时间片,只要劳资还能运转,大家的任务都能完成。
本来是海量请求依赖一个核心,现在成了核心主动去收集任务,依赖反转了。
12306 完全可以这样架构,外围的分布式系统处理一切和车票无关的非核心业务,同时接受购票请求并将购票请求缓存起来。而“核心”对外围分布式服务器进行时间片轮转通讯,收集购票请求,并根据即时情况进行处理。秩序恢复了,高速公路终于不是停车场了。
当然了,无论怎么架构,总还是有很多人买不到票,但是秩序恢复了,这不正是我们要追求的吗!
本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2012/10/01/2709893.html,如需转载请自行联系原作者

如果 12306 依赖反转 —— 都给劳资消停点,谁也别来找我,我会去找你们的相关推荐

  1. 【简译】关于依赖反转原则、控制反转和依赖注入的抽象的初学者指南

    原文在此. ======================================分割线==================================== 介绍 文章以介绍依赖反转原则开始 ...

  2. 依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构

    DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...

  3. 依赖反转原理,IoC容器和依赖注入:第4部分

    目录 介绍 背景 LifeTimeOption的实现 总结 下载源代码18.5 KB 介绍 这是我有关依赖反转原理,IoC容器和依赖注入的文章的第四部分.在本文的上半部分,我试图解释如何构建自己的Io ...

  4. 依赖反转原理,IoC容器和依赖注入:第2部分

    目录 介绍 控制反转(IoC) 什么是控制反转 接口反转 流反转 创建反转 依赖注入 总结 介绍 这是有关依赖反转原理,IoC容器和依赖注入的文章的继续部分.在本文的上半部分,我解释了什么是依赖反转原 ...

  5. 依赖反转原理,IoC容器和依赖注入:第1部分

    目录 介绍 先决条件 依赖倒置原则(DIP) 总结 介绍 在处理WPF应用程序时,我遇到过诸如Unity容器,IoC,依赖注入之类的术语.当时,我很迷茫,想着这一切的需要.但后来,当我逐渐了解到它的好 ...

  6. 依赖反转原则(DIP)

    依赖反转原则.依赖反转原则的英文翻译是 Dependency Inversion Principle,缩写为 DIP.中文翻译有时候也叫依赖倒置原则. 为了追本溯源,我先给出这条原则最原汁原味的英文描 ...

  7. 浅谈“面向接口编程” :依赖反转 IOC 与 DI (容器控制反转与依赖注入)

    IOC:Inversion of Control Containers and the Dependency Injection "Water" by Andy Huan, Mal ...

  8. 五.抽象接口与依赖反转(C面向对象开发)

    内容参考于<抽象接口技术和组件开发规范及其思想> 五.抽象接口与依赖反转 基于多态可以实现"与硬件无关"的应用程序. 在 C 编程中,多态的核心解决方法是充分利用&qu ...

  9. DIP依赖反转原则——实现松耦合的设计

    在<IoC控制反转设计原则--实现松耦合>我们将控制工作委派给其他类来完成,向松耦合设计又迈进了一步.但是我们类仍然依赖着具体的类,所以我们可以使用DIP(依赖反转原则)来进一步获得松耦合 ...

最新文章

  1. lseek成功但未生效?
  2. 设计模式(3):抽象工厂模式(Abstract Factory Pattern)
  3. python实现统计你一共写了多少行代码
  4. pytorch扩展——如何自定义前向和后向传播
  5. python学习手册-Python学习手册(第4版) 中文版.pdf
  6. 前端绝对路径不显示图片_Vue cli使用绝对路径引用图片问题的解决_情愫_前端开发者...
  7. C# WinForm开发系列 - ComboBox
  8. WAP,手机网站建站资料收集 - 老古董
  9. Matlab安装minGW
  10. 几款极好的 JavaScript 文件上传插件
  11. 男生必学,与女生聊天技巧
  12. Java开发技巧!整理了3家面试问题:美团+字节+腾讯,工作感悟
  13. leetcode_529. 扫雷游戏 python
  14. 华为鸿蒙新闻短评,科技圈“某高管”发表对华为鸿蒙的看法,遭网友回怼
  15. 电脑实时监控信息:CPU 内存 GPU使用率在桌面上动态展现
  16. 【SpringCloud深入浅出系列】SpringCloud组件之集成Zuul实现过滤器
  17. 2023首届大学生算法大赛——补题
  18. typora+百度云盘+markor实现多端云同步
  19. PAT乙级|C语言|1032 挖掘机技术哪家强 (20分)
  20. 助力智能网联发展,中认车联网与怿星科技合作实验室正式揭牌

热门文章

  1. 如何解决IDEA中输入sout,psvm后没有自动联想功能的问题。
  2. 通信与处理平台(数字信号处理)
  3. PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码)
  4. 考研复试操作系统面试题(一)-IO系统
  5. 前端常见面试题之----js单线程,微任务宏任务
  6. PC上安装多个操作系统
  7. 使用CSS3代替SVG中的animateTransform
  8. OPenCv4 c++入门笔记(B站30讲课程的部分笔记)
  9. 关于PID的一些理解与调节经验
  10. 2010有道难题-练习赛