[专访]从12306说起 如何构建高并发高性能网站

news/2024/5/20 22:20:55/文章来源:https://blog.csdn.net/u011852589/article/details/11737329

【IT168 专稿】2012年的春运潮造就了中国铁路客户服务中心12306网络购票系统一夜蹿红,从传统购票方式到电子商务,2012年1月1日开通的12306网络购票系统成为了铁道部改革的重要一步。
但是随着12306系统的上线,各种关于12306系统的抱怨声也层出不穷,不少人抱怨网上订票系统十分“龟速” 网络运行奇慢,网页不时“崩溃”,平均刷新500次才能购到一张票,而且订票过程十分繁琐,从用户注册到支付成功,要13道“工序”,让人晕头转向等等。
本来为了让每个归家的人更方便地买到火车票,而12306网上订票系统这个号称斥数千万元巨资建立的电商的表现却难以让人信服,并引发了一些讨论和思考,应该如何建设类似12306网上订票系统这种大型高并发高性能网站呢?IT168记者采访了腾讯架构平台部刘天斯,对于大型高并发高性能网站的建设和优化,他给出了自己的建议。

12306订票网站存在哪些需求特点和挑战?
12306订票网站具有分时段、分区域、高并发等特点,如何确保在高峰时段正常提供服务是一个非常大的挑战,放眼春运期间网上订票系统,表现为页面访问延时大、登录异常、支付失败等问题。这其中存在一定客观因素,也不排除对流量预估不准确、架构设计不合理等情况。官方公布日均PV达10亿,在高峰时段有千万PV的访问量,应对如此高的流量需要从带宽、服务器、网络、应用及业务逻辑等进行优化。

国内的大型网站还包括淘宝、京东、新浪等,12306的访问模式和淘宝、京东存在哪些异同?
相同点都可以理解成电子商务网站,无论是业务逻辑还是应用特点都非常相似,唯一的差别是12306的流量因时段、区域更为集中,有人说像淘宝、京东搞促销,比如”秒杀”。但”秒杀”的对象往往比较固定,后端可以通过缓存机制或静态化来缓解数据库I/O压力,而12306需要每隔10分钟更新票务信息,同时还要保持与集团其它业务系统对接,这点处理起来更为棘手。

淘宝、TMall、京东也曾经遭遇宕机事件,这些宕机事件和12306网站崩溃有何异同?
此类宕机事件原因都是相似的,无非是宽带吃紧或服务器性能出现瓶颈(应用故障、高I/O或业务逻辑异常等)。差异点只有体现在业务层面上,促销活动可以推迟或重新组织,但12306订票系统不行。反之,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网站平台是铁道集团在互联网上对外服务的窗口,与电话订票、代售点都是平级的,后端肯定还关联着很多复杂的业务系统,在没有对整个集团业务系统做扩容的前提下(短期内估计不能实现),可以将网站业务平台剥离出来,当然,完全剥离也不太实际,至少可以延长同步、一致性校验的时间。时间的长短随班次的发车时间成正比,因为大部分的用户都是提前一周以上就着手预定车票。

从百万级、到千万级并发PV的网站,在构架和部署方面会存在哪些差异?
百万PV到千万是一个级别的提升,设计得再好的架构也很难一步到位,也是随着业务的高速增长,不断积累经验、优化、改良的过程。12306的流量达到千万PV 级,但平台的支撑能力远远没有达到预期。

一个大型的高并发高性能网站架构需要从哪些层面去考虑?服务器/存储部署方面需要注意哪些问题?哪些技术能够保证整体系统的高并发与高性能?
设计一个大型高并发网站的架构,首先必须以了解业务特点作为出发点,架构的目的是支撑业务,需要考虑互联互通、负载均衡、网络、开发、缓存、存储、数据库等层面,这些层面看似一个整体,任何一个环节出问题都可能导致整个网站崩溃,所以一个高可用、高并发的平台还少不了监控、开发、运维等角色通力协作。

部署大型的高并发高性能网站架构需要注意哪些问题?存在哪些挑战?高峰期和低谷期的资源和投入如何平衡?
部署大型的高并发高性能网站架构需要注意整体的扩展性与健壮性,解决未来海量数据的存储与处理、密集的数据I/O、互联互通、应用的不断迭代、重构以及缓存机制等问题,对于考验一个成功的架构提出了更高的要求,也是未来面临最大的挑战。对于平衡高峰期和低谷期的资源投入,我想云计算的伸缩性更适合解决该问题。

有人建议使用云计算平台(类似于Amazon之类的)来搭建这类网站,以便提高资源利用率节省成本,您是如何看待的?
云计算是未来一个趋势,优点不多说,它具有动态伸缩、灵活性强等特点,可以让资源利用最大化,可以更好节约成本,非常适用于12306平台。

虚拟化(不局限于服务器虚拟化,也可以包括网络虚拟化等)在这类型大型高并发网站建设过程中可以起到什么作用?
虚拟化是云计算的基石,可以降低企业运营成本,提高资源利用率,个人建议将一些运算量及I/O要求不高的业务迁移到虚拟化,比如web、缓存、代理、中间件服务等应用。在低流量时段可以销毁节点,使物理实体机处于低功耗状态下运行,绿色环保,高峰来临时可以迅速部署上线来提供服务。

人物简介

5e2ac5435d78ba4d
▲刘天斯,目前就职于腾讯-架构平台部,曾就职于天涯社区,担任架构师/系统管理员,热衷开源技术的研究,包括系统架构、运维开发、负载均衡、缓存技术、数据库、分布式存储及云计算机等领域,擅长大规模集群的运维工作。关注互联网技术发展动向。

原文:http://server.it168.com/a2012/0208/1309/000001309060_all.shtml


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_869403.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Online-Edu-小赵学院在线教育网站-项目总结

一、项目微服务模块划分 功能划分: api-gateway: 网关,对客户端请求进行断言、过滤等判断后负载均衡的路由到相应微服务模块 canal-client-edu: 考虑到分库分表场景,对虚拟机中数据库(这里canal.instance.filter.reg…

WordPress 3.8 中文正式版下载 - 建站与学习首选!全球最流行的开源PHP博客网站程序

转载自:http://www.iplaysoft.com/wordpress.html 话说虽然我一直都在网站底部写着本站基于 WordPress 构建,但时常还是有人问我网站是用什么程序建的,还真有点无语。看到 WP 又有新版本发布,那就顺势发篇文推荐下它吧。 WordPres…

局域网访问PHP项目网站 用IP地址进入

先在apache中的 httpd.conf中将 Allow from 127.0.0.1 修改为Allow from all 如果你的是Allow from all的话就不需要改 然后再将 DocumentRoot "D:\web\phpstudy\WWW" 这的文件路径换成PHP项目的路径。修改完成后也就是我这个样子。下图: 然后在 vhosts.…

基于大数据的电影网站项目开发之Hadoop2.6.0伪分布式设置(二)

一、jdk的安装 1、将linux版本的jdk通过xftp上传到hadoop用户目录下,在这之前首先需要安装Xshell和Xftp,在安装完成后,打开xshell并新建会话; 输入会话名称,协议选择SSH,输入虚拟机内主机的IP&#xff0c…

你的php网站开启gzip压缩了吗?

Gzip网页压缩可以大幅度提升网站访问速度,对于网站在国外的站来说,这是必不可少的一步,提升网页打开速度非常明显,现在我们就系统的来认识一下这个Gzip的庐山真面目。 一、何为GZIP GZIP概念 GZIP最早由Jean-loup Gailly和MarkAdl…

网站性能优化:压缩图片

网站图片一般有.gif、.jpg、.png格式,.gif格式的文件一般很小,可以不用考虑压缩, 而.png格式和.jpg格式的比较多,这时候可以考虑将两种图片中大一些的放在一起压缩, 这里以tinypng网站 https://tinypng.com/ 压缩为例…

一个锅炉方面论坛和一个网站

包含“CAD软件信息论坛”,“锅炉供求信息”,“锅炉技术交流 ” 这个太强了!《水和蒸汽性质计算软件包 V5.5》http://www.boilercn.com/cgi-bin/LB5000/cgi-bin/topic.cgi?forum3&topic3184&show0 http://www.ekv.cn/

一些国内WebDesign网站

志诚设计工作室 http://zc.ahut.edu.cn/ [WEB 设计]文章例表 http://zc.ahut.edu.cn/info/list.php?sessid&sortid2 这个不错,参考了,尤其是“网站项目计划书”,“网站项目建设流程概述 ”,“如何设计一个成功的网站”这些文…

什么是网站劫持

什么是网站劫持 2018-04-18 17:00:28 1266次 百度搜索流量事件是网站劫持的其中一种表现。网站劫持还会导致以下问题: 用户输入正常网址跳转到其它地址,导致用户无法正常访问,网站流量受损; 通过泛域名解析生成大量子域名共同指…

基于Hexo+Nginx+Git在云服务器上搭建个人网站

基于HexoNginxGit在云服务器上搭建个人网站 欢迎查看我的个人网页:小念 环境 本地环境:Windows11专业版 21H2 云服务器:腾讯云 轻量应用服务器 Ubuntu Server 20.04 LTS 64bit 本地端 安装 Git Git Git 教程 安装Node.js Node.js 安…

php做网站购物车 你搞懂了吗?

网上购物现已成为时尚,客户选择一个商品将其放入到购物车,然后返回继续购物或者去收银台,这个功能如何实现呢?今天capucivar就将使用PHP来实现这个购物车的功能。 首先,做一个简单的首页,从数据库中查询出来…

PHP网站提速 篇一

随着网络的普及,网站已经渗透到了每个行业,但是由于目前专线费用让很多企业和个人难以承受,所以共享带宽成为很多网站的首选方案。费用虽然降低了但是一个新的问题很快就出现了,那就是共享带宽的网速很慢,有时甚至让人…

简单的网站制作上(补完啦)

好的嘞,开始吧!先来个比喻形容一下网站和网页的区别,网页就是文件,网站就是文件夹。哇塞,是不是超级通俗易懂。我们这次做一个网站,使用的编程语言是python,工具是pycharm,主要是pyc…

【分享】一些很棒的在线作图网站

彩 字 秀 http://www.czxiu.com/ Banner图片制作网站: http://www.bannerbreak.com/index.php 在线图片生成网站: http://www.letterjames.de/ 卡通头像:http://www.moeruavatar.com/index_cn.shtml 图片分割器: http://www.html-kit.com/e/is.cgi 立体图片生成器…

【转】在PC上测试移动端网站和模拟手机浏览器的5大方法

查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp。 一、Chrome*浏览器 chrome模拟手机总共有四种…

对美国accuweather网站天气数据的解析

美国accuweather天气网站对中国普通城市也有天气预报,据说还比较准确。 现在需要在它的天气网页上把天气文字部分解析出来,今天写了一个Perl程序来实现,下面的例子是北京市最近一周的天气。 #!/usr/bin/perl use Encode;use LWP::Simple;use …

中国这10家慕课网站,您需要知道!

转载自 http://www.sohu.com/a/66476563_388623 A man can succeed at almost anything for which he was unlimited enthusiasm. 只要有无限的热情,一个人几乎可以在任何事情上取得成功。 MOOC即Massive Open Online Course的缩写,翻译成中文就是&am…

常用技术网站

c语言 http://en.cppreference.com/w/ http://www.cplusplus.com/reference/ Microsoft API and Reference Catalog https://msdn.microsoft.com/en-us/library/ K&R C: 《C Programming Language》 ANSI C : 国际标准为ISO/IEC 9899-1990,中国…

在阿里云服务器(Ubuntu系统)下使用WordPress搭建博客网站教程

最近着手也搭建了一个自己的博客网站,在这里与大家分享一下搭建的过程和遇见的问题,希望对同学们有所帮助。 环境:阿里云服务器(Ubuntu系统) 资源:WordPress 准备工作: 第一步、有一个域名…

Scrapy官推入门网站:Quotes to Scrape

Scrapy爬取网站:Quotes to Scrape 写在前面 这是一个scrapy官方提供的网站:http://quotes.toscrape.com/ ,网页很简单,麻雀虽小五脏俱全。就用这个网站详细演示下Scrapy基础使用方法。能力有限,水平一般,…