从12306说起 大型高并发网站架设

【IT168 评论】2012年春节,铁道部推出12306网站,进行网络实名购票。每一个返乡人原以为不用再忍冻排队,就能买着一张回家的火车票,但结果还是大失所望。7天内,12306网站访问用户已占全球互联网用户的0.902%,每天点击量高达10亿人次;系统一度支撑不住如此庞大的访问量而陷入崩溃。针对12306的责难也不绝于耳。

  面对12306,人们发表种种猜想,究竟是哪里有问题引起了大家的兴趣,IT168也特意邀请了网站架构方面的专家-ITpub资深版主丁昊和腾讯架构平台部刘天斯,跟我们一起聊聊12306背后的故事。

  12306订票网站存在哪些需求特点和挑战?

  刘天斯:12306订票网站具有分时段、分区域、高并发等特点,如何确保在高峰时段正常提供服务是一个非常大的挑战,放眼春运期间网上订票系统,表现为页面访问延时大、登录异常、支付失败等问题。这其中存在一定客观因素,也不排除对流量预估不准确、架构设计不合理等情况。

  同样类似的电商性质,12306和淘宝、京东等一样吗?

  丁昊:其实这三者间基本没有什么可比性,12306购票系统更像是秒杀性质,但是要比淘宝、京东上的秒杀活动更强大,所需的处理能力也要比秒杀更多。

  面对同样经历过宕机事件的淘宝和京东,性质和12306网站崩溃一样吗?

  丁昊:TMall宕机更多的是准备不够充分,另外还可能是超出预计;京东的宕机则主要是自己的业务逻辑造成的;而12306则是两者的合集。

  面对如此不堪一击的12306,有何改进意见?

  刘天斯:个人认为更有价值是体现在数据分析上,如得到宽带数据、用户流量、区域分布、请求特点、应用瓶颈点、服务器的性能指标等等,这些数据对优化、改良现有架构非常有帮助。抛开宽带因素,以下是对12306平台系统架构的几点建议:

  一、前端优化

  具体参考:yahoo前端优化34条规则,针对12306平台,个人建议在没有多运营商链路接入(如BGP)的情况下继续使用CDN进行加速。动、静态应用分离,静态业务使用非12306.cn域名可以减少无用cookie带来的流量。任何一个小细节在高并发下都会被无限放大(截止目前发现平台还是以dynamic.12306.cn域名做静态引用)。查询页面的结果是通过Ajax异步返回填充iframe框架来实现,这对动态CDN加速是一个挑战,因为CDN节点并没有真正缓存页面中主要加速的内容。另外提高验证码的复杂度及多样性,可以缓解刷票机给平台带来的压力。

  二、运用缓存

  缓存最大的好处是减少后端数据存储的I/O压力,从一个普通用户订票轨迹来看,查询读往往是入库写的好几倍,如何减少数据库的读I/O对提高平台的整体性能至关重要,比较流行的缓存技术有针对页面级和数据级,页面级缓存有varnish、squid等,如使用CDN,页面级的缓存可以不用考虑,重点将精力放在数据级的缓存规划上,技术方面可以用Nosql来实现,比较成熟的Nosql有memcached、redis、mongodb等。可以根据班次、出发与目的地ID组合或出发日期进行hash分区,这样可以很好地提高缓存命中率,减少后端数据库的压力。

  三、代理层

  引入代理层的目的是拆分业务,目前平台绝大部分功能都共用一组WEB服务器(从域名及URI结构猜测,不一定准确)来对外提供服务,比如登录、注册、车票查询、余票查询、列车时刻表查询、正晚点查询、订单管理等等,只要其中一个功能模块出现堵塞,影响必定是全局性的。一个好的方法是优化、规范各业务URI,在代理层实现业务的划分,可用的技术有Haproxy、Nginx等,如将/otsweb/regitNote/映射到注册组WEB服务器,/otsweb/AppQuery/映射到查询组WEB服务器,/otsweb/Pay/映射到支付组WEB服务器等等,如此一来,当查询业务出现延时堵塞时不会影响到用户支付。

  四、数据库层

  之前接触过一些政府行业的业务,数据库服务器往往都使用一台高端的硬件,比如小型机,在互联网行业,尤其是类似于12306订票系统,这往往是最致命的,理由很简单,在大流量并发下处理能力再强的服务器也吐不出数据,因为受网络I/O、磁盘I/O、业务逻辑等方面的限制,所以必须将数据打散,方案有进行读写分离、分区、分片。主从模式可以很好实现读写分离,大部分数据库都支持这点,除此之外还建议使用分区模式,分区策略可以根据业务特点进行,按地域进行分区是一个好主意,因为每个区域都是一个大分区,还可以从业务层面对它做二级甚至三级的"扩展分区"。需要在细化拆分与运营成本上做好平衡。另外I/O密集的点尽量使用SSD代替。

  五、负载均衡层

  保障一个业务平台的高可用性,采用负载均衡策略必不可少,即使是提供给CDN的源服务器。目前有商用的F5、NetScaler、Radware等,也有开源的LVS,看成本的投入来选择,此处不详细展开讨论。

  六、业务层

  此次12306网站瘫痪事件,业务层面有无优化的空间?12306网站平台是铁道集团在互联网上对外服务的窗口,与电话订票、代售点都是平级的,后端肯定还关联着很多复杂的业务系统,在没有对整个集团业务系统做扩容的前提下(短期内估计不能实现),可以将网站业务平台剥离出来,当然,完全剥离也不太实际,至少可以延长同步、一致性校验的时间。时间的长短随班次的发车时间成正比,因为大部分的用户都是提前一周以上就着手预定车票。

  一个大型的高并发高性能网站架构需要从哪些层面去考虑呢?

  丁昊:缓存、队列、锁机制、数据库分表、代码、灵活性、扩展性等等都是要考虑的因素,而且各因素之间相互联系、缺一不可。

  关于使用开源技术建设高并发网站,有什么样的看法?

  丁昊:拥抱开源,就等于拥抱了变化,这样才能更好的发展。开源软件可以读源码,可以修改源码,也可以增加功能,而且这些还是免费的。如果facebook,google这类网站都用收费的,估计也活不到今天了。对于构建大型高并发网站,主要的是看产品的设计,采用哪种开源软件其次,要能hold住使用的开源软件。

  云计算目前大热,使用云计算平台来搭建高并发网站可行吗?

  丁昊:可行,在业务不繁忙的时候甚至可以关掉一些服务器。但是,不足之处也有,目前国内并没有什么成熟的云平台能提供高可靠性,高性能的解决方案。

  针对数据库的问题,有人建议采用NoSQL技术解决,但也有人质疑NoSQL技术不成熟,并且在实现数据一致性方面存在问题,您怎么看?

  丁昊:NoSQL的技术其实是很成熟的,只是它刚刚被认知起来,另外大多的NoSQL都倾向于内存操作,所以可靠性降低了,以此来换取高性能。对于数据一致性问题,主要还是看业务的需求,是要求实时一致性还是最终一致性。互联网大多数产品都是最终一致性,对于交易系统大多数都是实时一致性,也不排除最终一致性(例如跨行转账)。

  虚拟化如何在大型高并发网站中应用?

  丁昊:虚拟化技术主要目的之一就是降低IT成本,但是随之而来性能也会降低。不过如果用作Web server,缓存服务器之类的倒是可以考虑。

时间: 2024-08-05 10:59:31

从12306说起 大型高并发网站架设的相关文章

关于大型高并发网站架构以及数据库集群的一些问题

2014年6月11日,正在办理离职交接过程中,对未来的职业规划陷入了一些困境,想要专门从事管理工作,但是在任职期间所执行的管理工作仅仅属于team leader级别的,离项目经理感觉能力还有差距.对技术方面,总是有着难以克制的热情,多年的企业应用开发,锻炼了将需求转化为程序逻辑的能力.可对当下比较吃香的大型网站架构以及数据库集群技术,接触甚少.这也让我一直心有芥蒂,总想向着这个方向去探索.我想,如果想要成为一个好的架构师,这些事情如果不接触,你都不好意思跟人说你会做系统架构吧. IT给人的感觉就

高并发网站架设

前端优化 css同类型合并--压缩-图片压缩-缓存-js压缩等 https://www.zhihu.com/question/21658448 http://www.cnblogs.com/fangshidaima/p/5823465.html 后端优化     php引号-foreach-算法-函数实现方法比对(运行时间测试修改) 数据库优化(大数据优化)    索引-字段类型-位数-引擎 服务器优化 数据传输优化  json格式 php系列化(serialize) seo优化 redis 安

大型高并发高负载网站的系统架构(转)

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就能实现了,配合一些图片达到美化的效果,所有的页面均放在一个目录下,这样的网 站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采 用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.webServer.防火墙等各个领域都有了很高的要求,已经不是原来的简单的html静态 网站的所能比拟的. 大型网站,比如门户网站.在面对大量用户访问.高并

实战经验:MySQL 构建高并发网站性能优化

最近在优化一个比较大型的高并发网站,收益颇多,经验分享给大家. 1. 表字段分割.经常访问的表.行数量大的表,切记保持最少长度字段,不在select列表的数据,请做垂直分割.举例:文章表,不要将文章正文部分的内容存在文章信息表里,可以将这个字段独立存储到另一张表articleContent(articleID,articleContext).因为这个字段长度大,影响查询时的行扫描. 2. 频繁更新的字段做表的垂直分割.在做更新操作时,一般会做行锁定,有的会设置成表锁定.那么在做query的时候,

亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcached等缓存技术的基础使用,最多了解一些集群相关的知识,大部分人都可以对缓存技术掌握到这个程度.然而,仅仅对缓存相关的技术掌握到这种程度,无论是对于开发复杂的高并发系统,或者是在往Java高级工程师.Java资深工程师.Java架构师这些高阶的职位发展的过程中,都是完全不够用的.技术成长出现瓶颈,在自己

浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去访问动态

高负载、高并发网站架构知识汇总-大流量网站架构的几点认识

:硬架构 1:机房的选择: 在 选择机房的时候,根据网站用户的地域分布,可以选择网通或电信机房,但更多时候,可能双线机房才是合适的.越大的城市,机房价格越贵,从成本的角度看可以 在一些中小城市托管服务器,比如说广州的公司可以考虑把服务器托管在东莞,佛山等地,不是特别远,但是价格会便宜很多. 2:带宽的大小: 通常老板花钱请我们架构网站的时候,会给我们提出一些目标,诸如网站每天要能承受100万PV的访问量等等.这时我们要预算一下大概需要多大的带宽,计算带宽大小主要涉及两个指标(峰值流量和页面大小)

(转)浅谈千万级PV/IP规模高性能高并发网站架构

浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务

说说大型高并发高负载网站的系统架构(转载)

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.WebServer.防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的. 大型网站,比如门户网站.在面对大量用户访问.高并发请求方面,