ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 软件工程 >> 应用服务器性能优化总结

应用服务器性能优化总结(1/3)

来源:网络整理     时间:2016-04-11     关键词:性能优化,服务器

本篇文章主要介绍了"应用服务器性能优化总结",主要涉及到性能优化,服务器方面的内容,对于软件工程感兴趣的同学可以参考一下: 别人推荐看的《大型网站技术架构》买回来有一年多了,一直没看,看着落满灰尘的书,真的是于心不忍。趁着这个周末没事,赶快来研究一下,顺便做个笔记。应用服务器就是处理...

别人推荐看的《大型网站技术架构》买回来有一年多了,一直没看,看着落满灰尘的书,真的是于心不忍。趁着这个周末没事,赶快来研究一下,顺便做个笔记。

应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多的地方,优化手段主要有缓存、集群、异步等。

一、分布式缓存

在整个网站应用中,缓存几乎无处不在,既存在于浏览器也存在于应用服务器和数据库服务器;既可以对数据缓存,也可以对文件缓存,还可以对页面片段缓存。合理使用缓存,对网站性能优化意义重大。
网站性能优化第一定律:优先考虑使用缓存。

1、缓存的基本原理

缓存是指将数据存储在相对较高访问速度的存储介质中。

(1)访问速度快,减少数据访问时间;
(2)如果缓存的数据进过计算处理得到的,那么被缓存的数据无需重复计算即可直接使用,因此缓存还起到减少计算时间的作用。

缓存的本质是一个内存Hash表,以一对Key、Value的形式存储在内存Hash表中,读写时间复杂度为O(1)。

缓存主要用来存放那些读写比很高、很少变化的数据,如商品的类目信息,热门词的搜索列表信息,热门商品信息等。应用程序读取数据时,先到缓存中读取,如果读取不到或数据已失效,再访问数据库,并将数据写入缓存。

linux服务器性能优化,web服务器性能优化,服务器性能优化方案,如何优化服务器性能,mysql服务器性能优化,游戏服务器性能优化,tomcat服务器性能优化,apache服务器性能优化,优化服务

网站数据访问通常遵循二八定律,即80%的访问落在20%的数据上,因此利用Hash表和内存的高速访问特性,将这20%的数据缓存起来,可很好地改善系统性能,提高数据存取速度,降低存储访问压力。

2、合理使用缓存

不合理使用缓存非但不能提高系统的性能,还会成为系统的累赘,甚至风险。

频繁修改的数据

如果缓存中保存的是频繁修改的数据,就会出现数据写入缓存后,应用还来不及读取缓存,数据就已经失效,徒增系统负担。一般来说,数据的读写比在2:1(写入一次缓存,在数据更新前至少读取两次)以上,缓存才有意义。

没有热点的访问

如果应用系统访问数据没有热点,不遵循二八定律,那么缓存就没有意义。

数据不一致与脏读

一般会对缓存的数据设置失效时间,一旦超过失效时间,就要从数据库中重新加载。因此要容忍一定时间的数据不一致,如卖家已经编辑了商品属性,但是需要过一段时间才能被买家看到。还有一种策略是数据更新立即更新缓存,不过这也会带来更多系统开销和事务一致性问题。

缓存可用性

缓存会承担大部分数据库访问压力,数据库已经习惯了有缓存的日子,所以当缓存服务崩溃时,数据库会因为完全不能承受如此大压力而宕机,导致网站不可用。这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复。
实践中,有的网站通过缓存热备份等手段提高缓存可用性:当某台缓存服务器宕机时,将缓存访问切换到热备服务器上。但这种设计有违缓存的初衷,缓存根本就不应该当做一个可靠的数据源来使用。
通过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上可在一定程度上改善缓存的可用性。当一台缓存服务器宕机时,只有部分缓存数据丢失,重新从数据库加载这部分数据不会产生很大的影响。

缓存预热(warm up)

缓存中存放的是热点数据,热点数据又是缓存系统利用LRU(最近最久未用算法)对不断访问的数据筛选淘汰出来,这个过程需要花费较长的时间。新系统的缓存系统如果没有任何数据,在重建缓存数据的过程中,系统的性能和数据库负载都不太好,那么最好在缓存系统启动时就把热点数据加载好,这个缓存预加载手段叫缓存预热。对于一些元数据如城市地名列表、类目信息,可以在启动时加载数据库中全部数据到缓存进行预热。

缓存穿透

如果因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,会对数据库造成压力,甚至崩溃。一个简单的对策是将不存在的数据也缓存起来(其value为null)。

3、分布式缓存架构

相关图片

相关文章