当前位置: 首页 > article >正文

【缓存与加速技术实践】Web缓存代理与CDN内容分发网络

文章目录

  • Web缓存代理
    • Nginx配置缓存代理
      • 详细说明
  • CDN内容分发网络
    • CDN的作用
    • CDN的工作原理
    • CDN内容的获取方式
    • 解决缓存集中过期的问题

Web缓存代理

作用:

  • 缓存之前访问过的静态网页资源,以便在再次访问时能够直接从缓存代理服务器获取,减少源服务器的负载压力。
  • 加快用户的访问速度。
  • 可以作为正向代理服务器,隐藏客户端的真实地址。
    常见的Web缓存代理应用:
  • 本地部署:Nginx、Squid、Varnish
  • 云环境使用:CDN

Nginx配置缓存代理

http {
    ......
    # 配置缓存路径和相关参数
    proxy_cache_path /data/nginx/cache levels=1 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
                      # 缓存目录         目录层级   缓存共享内存区域的名称和大小   缓存数据上限    缓存失效时间    不存放临时文件

    upstream XXXX {        # 上游服务器数量 >= 2 时
        server IP:PORT;
        ......
    }

    server {
        listen   IP:PORT;
        server_name  主机名;

        location 匹配静态网页路径 {
            proxy_cache my_cache;                                      # 指定使用的缓存共享内存区域的名称
            proxy_cache_valid 200 60m;                                 # 指定有效缓存的响应状态码和缓存时间
            proxy_cache_key $request_uri;                              # 指定缓存数据的key为请求的URL路径
            add_header Nginx_Cache_Status $upstream_cache_status;      # 添加响应头显示缓存状态,HIT命中缓存  MISS未命中
            proxy_pass http://XXXX;                                    # 设置未命中缓存时的代理转发
        }
    }
}

详细说明

  1. proxy_cache_path:

    • /data/nginx/cache: 指定缓存文件的存储目录。
    • levels=1:2: 缓存目录的层级结构。这里表示使用一级目录和二级子目录来组织缓存文件,有助于提高文件系统性能。
    • keys_zone=my_cache:10m: 定义一个缓存共享内存区域my_cache,大小为10MB,用于存储缓存键和元数据。
    • max_size=10g: 设置缓存的最大容量为10GB。
    • inactive=60m: 如果缓存文件在60分钟内未被访问,则被认为是无效的,并可以被删除。
    • use_temp_path=off: 禁用临时路径的使用,直接写入缓存目录。
  2. upstream XXXX:

    • 定义一个上游服务器组XXXX,包含多个上游服务器。Nginx会根据负载均衡策略(默认是轮询)将请求分发到这些服务器。
  3. server:

    • listen IP:PORT: 指定Nginx监听的IP地址和端口。
    • server_name 主机名: 指定服务器的主机名或域名。
  4. location:

    • 匹配特定的请求路径。
    • proxy_cache my_cache: 使用前面定义的my_cache缓存共享内存区域。
    • proxy_cache_valid 200 60m: 对HTTP状态码为200的响应设置60分钟的缓存有效期。
    • proxy_cache_key $request_uri: 设置缓存数据的键为请求的URL路径。
    • add_header Nginx_Cache_Status $upstream_cache_status: 添加一个响应头,显示缓存状态。
    • proxy_pass http://XXXX: 如果请求未命中缓存,则转发到上游服务器组XXXX进行处理。

CDN内容分发网络

CDN(Content Delivery Network)即内容分发网络,是一种利用分布式节点技术,在全球范围内部署服务器,将源站点服务器的内容发布并缓存到这些服务器上。当用户请求访问这些内容时,可以从最近的CDN节点获取,从而提高用户访问网站的响应速度和体验。

CDN的作用

  1. 缓存Web网站内容:CDN将源站点服务器的静态网页资源(如HTML、CSS、JavaScript、图片等)缓存到全球各地的节点上。
  2. 降低用户网络延迟:用户可以从最近的CDN节点获取所需内容,减少了传输延迟和网络拥塞。

CDN的工作原理

  1. 资源缓存:源站点服务器的静态网页资源首先被缓存到CDN的各个节点上。
  2. 用户请求:当用户请求访问某个资源时,其请求首先到达本地DNS服务器。
  3. DNS解析:本地DNS服务器将请求转发给CDN专用的DNS服务器,后者根据用户的IP地址和请求的URL,选择最靠近用户的CDN节点,并返回该节点的IP地址给用户。
  4. 资源分发:用户向所选的CDN节点发起请求,该节点检查自身缓存中是否有用户所需的资源。如果命中缓存,则直接将资源返回给用户;如果未命中缓存,则节点会向源站点服务器请求资源,获取后同步到自身缓存中,并返回给用户。

CDN内容的获取方式

  1. 用户访问触发:当用户直接访问资源时,CDN节点会检查缓存。如果命中缓存,则直接返回资源;如果未命中,则向源站点服务器请求资源并缓存。
  2. 缓存预热:对于热点资源,可以在其上线前或上线时立即进行缓存预热。这通常是通过预设的脚本或工具来实现的,将热点资源主动推送到CDN的各个节点上,以确保用户访问时能够命中缓存。

解决缓存集中过期的问题

缓存集中过期是指大量缓存内容在同一时间过期,导致CDN节点需要频繁地向源站点服务器请求资源并重新缓存。这会增加源站点服务器的负载压力,并可能导致用户访问延迟。

为了解决这个问题,可以采用二级缓存策略:

  1. 一级缓存:CDN节点上的缓存,通常具有较短的过期时间。
  2. 二级缓存:在CDN节点之后(如运营商网络或用户本地网络)增设一层缓存,具有较长的过期时间。当用户请求资源时,如果一级缓存未命中,则尝试从二级缓存中获取。如果二级缓存也未命中,则向源站点服务器请求资源并同步到一级和二级缓存中。

通过这种方式,可以分散缓存过期的压力,减少源站点服务器的负载,并提高用户访问资源的速度和体验。


http://www.kler.cn/a/385828.html

相关文章:

  • Docker和VMWare有什么不同
  • 存储过程及练习
  • unittest和pytest
  • 【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?
  • R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
  • ESP解释
  • 图像分割1
  • FTP替代方案:FileLink内外网文件摆渡,助力企业安全高效文件传输
  • 【Hadoop实训】Flume系统负载均衡测试
  • Java项目实战II基于Spring Boot的高校教师电子名片系统的设计与实现(开发文档+数据库+源码)
  • Apache POI 操作Word常用方法
  • 【欧拉公式】从无穷级数角度理解
  • SparkCore中的常见问题
  • C#-异步查询示例
  • 理解 WordPress | 第一篇:与内容管理系统的关系
  • HiveSQL面试题
  • 惊爆:抖音小程序广告掘金计划,游戏+广告双赢新趋势!
  • django-tidb版本说明
  • 软考系统架构设计师论文:论边缘计算及其应用
  • 华为市场ASO详解
  • 什么是聚类分析,它在数据分析中的应用是什么
  • [前端]NodeJS常见面试题目
  • 类与对象—中
  • Spark 中的 RDD 分区的设定规则与高阶函数、Lambda 表达式详解
  • 使用Python和Vosk库实现语音识别
  • MATLAB和R及Python亚群差异表达分析