网站性能优化第一定律:优先考虑使用缓存优化性能。
缓存原理
(1)什么是缓存?(将数据存储在相对较高访问速度的介质中,以供系统处理)
(2)缓存的优点:访问速度快,如果需要计算可以减少计算时间
(3)缓存的本质是一张以键值对存储的内存hash表
(4)主要用来存储:读写比例高,很少变化的数据
(5)网站的访问遵循28定律
合理使用缓存应该注意以下问题
(1)频繁更新的数据(数据还没有读就已经失效,一般要求读写比在2:1以上才有意义)
(2)没有热点数据(无疑浪费资源)
(3)数据不一致与脏读(缓存被加载的过程中可能会产生数据不一致,有效时间过程数据在内存中就会变成脏数据)
(4)缓存的可用性(如果太过依赖缓存,容易产生雪崩。使用缓存热备并不能提高缓存的可用性,使用集群可以提高可用性)
(5)缓存预热(LRU计算时间过长,有的数据需要提前加载)
(6)缓存穿透(解决部分数据无法命中,而加重数据库压力的问题,一般设置空值)分布式缓存架构
(1)JBoss Cache:数据相同
(2)Memcached:数据不同互不通信
(3)Memcached5大优点:协议简单、通用性强(支持各种语言)、Libevent网络通信、内存管理高效、互不通信。
在对Web服务器进行优化时要根据真实的Web应用系统的情况和特征来采取有针对性地优化方案。1.根据不同的网络特性来看:
1.1局域网
在局域网中,降低M T U (最大传输单位)值对可以避免复制数据和要求校验,而通过优化select系统调用或在Socket事件处理器中执行计算可以优化请求并发管理,利用HTTP1.1持续连接等都可以使系统性能得到相应的改善但在广域网的环境下却没有什么大的作用,有的甚至恰恰相反。
1.2广域网
在广域网中,终端用户的请求的等待时间依赖于与网络延迟的程度,连接带宽限制情况。对于广域网,软硬中断在网络处理中占有很大的分量,所以采用适应的中断处理机制将会给服务器的响应能力带来很大的好处;将服务器定位在内核和将基于进程设计改为基于事务处理也可以不同程度的提高服务器的性能。
2.关于Web负载
除了对Web负载的特征进行分析以便在评测时更好地再现真实负载之外,还要考虑Web服务器所在的网络环境下负载的情况。人们不仅要求服务器满足正常的工作负载要求,而且在高峰时期依然要保持较高的吞吐量。但是,服务器在高负载的情况下的性能表现往往低于人们的期望。
服务器过载的情况分为两种:
2.1瞬间过载
服务器暂时的、短时间的超载,这种情况主要是由服务器负载的特点引起的。大量的研究表明,Web请求的网络通信量分布是自相似的,即Web请求的通信量可以在很大范围内有显著的变化。这就造成服务器常常短时间的超载,但这样情况持续的时间一般很短
2.2服务器长时间的超载
这种情况一般是由某一特殊事件引起的,例如服务器受到拒绝服务攻击或者发生了“活锁”现象
第一种服务器超载情况是不可避免的,但第二种情况则可以通过对服务器改进来改善。抛开恶意的攻击不算,仔细分析服务器处理信息包的过程可以发现,造成系统在超载情况下性能下降的根本原因是高优先级处理阶段对CPU的不公平抢占。
因此,如果限制高优先级处理阶段对CPU的占用率,或者限制处理高优先级的CPU个数,都可以减轻或者消除收包活锁现象。
具体的可以采用以下的方法:
2.2.1采用轮询机制
为了减少中断对系统性能的影响,在负载正常的情况下采用“下半处理” 的方法就非常有效,而在高负荷情况下,采用这个方法仍然会造成活锁现象,这时可以采用轮询机制。虽然这个方法在负载正常的情况下会造成资源的浪费和响应速度降低,但在网络数据频繁到达服务器时就要比中断驱动技术有效的多。
2.2.2减少上下文切换
这种方法不管服务器在什么情况下对性能改善都很有效,这时可以采用引入核心级(kerne1—leve1)或硬件级数据流的方法来达到这个目的。核心级数据流是将数据从源通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程中因为数据在内存中,因此需要CPU操作数据。
硬件级数据流则是将数据从源通过私有数据总线或是虽等DMA通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程不需要CPU操作数据。这样在数据传输过程中不需要用户线程的介入,减少了数据被拷贝的次数,减少了上下文切换的开销。
2.2.3减低中断的频率(主要是针对高负荷情况的方法)
这里主要有两种方法:批中断和暂时关闭中断。批中断可以在超载时有效的抑制活锁现象,但对服务器的性能没有什么根本性的改进;当系统出现接收活锁迹象时,可以采用暂时关闭中断的方法来缓和系统的负担,当系统缓存再次可用时可以再打开中断,但这种方法在接收缓存不够大的情况下会造成数据包丢失。
四.Web服务器优化总结
Web服务器性能是整个Web系统的关键环节,提高Web服务器的性能也是长久以来人们一直关注的课题。这里通过对Web服务器的工作原理和现有的优化方法和技术的分析,得出了对待Web服务器性能的提高也应该具体问题具体分析,要在具体的应用环境中,根据其特点来采取相应的优化措施。
应用优化解决目前企业面临的性能、安全性和可用性挑战。F5公司从4个方面进行应用优化:一是降低网络传输的压力,其中最典型的一个技术就是压缩。
F5的加速技术可以把100K的页面压缩到20K在广域网上传输,一些标准的浏览器如IE、火狐可以自动解压,这一过程都在后台进行,前台浏览者感觉不出任何变化。该项技术也适用于手机浏览,如UCWEB,对于低带宽高延迟的Web应用加速特别有效。
二是降低服务器的压力,比较典型的技术是连接聚合。
每个人访问网站都会建立一个TCP连接,这个TCP连接是不断建立又关闭的,当快速建立又关闭的时候,对服务器的压力很大。而且服务器能够维持的并发连接是有限的,比如IIS服务器,它的标准并发连接是2048个,阿帕奇服务器是1024个,如果一个网站有几万个并发连接,单个服务器就崩溃了。但是把这些短连接汇聚到一起,集中F5的设备上,通过F5与服务器建立平滑的长连接,就解决了不断增大的并发连接。比如说前台有15万个并发连接,经过F5的优化,在服务器上只有不到5000个并发连接,而且在此过程中,每个人的请求是不会被丢掉的。
三是降低应用的压力,典型技术是动态页面缓存。
这个主要是针对新闻发布类的网站,比如请求一个新闻页面news.jsp?id=1,2,3……F5可以限定ID参数只能为数字,且在3位数之内,这又跟之前的应用安全白名单机制结合在了一起,这样就防止了攻击者随意改变参数让服务器疲于奔命。而且F5可以根据ID参数缓存已经访问过的新闻页面在自身的硬盘设备里,如果下一个访问者的请求ID参数跟曾经访问过的一致,那么该新闻页面的打开速度就明显加快了。
四是利用客户端的浏览器做缓存来提升速度。
当浏览网页的时候,网页会自动缓存到浏览器中,然而在每次重新打开该网页的时候,都会向服务器发送请求判断该网页的内容是否有更新,这一来一去耗费不少时间,而实际上大多数时候网页的内容是不变的。F5可以在每个缓存在浏览器的网页中打上标签,默认半年内无需向服务器发送判断请求,对内容更新的判断则由F5代替,这样就节省了网页打开时间并降低了服务器的压力。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)