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

【缓存与加速技术实践】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节点之后(如运营商网络或用户本地网络)增设一层缓存,具有较长的过期时间。当用户请求资源时,如果一级缓存未命中,则尝试从二级缓存中获取。如果二级缓存也未命中,则向源站点服务器请求资源并同步到一级和二级缓存中。

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

相关文章:

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

文章目录 Web缓存代理Nginx配置缓存代理详细说明 CDN内容分发网络CDN的作用CDN的工作原理CDN内容的获取方式解决缓存集中过期的问题 Web缓存代理 作用: 缓存之前访问过的静态网页资源,以便在再次访问时能够直接从缓存代理服务器获取,减少源…...

MySQL的约束和三大范式

一.约束 什么是约束,为什么要用到约束? 约束就是用于创建表时,给对应的字段添加对应的约束 约束的作用就是当我们用insert into时,如果传入的数据有问题,不符合创建表时我们定的规定,这时MySQL就会自动帮…...

Unity网络通信(part7.分包和黏包)

目录 前言 概念 解决方案 具体代码 总结 分包黏包概念 分包 黏包 解决方案概述 前言 在探讨Unity网络通信的深入内容时,分包和黏包问题无疑是其中的关键环节。以下是对Unity网络通信中分包和黏包问题前言部分的详细解读。 概念 在网络通信中,…...

练习题 - DRF 3.x Overviewses 框架概述

Django REST Framework (DRF) 是一个强大的工具,用于构建 Web APIs。作为 Django 框架的扩展,DRF 提供了丰富的功能和简洁的 API,使得开发 RESTful Web 服务变得更加轻松。对于想要在 Django 环境中实现快速且灵活的 API 开发的开发者来说,DRF 是一个非常有吸引力的选择。学…...

Linux 经典面试八股文

快速鉴别十个题 1,你如何描述Linux文件系统的结构? 答案应包括对/, /etc, /var, /home, /bin, /lib, /usr, 和 /tmp等常见目录的功能和用途的描述。 2,在Linux中如何查看和终止正在运行的进程? 期望的答案应涵盖ps, top, htop, …...

Filter和Listener

一、Filter过滤器 1 概念 可以实现拦截功能,对于指定资源的限定进行拦截,替换,同时还可以提高程序的性能。在Web开发时,不同的Web资源中的过滤操作可以放在同一个Filter中完成,这样可以不用多次编写重复代码&#xf…...

Go 项目中实现类似 Java Shiro 的权限控制中间件?

序言: 要在 Go 项目中实现类似 Java Shiro 的权限控制中间件,我们可以分为几个步骤来实现用户的菜单访问权限和操作权限控制。以下是一个基本的实现框架步骤: 目录 一、数据库设计 二、中间件实现 三、使用中间件 四、用户权限管理 五…...

【Javascript】-一些原生的网页设计案例

JavaScript 网页设计案例 1. 动态时钟 功能描述&#xff1a;在网页上显示一个动态更新的时钟&#xff0c;包括小时、分钟和秒。实现思路&#xff1a; 使用 setInterval 函数每秒更新时间。获取当前时间并更新页面上的文本。 代码示例&#xff1a;<div id"clock"…...

SpringBoot开发——Spring Boot 3种定时任务方式

文章目录 一、什么是定时任务二、代码示例1、 @Scheduled 定时任务2、多线程定时任务3、基于接口(SchedulingConfigurer)实现动态更改定时任务3.1 数据库中存储cron信息3.2 pom.xml文件中增加mysql依赖3.3 application.yaml文件中增加mysql数据库配置:3.4 创建定时器3.5 启动…...

Flutter鸿蒙next 实现长按录音按钮及动画特效

在 Flutter 中实现长按录音按钮并且添加动画特效&#xff0c;是一个有趣且实用的功能。本文将通过实现一个具有动画效果的长按录音按钮&#xff0c;带领你一步步了解如何使用 Flutter 完成这个任务&#xff0c;并解释每一部分的实现。 一、功能需求 我们需要一个按钮&#xf…...

【计网】实现reactor反应堆模型 --- 框架搭建

没有一颗星&#xff0c; 会因为追求梦想而受伤&#xff0c; 当你真心渴望某样东西时&#xff0c; 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 前言2 框架搭建3 准备工作4 Reactor类的设计5 Connection连接接口6 回调方法 1 …...

力扣中等难度热题——长度为K的子数组的能量值

目录 题目链接&#xff1a;3255. 长度为 K 的子数组的能量值 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;通过连续上升的长度判断 Java写法&#xff1a; C写法&#xff1a; 相比与Java写法的差别 运行时间 时间复杂…...

JSON格式

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人和机器阅读和解析。它基于JavaScript的对象表示法&#xff0c;但被广泛用于多种编程语言。 JSON中的数据类型 字符串&#xff08;String&#xff09;&#xff1a;用双引…...

O-RAN前传Spilt Option 7-2x

Spilt Option 7-2x 下行比特处理上行比特处理相关文章&#xff1a; Open Fronthaul wrt ORAN 联盟被称为下层拆分(LLS)&#xff0c;其目标是提高电信市场的灵活性和竞争力。下层拆分是指无线电单元(RU) 和分布式单元(DU) 之间的拆分。 O-RAN前传接口可以在 eCPRI 上传输。eCPR…...

【GeoJSON在线编辑平台】(2)吸附+删除+挖孔+扩展

前言 在上一篇的基础上继续开发&#xff0c;补充上吸附功能、删除矢量、挖孔功能。 实现 1. 吸附 参考官方案例&#xff1a;Snap Interaction 2. 删除 通过 removeFeature 直接移除选中的要素。 3. 挖孔 首先是引入 Turf.js &#xff0c;然后通过 mask 方法来实现挖孔的…...

确定图像的熵和各向异性 Halcon entropy_gray 解析

1、图像的熵 1.1 介绍 图像熵&#xff08;image entropy&#xff09;是图像“繁忙”程度的估计值&#xff0c;它表示为图像灰度级集合的比特平均数&#xff0c;单位比特/像素&#xff0c;也描述了图像信源的平均信息量。熵指的是体系的混乱程度&#xff0c;对于图像而言&#…...

大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

算法通关(3) -- kmp算法

KMP算法的原理 从题目引出 有两个字符串s1和s2,判断s1字符串是否包含s2字符串&#xff0c;如果包含返回s1包含s2的最左开头位置&#xff0c;不包含返回-1&#xff0c;如果是按照暴力的方法去匹配&#xff0c;以s1的每个字符作为开头&#xff0c;用s2的整体去匹配&#xff0c;…...

5G网卡network connection: disconnected

日志 5G流程中没有报任何错误&#xff0c;但是重新拿地址了&#xff0c;感觉像是驱动层连接断开了,dmesg中日志如下&#xff1a; [ 1526.558377] ippassthrough:set [ ip10.108.40.47 mask27 ip_net10.108.40.32 router10.108.40.33 dns221.12.1.227 221.12.33.227] br-lan […...

微积分复习笔记 Calculus Volume 1 - 4.9 Newton’s Method

4.9 Newton’s Method - Calculus Volume 1 | OpenStax...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...