关于大型网站突发流量的思考
作者:王爱国
来源:《中国科技博览》2013年第29期
摘要:本文通过对突发流量下大型网站的故障分析,探讨了突发流量下大型网站性能较差的原因。并根据流行的大型网站技术架构和最佳实践,提出了相应的优化解决方案。 关键词:大型网站 突发流量 购票规则
中图分类号:TP315 文献标识码:A 文章编号:1009-914X(2013)29-291-02
近年来,internet技术飞速发展,各类电子商务网站如雨后春笋般涌现出来,如Google, baidu, ebay, taobao,12306等,大大方便了人们生活和出行。由于大型电子商务网站用户较多,一旦出现故障就会造成巨大的影响。2012年春节,几百万人上铁道部12306网站订票,大量用户无法登录,页画刷新时间长达30分钟,还有不少用户登录之后,却无法打开二级、三级页面,只有在不停地刷新,一些幸运的用户登录后成功付款,但由于超时,功亏一篑,却无法买票了。 除此之外,hp网站、360buy、taobao等等,也出现过类似问题。下面就突发流量下大型网站崩溃的原因进行具体分析并提出相应的解决方案。 1 突发流量下大型网站崩溃原因分析
大型网站通常有千万级甚至上亿的注册用户, 日访问量达到千万级PV, 例如Alexa在2012年1月12日发布的统计数据,12306网站最多一天的点击率是14亿次,每秒PV在高峰时上千万。突发流量导致大型网站崩溃,有如下原因: 1.1 大部分电子商务网站的先订先得的游戏规则
电子商务网站突发流量的产生,根本原因三点:1.商品资源稀缺;2.先订先得;3.销售的开始和结束时间限制。12306在春节期间也是采用此规则,每到准时放票时,上千万人同时访问站点抢票。
1.2 带宽需求严重超载
带宽需求为各个用户单位时间内数据传输量总和,为简单起见,我们就分析12306首页, 如果是一千万个用户同时点击首页的数据传输量是: 10,000,000*300Kb, 总数是3,000,000Mb, 这样大的数据传输量,就算是用户不反复刷新网站,采用1.5 Gb/s的带宽,满负荷运行,也需要2000秒才能完成。
龙源期刊网 http://www.qikan.com.cn
除对外传输外,web服务器集群、数据库服务器集群、负载均衡设备及网络存储之间,数据传输量也很巨大。虽然大型存储系统常采用fibre channel和fibre channel-to-scsi等技术,对于海量数据的处理也是一个棘手的问题。 1.3 网站存储系统的I/O性能瓶颈
大型网站的数据量非常巨大,在磁盘上读写数据需要大量的时间,也会制约网站性能,就以单个SCSI磁盘为类,每秒传输数据最高可达到320Mb/s, 如果传输1000GB数据,将耗时3000秒,虽然大型网站是采用复杂的快速存储系统,但如此海量数据也需要很长的时间。由于内存速度远快过硬盘,通常采用多级缓存提升网站的性能。 1.4 服务器性能的限制
服务器CPU的速度和数量、内存的容量和性能、总线结构和性能、磁盘的总量和性能、网络操作系统调度资源的能力、网络接口的性能,容错性能,诸多因素影响着服务器性能的提升。根据木桶效应,在突发流量下,服务器性能急剧下降,甚至崩溃,也就不奇怪了。通过对服务器性能的监测,分析限制系统的短板,增加相应资源,改善服务器的性能。 1.5 大型网站的数据库运算量巨大和高并发
大型网站还有很多查询操作,如12306网站,查时间,查座位,查铺位,一个车次不行,又查另一个车次,当查询到合适的票后,就需要对数据库操作,占住库存,当支付结束后,扣除库存,如果是支付超时或取消订单,就会释放库存。
为了保证数据一致性,大型数据库管理系统采用了事务管理,为保证安全性,部分数据进行了加密,安全性和一致性也消耗较多的系统资源,巨大的运算量和高并发很容易导致死锁。 1.6 程序代码多,容易存在内存泄漏问题的程序
大型网站程序代码多,测试非常复杂,容易存在内存泄漏问题的程序,在运行几十上百次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑。
1.7 用户体验设计不合理
很多网站系统繁忙时会提示出错页,“系统繁忙,请稍后再试”, “稍后”具体是多长时间,并没有提醒,用户拼命刷新屏幕,12306网站,春节期间最繁忙时平均点击达到14亿次, 平均每个中国人点一次,如此大的点击量才卖出两百多万张票,可见,百分之九十以上都是无效点击。如何避免无效点击,其重要性胜过单纯扩展带宽和增加服务器的数量。 2 对突发流量的大型网站的几点应对建议
龙源期刊网 http://www.qikan.com.cn
从公开的数据看,世界上最大的电子商务网站,taobao每小时处理订单数达到60万笔,也很难解决类似12306如此大的订单处理量,而且为了春节几十天,购置大量服务器和增加带宽,成本也相当大,本文主要讨论一下软件优化的方法。
对于大型站点如12306来讲,从用户角度讲,四大困难问题,登陆难,查询难,订票难,支付难。通过数据减肥解决登陆难,通过统一查询算法解决查询余票难(查询余票流程也可以分解,分解成查车次和查余票两步),通过批处理和队列解决订票难问题, 通过和大部分网上银行签约解决支付问题,通过改善用户体验避免反复刷新网页。除了和网银签约商务问题不讨论外,下面进行具体研究。 2.1减少数据流量和并发连接数
首页设计需要简单明了,流程具体,如将12306首页大小从300k减少到30k, 其性能可增加10倍以上, Google,baidu等首页不超过25k,就是这个原理。除了将动态页面转为静态页面,减少运算量外,还应减少页面大小和并发连接数。如12306.cn,打开首页有300k,全部下载约900K。打开首页需要建60多个HTTP连接,车票预订页面则有70多个HTTP请求。在1000万个用户并发的情况下,就会有60000万个链接。把js打成一个文件,把css也打成一个文件,把图标也打成一个文件,用 css分块展示。将链接数减到最低,首页提供系统登陆或查询就可以。
2.2 减少运算量,提供车次查询和订票的客户端软件
软件中包含车站和车次等信息, 对于临时客车,才需要更新车次信息,由于临时客车比例比较少,这可以减少80%网络的流量,对于余票信息和订票,可以象证券交易一样,我们不用查询是否有人卖股票,直接下股票买卖订单就行,软件下载可交给一些著名的下载站点,分解服务器的压力。
2.3 基于状态检测的统一查询的优化算法
用户端触发的查询,突发流量下运算量特别巨大,本查询算法考虑系统状态,如服务器CPU负荷、I/O负荷、磁盘系统的最大吞吐量、内存负荷、网络负荷、并发连接数,数据库负荷,根据网络情况自动触发查询。本算法将传统大型网站分散不可控查询算法,变为系统主动触发查询的算法, 只查询需要的余票,不查询全部余票,网站空闲时,实现实时查询,网站繁忙时,采用系统集中统一查询,避免突发巨量查询失控。
本算法和很多网站的throttle技术有本质区别,throttle其实是一个“堵”方案,当服务器达到一定负荷后,限制访问,从而避免网站崩溃。本方案基本思路来自于证券交易中数据定时更新的思路。
2.4 基于状态检测的订单生成算法
龙源期刊网 http://www.qikan.com.cn
在突发流量时,如果大型电子商务网站实时处理,当订单提交给服务器后,通常会锁定客票,在网站负荷比较轻的情况下,马上锁定订单,基本上没有问题。但是几百万人同时购买一个商品时, 如果每买一个就写一次数据库,就会让服务器系统崩溃,采用队列和批量处理的技术,是把一堆基本相同的请求批量处理,可以加快网站处理的速度好多倍。通过队列和批处理,让系统销售客票有序进行,从而加快系统速度。 2.5 基于状态检测的网上排队算法设计
大型网站的系统繁忙会提示,“系统繁忙,请稍后再试”,根据两个数据的分析,一个现在接受了多少任务量task1,另外一个是压力测试得出的系统处理订单的速度S1,计算出一个等待时间Tw=task1/s1,在等待时间内禁止登陆,提示语变成:“系统繁忙,稍后Tw分钟后再试”,部分用户就可能不会反复刷新网站。基于alexa数据分析和铁道部网上售票的数据,大约500次点击才购买一张票,购买一次票有效的点击不超过25次,通过排队算法设计,可以减少90%的无效点击,大大提高网站的性能。 2.6 基于购票规则改进的算法
如果将先订先得游戏规则改进,改为抽签摇号原则,或按年龄优先和妇女儿童优先等,可以避免订票中的诸多问题,由于客票购买包含时间、车次、座位及同乘旅客数目的特殊性,需要详细研究。这样,用户不用整天趴在桌上刷屏订票。具体的算法需要详细研究。无论使用什么算法,都必须进行反复的压力测试,使用工具包括webload、loadrunner,和QAload等。大型站点通常进行网站运行监测分析,如费城证券交易所利用Net Optics多站点光、电分路器(Tap)监测网络,也可以考虑将监测状态数据作为上述算法的参考。 3 总结和展望
本文分析了突发流量下大型电子商务网站的故障原因,并提出了几点网站系统优化的思路和解决方案。除此方案外,有些大型网站技术负责人建议,参照yahoo和facebook的技术方案,采用nosql数据库(Hbase,MongoDB,redis Cassandra),不过其数据一致性和完整性值得研究;还有人提出用网格计算和分布式计算方案,将庞大的订票任务进行分解到各个服务器上。这些方案值得进一步分析和研究。 参考文献:
[1] 周涛,罗佳骏.基于排队理论的网站负载量分析[J]. 遵义师范学院学报,2008(6). [2] 单杏花,徐彦,朱建生,周亮瑾.中国铁路客票发售和预订系统5.0版的关键技术研究[C].中国铁路客票发售和预订系统5.0版应用研讨会论文集,2006.
[3] 宋超,魏颖.探讨集中式售票系统的系统结构[C].中国铁路客票发售和预订系统5.0版应用研讨会论文集,2006.
龙源期刊网 http://www.qikan.com.cn
作者简介:王爱国 (1974-),男,汉族,湖北黄冈人,硕士,信息系统项目管理师,研究方向:信息系统项目管理。
因篇幅问题不能全部显示,请点此查看更多更全内容