a.缓存的基本原理
缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理。一方面缓存访 问速度快,可以减少数据访问的时间,另一方面如果缓存的数据是经过计算处理得到的, 那么被缓存的数据无需重复计算即可直接使用,因此缓存还起到减少计算时间的作用。
缓存主要用来存放那些读写比很高、很少变化的数据,如商品的类目信息,热门词的搜索列表信息,热门商品信息等。应用程序读取数据时,先到缓存中读取,如果读取 不到或数据已失效,再访问,并将数据写入缓存.
b.合理使用缓存
频繁修改的数据:如果缓存中保存的是频繁修改的数据,就会出现数据写入缓存后,应用还来不及读 取缓存,数据就已失效的情形,徒增系统负担。一般说来,数据的读写比在2:1以上,即 写入一次缓存,在数据更新前至少读取两次,缓存才有意义。实践中,这个读写比通常 非常高,比如新浪微博的热门微博,缓存以后可能会被读取数百万次。
没有热点的访问:缓存使用内存作为存储,内存资源宝贵而有限,不可能将所有数据都缓存起来,只能将最新访问的数据缓存起来,而将历史数据清理出缓存。如果应用系统访问数据没有 热点,不遵循二八定律,即大部分数据访问并没有集中在小部分数据上,那么缓存就没有意义,因为大部分数据还没有被再次访问就已经被挤出缓存了。

缓存可用性:缓存是为提高数据读取性能的,缓存数据丢失或者缓存不可用不会影响到应用程序 的处理——它可以从直接获取数据。高性能计算机集群 方案但是随着业务的发展,缓存会承担大部分数据访问的压力,已经习惯了有缓存的日子,所以当缓存服务崩溃时,会因 为完全不能承受如此大的压力而宕机,进而导致整个网站不可用。这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和服务器来恢复网站访问。
实践中,有的网站通过缓存热备等手段提高缓存可用性:当某台缓存服务器宕机时, 将缓存访问切换到热备服务器上。但是这种设计显然有违缓存的初衷,缓存根本就不应 该被当做一个可靠的数据源来使用。通过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上可在一定程度上 改善缓存的可用性。当一台缓存服务器宕机的时候,只有部分缓存数据丢失,重新从数 据库加载这部分数据不会对产生很大影响。
缓存预热:缓存中存放的是热点数据,热点数据又是缓存系统利用LRU (最近最久未用算法) 对不断访问的数据筛选淘汰出来的,这个过程需要花费较长的时间。新启动的缓存系统 如果没有任何数据,在重建缓存数据的过程中,系统的性能和负载都不太好,那 么最好在缓存系统启动时就把热点数据加载好,这个缓存预加载手段叫作缓存预热(warm Up )0对于一些元数据如城市地名列表、类目信息,可以在启动时加载中全部数据 到缓存进行预热。
缓存穿透:如果因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到上,会对造成很大压力,甚至 崩溃。一个简单的对策是将不存在的数据也缓存起来(其value值为mill )。
c.分布式缓存架构
分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其 架构方式有两种,一种是以JBoss Cache为代表的需要更新同步的分布式缓存,一种是以 Memcached为代表的不互相通信的分布式缓存。Memcached曾一度是网站分布式缓存的代名词,被大量网站使用。其简单的设计、 优异的性能、互不通信的服务器集群、海量数据可伸缩的架构令网站架构师们趋之若鹫。
3.2异步操作
使用消息队列将调用异步化,可改善网站的扩展性。高性能计算机集群 方案事实上,使用消息队列还可改善网站系统的性能。在不使用消息队列的情况下,用户的请求数据直接写入,在高并发的情况下, 会对造成巨大的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求 的数据发送给消息队列后立即返回,再由消息队列的消费者进程(通常情况下,该进程 通常独立部署在专门的服务器集群上)从消息队列中获取数据,异步写入。由于 消息队列服务器处理速度远快于(消息队列服务器也比具有更好的伸缩 性),因此用户的响应延迟可得到有效改善。即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。在电子商务网站促销活动中,合理 使用消息队列,可有效抵御促销活动刚开始大量涌入的订单对系统造成的冲击。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-63453-3.html
何为发财