焦点五:系统该如何优化?
系统优化是必不可少的环节,每一个成熟的网站和系统都是通过不断优化而来的。而12306网站最早暴露出来的也是优化问题,随后经过网友深挖,从12306网站前端的网页设计到后端的数据、缓存、负载均衡、数据分区等一系列问题都提出不同的优化方案。
12306网站前端性能优化技术分析
从时间上来看,首先引发12306网站拥堵的是网页的问题,从12306的首页来看,其总文件大小在900K左右,在极端情况下,如果所有人都是第一次访问的话,那么每个人都需要下载1M大小的文件,如果需要在两分钟内返回的话,那么所需的带宽需要66Gbps,当然这是极端的情况。那么在这种情况下就需要对网页大小进行调整,尽量少用图片,因为图片非常消耗带宽,在这种高并发的情况下,即使1K大小的文件也极有可能引发“蝴蝶效应”。
同时,由于对12306网站的访问是部分地域的,可能不同的Web服务器承受这不同的压力,这种情况下可通过DNS负载均衡器将用户访问平均分配到各个Web服务器上,因为Http的请求都是短时的,所以很简单的负载均衡器就能完成这一动作。并且,CDN在这个环节能够提供很大的帮助。
并且,IBM 软件架构师景文童认为,12306网站在后期应该增加对智能移动终端的支持,那么从当前的整体带宽来看,尽量不用或少用图片,并对网页进行优化将有助于提高网站的访问速度。在都不是非首次访问的前提下,浏览器会缓存相当一部分内容,这就会明显减少带宽占用,于是负载一下子从前端迁移到了后端,数据处理瓶颈一下就凸显出来,访问者不断刷出的500错误即是明证。
除了上述所说的这些之外,还可通过减少前端网页的链接数、页面静态化以及之前提到的缓存技术来对网站前端进行优化。这些方法能够明显解决用户无法登陆或者访问缓慢等问题,但并不能解决问题真正的实质——购票。因为涉及到对数据库进行查询以及写入等操作,后端优化就显得尤为重要。
12306网站后端性能优化技术分析
关于后端性能优化技术,陈皓在其博客中表示,可通过数据冗余、数据镜像、数据分区以及后端的动态负载均衡来达到提高访问速度的目的。
数据冗余就是将数据库的数据冗余处理,也就是减少表连接这样的开销比较大的操作,但这样会牺牲数据的一致性。但这样做的风险较大,并且现在常用的方法就是利用NoSQL来做数据,数据冗余了,访问加快了,但是数据一致性就会存在较大的问题。
利用后端优化来提高访问速度的第二个方法则是数据镜像,现在几乎所有的主流数据库都支持镜像。镜像的好处就是可以做负载均衡。把一台数据库的负载均分到多台上,同时又保证了数据一致性(Oracle的SCN)。最重要的是,这样还可以有高可用性,一台废了,还有另一台在服务。但数据镜像后的数据一致性仍然是一个复杂的问题,因为要对单条数据进行分区,将其均分到不同的服务器上。
数据镜像不能解决的一个问题就是数据表里的记录太多,导致数据库操作太慢。所以,把数据分区。数据分区有很多种做法,一般来说,数据分区包含以下几种主要的方式:把数据把某种逻辑来分类、把数据按字段分,也就是竖着分表、平均分表或者同一数据分表等。关于各种方式的优缺点可查看《前后端并重 由12306.cn谈网站性能技术》。http://storage.it168.com/a2012/0117/1303/000001303243_2.shtml
数据分区可以在一定程度上减轻负载,但是无法减轻热销商品的负载,对于火车票来说,可以认为是大城市的某些主干线上的车票。这就需要使用数据镜像来减轻负载。使用数据镜像,你必然要使用负载均衡,在后端,我们可能很难使用像路由器上的负载均衡器,因为那是均衡流量的,因为流量并不代表服务器的繁忙程度。因此,我们需要一个任务分配系统,其还能监控各个服务器的负载情况。当然服务器负载均衡的技术有很多,每种方法都有各自的优缺点,这个可能要根据实际情况进行选择。