[网络服务架构] 多级缓存分层架构

参考博客:https://www.cnblogs.com/xuwc/p/13699205.html

设想一个用户请求数据到返回的过程,数据会经过:

浏览器->CDN->代理服务器->应用服务器->数据库服务器,每个位置都可以使用缓存技术来提高响应速度,降低访问需求量。

例如:浏览器缓存的脱机网页文件、CDN缓存的分发资源、代理服务器缓存的静态资源、应用服务器缓存(进程缓存或缓存中间件)、数据库缓存(包括磁盘缓存等)。

缓存请求顺序是:HTTP缓存、CDN缓存、代理服务器缓存、进程缓存、分布式缓存、数据库

1.HTTP缓存

浏览器自行维护的缓存,当发出同一个请求的时候会根据缓存策略读取本地服务信息,如果找不到数据再请求服务器。

强制缓存

若本地有请求结果的缓存,那么直接使用缓存数据,通常会在HTTP Header中设置字段Expires和Cache-Control(结果缓存过期时间)。

对比缓存(实质上是交由服务端判断缓存是否过期)

首次请求时服务器除返回数据外,还记录数据的标识。

后续请求会携带这个数据标识,若服务端判断数据未变化,则返回状态码304并不携带报文体。

标识规则有:

1)Last-Modified/If-Modified-Since

即标识为资源最后修改时间,服务端对比请求给出的修改时间和本地资源的修改时间。

服务端返回Last-modified,客户端请求携带的字段是If-Modified-Since

2)ETag/If-None_Match

将服务器资源进行哈希计算得到哈希串作为ETag。

客户端下次请求会将ETag作为If-None-Match发送。

2.CDN缓存

即内容分发网络,其工作原理为:

a)客户端发送URL给DNS服务器

b)DNS解析完域名,将请求指向CDN网络中的DNS负载均衡器

c)负载均衡器将最近的CDN节点IP返回给DNS,DNS返回给客户端

d)客户端将CDN节点当作服务器地址进行请求

e)CDN从服务端获取资源并返回,同时缓存数据,若下次有相同请求则从缓存返回数据

CDN的作用为:

a)提高响应速度

b)进行负载均衡

c)进行资源缓存

注:HTTP缓存中提到的对比缓存可以在CDN服务器上对比判断

3.负载均衡缓存

负载均衡器在客户端和服务器之间,或者CDN和服务器之间。常见的是Nginx。

可以缓存一些静态信息。

4.进程内缓存

服务器中服务实例或其容器维护的缓存。

例如Java的JVM托管堆缓存。

在请求数据的时候会尝试读取进程内缓存,若未命中则去进程外缓存(系统缓冲区等)或分布式缓存搜索。

比较常见的架构有:Ehcache、GuavaCache、Caffeine,它们可以将热点数据方入进程内缓存。

进程内缓存适合只读数据和高并发需求场景(可以预先将数据存入内存以备使用)。

5.分布式缓存

进程外部的缓存,可以存在同一台物理主机上,也可以是分布在不同物理节点。其优势在于可以拥有更大的缓存容量,并且有专门的进程管理缓存更新、确保一致性以及节点崩溃后的缓存数据预加载。

典型的分布式缓存是多节点模型(哨兵、主从、集群等)下的redis。

posted @ 2021-10-26 11:16  Cheung-10  阅读(16)  评论(0)    收藏  举报