http://www.cnblogs.com/aigongsi/archive/2012/09/17/2683656.html

铁道部新客票系统的设计(一)

铁道部新客票系统的设计(二)

铁道部新客票系统的设计(三)

__________________________________________________________________________________

http://www.oschina.net/question/88671_35944?sort=default&p=1#answers

用实际场景来表达的话:

1、售票厅不允许一直站在队列的前面跟售票员交谈,交谈超过一定时间,你会被强制赶出队列,解决重复刷新的问题(如果重复刷新,系统仅给出等待界面)

2、多开售票窗口(这拼的就是服务器集群的量级了,如果要支持上亿的人同时购票,想想需要多少窗口?,通常一个购票的事务流程需要数秒的话,任何单纯的集群都解决不了实时的问题)

3、按照目的地,进行分区域限时购票,把1天24小时分成48份,每半个小时对应一个省级行政单位,通过行政规定把顾客分组,提高集群效率。第二天重复该流程,限时表提前公布。

另外,计算机系统不能用简单的加法来计算瓶颈,一个省试点能使用,不代表服务器量*40就可以同时支持全国了。

首先,我要否认一些看起来合理,但实际上根本就没必要的优化方案:

1. 前台数据优化与压缩
如果处理前台网页数据的服务器数量不够,或者压力太大,导致打开网页慢,加载网页元素的速度慢,那么就需要对前台数据进行优化和压缩。但是,打开首页,从HTML文件,到图片,甚至验证码,差不多都是瞬间打开(电信、教育网、联通和网通已测),因此,前台那点文本数据,有什么好优化的。当然,优化也可以,但问题的关键根本就不在于前台这点文本数据。

2. 对数据库使用缓存。
说这话的人,得去弄懂什么叫电子商务。这种东西又不是微博这种ACID可以忽略不计的东西。电子商务的业务处理,需要高ACID,目前,铁路订票系统也就是因为需要保证高ACID,才导致了今天这些问题。然而,一些人居然希望使用缓存,这种会导致ACID降低的方法,去缓解压力,显然,他们没有意识到,这种设计,连需求都违背了,还谈什么优化。

这几天,我跟几个理论性强的导师以及有多个大型项目经验的朋友,一起讨论了这个问题。我们得出了一个结论:目前购票系统的瓶颈,在于ACID的实现关键:锁。由于锁具有一定程度上的硬件独占性,以及过程串行化等特点,加上目前通用的数据库产品,会有内在的锁的升降级带来的开销。这种开销,再乘上国家级的业务量,就造成了,即使是使用目前性能最强的大型机,可能也扛不住这种对锁的使用需求。

要真正解决这个系统中锁的问题,在数量级上提升锁效率,就目前来说,是不可能的,除非未来的计算机结构或部件发生革命性升级。比如,就查询余票操作来说,客户端的每一个查询操作,服务端都需要一次相应操作。这种模式,反应到现实世界中,那就是,在售票厅里,一个人需要获取票的情况,售票员都得回答一次,因此有多少人,售票员就得回答多少次,显然这是一种低效的方法。然而,现实中的实际情况是,所有人只需要看火车站大公告板,就能了解到票的情况,这种模式,在计算机中就是,服务端一次广播数据,所有客户端都可以获取数据,但是,目前计算机以及网络硬件中,不存在这种设备。在未来,可能会出现一些基于光或声波来进行同时数据广播的设备,但现在讨论这种设备显然没什么意义。

虽然如此,但我们还是讨论出了3个小方案,可以在线性级别上提升锁效率。方案如下:

1. 由于火车票这种数据的结构具有单一性,因此,每次业务处理,锁的使用次数并不多。但是,如果使用通用数据库软件,则会带来内存的额外的锁开销以及别的开销。所以,我们需要把火车票这个数据库“抽出来”,单独做成一个C/C++的专门数据库软件,这样就可以免除使用标准数据库软件所带来的额外的锁开销以及别的开销。

2. 尽量把票的数据,分摊到不同的服务器上。这样做,可以让每台服务器的锁的开销尽量小些,并且保证同时能有尽量多的硬件参与锁的运算。比如,把一列火车的车票,分摊到10台数据库上去。但实际操作中,具体怎么分摊,我们认为,这个要根据压力来计算,平时压力很小的时候,也许1台服务器可以同时处理多辆火车的票的数据,但春运期间,1台服务器也许只能同时处理一辆火车的一小部分车票。计算压力,可以人工统计,然后修改分配方案;也可以基于一些简单的策略,加上机器学习,来实行机器自动化统计并修改分配方案。

3. 由于运力问题,火车站所提供的火车票的数量远远小于前来购买的人的数量,并且,在整个购票过程中,查询的次数占的比率最大,因此,在使用系统的整个过程中,是读次数多(查询次数多),写次数少(购买到火车票次数少)。所以,数据库可以做成对读操作进行负载均衡的集群模式。这样做的话,就可以加快查询速度,然而,写速度会稍稍降低,但这个降低显然值得。

如果是你铁道部12306网站架构师,如何设计网站的软件架构和硬件系统架构相关推荐

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

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

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

    转载至德问网站.链接地址为:http://www.dewen.org/q/963/?ts=edm20121018&e=MzAyNjY5NzU3QHFxLmNvbQ%3D%3D 今年火车票网上售 ...

  3. 大数据架构师指南 pdf_ZTE十年大数据架构师教你:高效搭建企业IT系统架构,超越CTO...

    前言 如果你是一名IT工程师,首席技术官( CTO)希望你在一周内提交一份公司未来IT系统基础架构的初步建议;如果你是一位IT营销人员,客户需要你在一周内向他汇报未来大数据系统的大致技术方向... . ...

  4. 【SDCC讲师专访】专访架构师薛珂:弹性调度平台Saturn的架构设计

    编者按:每个人的成长曲线不同,有的人在研究生之时就已有相当知名的产品和框架,从而在接下来的工作中一路顺风顺水,有的人却需要经历一个又一个的坑才能成长,不管是前者的聪明高效,还是后者的笨鸟先飞,他们都是 ...

  5. 【IT技术】阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路

    专访阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路 原文作者:pipihappy8888 http://www.itpub.net/thread-1887486-1-1.html 如果说淘 ...

  6. linux云计算架构师运维笔记-第1天-硬件知识介绍与操作系统部署

    linux云计算架构师运维笔记-第1天-硬件知识课程说明 1. 课程知识详细讲解 1.1 服务器硬件知识介绍 1.1.1 硬件设备种类介绍部分 1.1.2 企业服务器运行指标: 1.1.3 服务器种类 ...

  7. 我对架构师的理解(如何成为一个合格的架构师)

    我对架构师的理解(如何成为一个合格的架构师) 引子: 在讨论架构之前,我们先上道菜,青椒土豆肉丝,这道小菜味道还是不错的,自私点了,不考虑您是否喜欢,今天就上它了. 准备原材料:食用油.青椒.土豆.肉 ...

  8. 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

    摘要:且听有着15年软件研发.架构经验的华为云MVP魏群娓娓道来,如何成为一名合格的解决方案架构师? 架构师,这是一个在技术人员,特别是软件开发人员眼中具有神圣色彩的岗位. 团队中有了架构师,就是有了 ...

  9. 专访架构师周爱民:谈企业软件架构设计 1

    最近在网上读到了"杀不死的人狼--我读<人月神话>"系列文章.是周爱民关于<人月神化>的读书心得.<人月神化>在软件工程里一本很有分量的书,讲述 ...

  10. 专访架构师周爱民:谈企业软件架构设计[转]

    这点说的很好,要从整体上考虑,不要过于追求细节,要站在巨人的肩膀上. 转载地址:http://blog.csdn.net/EricLee00/archive/2007/03/19/1533572.as ...

最新文章

  1. python怎么读文件夹下的文件夹-如何使用Python读取文件夹中的文件数量?
  2. 19道小米网运维工程师笔试真题
  3. Class 类文件结构
  4. 清华大学计算机系主任应明生,清华大学计算机科学与技术系导师简介:应明生...
  5. 华为云发布【云巢】智慧康养物联网加速器,加入立享多项扶持
  6. php代码实现tp5监听队列,thinkPHP5的队列使用
  7. java deque_使用Deque
  8. 安卓psp模拟器联机教程_psp模拟器联机平台下载
  9. Vue中使用axio跨域请求外部WebService接口
  10. c语言的if语句案例,c语言if语句(c语言if语句例子)
  11. C++实现超简单的文件加密
  12. 人工智能机器人技术概述
  13. python request 报错 #No JSON object could be decoded
  14. 微信开发者工具登录二维码不显示
  15. 哈工大计算机网络-作业讲解
  16. Deep Mutual Learning
  17. 记录一次net.ipv4.tcp_tw_recycl快速回收机制导致的tcp连接失败问题
  18. CDMA版iPhone 4广东通话乐成 批量烧号不可行
  19. 【C#】C#客户端自动升级技术简析
  20. Reversing.kr Replace

热门文章

  1. 第12周阅读程序(2)
  2. Liunx系统中用户权限和组权限的简介
  3. android 软件首次运行时引导页左右滑动效果
  4. 单日销售额从98万到破千万。新东方股价飙升,双语直播火出圈。
  5. maven项目打的jar包不能够执行
  6. K8S RBAC介绍
  7. win安装git显示无C盘temp文件夹访问权限
  8. Java开发谈:java培训机构就业协议
  9. HTML侧滑菜单栏,侧滑菜单栏.html
  10. “This event loop is already running“解决方法