02 架构核心技术之分布式缓存(上)

img

  1. 缓存是架构设计中的一个重要手段,主要特点是技术比较简单,同时对性能提升效果明显,应用场景多,如CPU高速缓存、代理和反向代理缓存、浏览器缓存等等。

  1. 使用缓存需要注意几个关键指标:缓存键集合大小、缓存空间大小以及缓存的使用寿命。这三个指标决定了缓存的有效性、缓存的使用效率和缓存实现的效果,同时也是影响缓存命中率的主要因素。 缓存主要特定是一次写入多次读取,这种手段减少对数据库的使用,尽快从缓存中读取数据,提高系统性能。所以缓存是否有效,主要看一次写入的缓存能不能多次读取处理响应业务请求,这个判断的标准就叫做缓存命中率:

    • 缓存键集合大小:缓存中每个对象都是通过缓存键识别的。从统计学上看,应用生成的唯一键越多,重用的机会越小。如用商品ID作缓存键,就不如根据商品类别做缓存,这样可以获取到更多的数据,利用率高。设计缓存的时候,要注意缓存键的设计上,在一个集合范围内,限定一个即能够高效使用,又可以减少键的数量,这个时候缓存的性能最好。

    • 缓存内存空间大小:由于空间是有限的,所以缓存对象的大小和数据达到一定程度就受到了限制,需要删除老数据,这样就会影响到缓存命中率。所以物理上缓存空间大,缓存对象多,缓存的命中率就高。

    • 缓存对象生存时间(缓存寿命,TTL):对象缓存时间越长,被重用可能性就越高。缓存失效的方法有超时失效和清除失效。空间不够情况下,清除失效中常用的算法为LRU,最近最少使用的数据在空间不够用情况下优先被清除,为新对象腾出空间。

  1. 缓存的类型主要有代理缓存、反向代理缓存、CDN缓存和对象缓存几种。

    • 代理缓存:缓存在客户端一端,代理客户端访问互联网,如交换机或路由器。客户端的缓存我们无法管理,能够管理的是反向代理缓存。

    • 反向代理缓存:代理数据中心输出的,位于数据中心里的,是数据中心的统一入口,代理整个数据中心其他服务器的应用处理。如Nginx,先请求到反向代理服务器,如果有请求的数据就返回,否则再到数据中心获取,获取后返回,同时缓存在反向代理服务器,供下次或其他用户使用。

    • 内容分发网络CDN缓存:CDN不在客户端也不在数据中心,而是介于两者之间,作为网络服务商的缓存服务。用户访问互联网时,需要通过网络服务商提供的网络连接才能到数据中心,那么网络服务商就可以在自己的机房里做一次缓存服务。

  1. 架构中使用最多,也是关注最多的就是分布式缓存,分布式缓存中几个最重要的技术点是:分布式对象缓存的架构、分布式对象缓存的模型和分布式缓存中一个重要的算法—— 一致性哈希算法。 使用缓存时要注意以下几点:

    • 数据频繁修改,这类数据使用缓存效果差;

    • 数据没有热点,这类数据缓存命中率差;

    • 数据不一致,因为缓存数据和数据库数据不是同步的,可能存在数据不一致情况,如果业务场景对数据一致性要求高,这个时候使用缓存要注意;

    • 缓存雪崩,这个时候可能导致整个系统崩溃,也是使用缓存中要注意的重要事项。

  1. 缓存提高性能的优势:

    • 缓存的数据来自内存,访问速度快。

    • 缓存中存储的数据形态通常是最终的结果形态,减少资源消耗。如果不缓存结果形态,则需要通过各种逻辑计算得到。

    • 使用缓存可以降低数据库磁盘或网络的负载压力。磁盘IO或网络IO都是系统出现瓶颈的地方,从缓存中读取数据就减少了IO设备压力,提升系统性能。

  1. 缓存中使用的数据结构主要是哈希表,哈希表最终的存储形式通常是一个顺序表,也就是一个数组结构。

原文地址:https://www.cnblogs.com/hujiapeng/p/13538841.html