分布式缓存(一)——认识缓存

    1、缓存:是存储在计算机上的一个原始数据复制集,以便于访问。缓存在不同的场景有着不同的意义,采用的技术手段也不一样。不涉及操作系统和硬件的缓存,根据在软件系统中所处位置的不同,缓存可分为:

  • 客户端缓存
  • 服务端缓存
  • 网络中的缓存

    根据规模和部署方式缓存也可分为:

  • 单体缓存
  • 缓存集群
  • 分布式缓存

    2、为什么使用缓存?

    最主要的因素是用户体验。用户体验是主观的且注重实际应用,被使用者的状态、系统性能及环境等因素影响。其中系统性能是软件产品自身对用户体验的关键性因素之一,系统性能的指标一般包括:

  • 响应时间:系统对用户请求做出响应的时间=网络传输时间+应用延迟时间。
  • 延迟时间:系统实际处理请求所需的时间。
  • 吞吐量:系统在单位时间内处理请求的数量。
  • 并发用户数:系统可以同时承载的正常使用系统功能的用户数量。
  • 资源利用率:反映的是一段时间内资源平均被占用的情况。

    使用缓存技术,可以降低系统的响应时间,减少网络传输时间和应用延迟时间,进而提供了系统的吞吐量,增加了系统的并发用户数。

    3、从网站的架构发展看缓存

    这里列举一张大型网站的架构示意图如下:

分布式缓存(一)——认识缓存_第1张图片

    (1)最初网站可能就是一台物理主机,上面运行应用服务器和数据库,由于用户访问量增加可能会将应用和数据库服务器分离,这样能支撑更高的流量

    (2)访问量进一步提升,开始考虑缓存机制。首先可以采用静态页面缓存,这样不需要修改程序就可减少web服务器压力和数据库连接资源的竞争。随后进一步考虑动态缓存,将相对静态的部分缓存

    (3)访问量的持续增加,这时考虑数据缓存,降低数据库负载

    (4)访问量的再度增加,开始增加web服务器,这时需要使用缓存同步机制以及共享文件系统或共享存储等

    (5)数据库调优,采用数据库集群以及分库分表策略。该阶段就需要采用分布式缓存了

    4、客户端缓存

    主要包括:页面缓存、浏览器缓存、APP上的缓存。

    页面缓存一是页面自身对某些元素或全部元素进行缓存,二是服务端将静态页面或动态页面的元素进行缓存然后给客户端使用。如h5的离线缓存和本地存储。

    浏览器缓存是根据一套与服务器约定的规则进行工作的:检查以确保副本是最新的,通常只要一次会话。如在用户触发“后退”操作或点击一个之前看过的链接的时候,浏览器缓存会很管用。

    APP缓存成功应用的关键在于如何对于业务组件透明,以及缓存数据的及时更新。APP可以将内容缓存在内存、文件或本地数据库(如SQLite)中,但基于内存的缓存要谨慎使用。

    5、网络中的缓存

    网络中的缓存位于客户端和服务端之间,代理或响应客户端的网络请求,从而对重复的请求返回缓存中的数据资源。同时接受服务端的请求,更新缓存中的内容。主要包括:

  • Web代理缓存:常用的web代理分为正向代理、反向代理和透明代理。Web代理缓存是将web代理作为缓存的一种技术。一般情况下默认说的是正向代理:用户访问——>互联网——>代理服务器——>应用服务器。反向代理与正向代理相反,对于客户端而言代理服务器就相像是源服务器,最常见的如nginx。透明代理是指客户端不需要知道有代理服务器的存在,由代理服务器改变客户端请求的报文字段,并传送真实IP,加密的透明代理属于匿名代理。
  • 边缘缓存:反向代理服务缓存可以缓存原始服务器的资源特别是一些静态数据比如文件和图片,如果这些反向代理服务器能够做到和用户来自同一个网络,那么用户访问就会得到很高的质量的响应速度,可以将这样的反向代理缓存称为边缘缓存。最典型的应用如CDN。

    6、服务端缓存

    服务端缓存是整个缓存体系中的重头戏,主要可分为如下几类:

    (1)数据库缓存:属于IO密集型的应用,主要负责数据的管理及存储。是数据库自身的缓存机制,如MySQL中的查询缓存机制,将select语句和查询结果存放在缓冲区中,节省查询时间和提高查询效率。见query cache主要参数query_cache_size和query_cache_type,可通过show variables查询以及通过show status like 'Qcache'的几个参数看query_cache_size设置是否合理。

    (2)平台级缓存:在Java中有很多缓存框架,如Ehcache,Cacheonix,Voldemort,JBoss Cache,OSCache等。

    (3)应用级缓存:需要开发者通过代码来实现缓存机制,如作为应用级缓存的主要有Redis,MongoDB,Memcached等



你可能感兴趣的:(分布式缓存(一)——认识缓存)