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

Web代理缓存

Web代理几乎是伴随着互联网诞生的,常用的Web代理分为正向代理、反向代理和透明代理。Web代理是将Web代理作为缓存的一种技术。

一般情况下,Web代理默认说的是正向代理,如下图所示。

为了从源服务器取得内容,用户向代理服务器发送一个请求并指定目标服务器,然后代理服务向源服务器转交请求并将获得的内容返回给客户端。一般的,客户端要进行一些特别的设置才能使用正向代理。

反向代理与正向代理相反,对于客户端而言代理服务器就像是源服务器,并且客户端不需要进行设置。客户端向反向代理发送普通请求,接着反向代理将判断向何处转发请求,并将从源服务器获得的内容返回给客户端。

透明代理的意思是客户端根本不需要知道有代理服务器的存在,由代理服务器改变客户端请求的报文字段,并会传送真实的IP地址。加密的透明代理属于匿名代理,不用设置就可以使用代理了。透明代理的例子就是时下很多公司使用的行为管理软件。

这里的Web代理缓存是指使用正向代理的缓存技术。Web代理缓存的作用跟浏览器的内置缓存类似,只是介于浏览器和互联网之间。

当通过代理服务器进行网络访问时,浏览器不是直接到Web服务器去取回网页而是向Web代理发出请求,由代理服务器来取回浏览器所需要的信息并传送给浏览器。而且,Web大力缓存有很大的存储空间,不断将新获取的数据存储到本地的存储器上,如果浏览器所请求的数据在Web代理的缓存上已经存在而且是最新的,那么就不重新从Web服务器取数据,而是直接将缓存的数据传送给用户的浏览器,这样就能显著的提高浏览速度和效率。对于企业而言,使用Web代理既可以节省成本,又能提高性能。

对于Web代理缓存而言,较流行的是Squid,他支持建立复杂的缓存层级结构,拥有详细的日志、高性能缓存以及用户认证支持。Squid同时支持各种插件,例如,Squid Guard就是一个提供URL过滤的插件,对于屏蔽某些站点和内容十分有用。如果需要分析Squid的各种指标,webalizer应该是个不错的选择。

如果有兴趣的话,可以进一步了解一下Squid的内部机制,如下图所示。

边缘缓存

使用Web反向代理服务器和使用正向代理服务器一样,可以拥有缓存的作用,反向代理缓存可以缓存原始资源服务器的资源,而不是每次都要向原始资源服务器请求数据,特别是一些静态的数据,比如图片和文件,很多Web服务器就具备反向代理的功能,比如大名鼎鼎的Nginx。

如果这些反向代理服务器能够做到和用户来自同一个网络,那么用户访问反向代理服务器,就会得到很高质量的响应速度,所以可以将这样的反向代理缓存称为边缘缓存。边缘缓存在网络上位于靠近用户的一侧,可以处理来自不同用户的请求,主要用于向用户提供静态的内容,以减少应用服务器的介入。边缘缓存的一个有名的开源工具就是Varnish,在默认情况下进行保守缓存。也就是说,Varnish只缓存他所知的安全内容。Varnish的一个特性是使用虚拟内存,精妙之处在于利用了操作系统的管理机制。Varnish可以高度定制如何处理请求,缓存哪些内容。

如果感兴趣,可以进一步了解Varnish后端的内部机制,如下图所示。

边缘缓存中典型的商业化服务就是CDN了,例如AWS的Cloud Front,我国的ChinaCache等,现在一般的公有云服务商都提供了CDN服务。CDN是Content Delivery Network的简称,即“内容分发网络”的意思。使用CDN之后,客户端与服务器通信如下图所示。

CDN边缘节点的缓存策略因服务商不同而有所变化,但一般都会遵循HTTP标准协议,通过HTTP响应头中的Cache-control:max-age的字段来设置CDN边缘节点的数据缓存时间。当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。

CND服务商一般会提供基于文件后缀、目录等多个维度来指定在CDN上的缓存时间,为用户提供更精细化的缓存管理。CDN上的缓存时间会对“回源率”产生直接的影响。若数据在CDN上的缓存时间较短,则CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大了访问延时;若数据在CDN上的缓存时间太长,会带来数据更新时间慢的问题。开发者需要针对各自特定的业务,来做特定的数据缓存时间管理。

一般的,CDN边缘节点对开发者来说是透明的,开发者可以通过CDN服务商提供的“刷新缓存”接口来清理位于CDN边缘节点上的缓存数据。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制要求CDN边缘节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。

缓存:网络中的缓存。相关推荐

  1. android glide不缓存,Glide中的缓存

    本文主要介绍了如何配置和管理Glide中的缓存,其中大部分内容都可以直接在官方Wiki中找到,这里只是进行了整理和汇总.言归正传,Glide支持图片的二级缓存(并不是三级缓存,因为从网络加载并不属于缓 ...

  2. mysql 几级缓存_Mysql中一级缓存二级缓存区别

    一级缓存: 也称本地缓存,sqlSession级别的缓存.一级缓存是一直开启的:与数据库同一次会话期间查询到的数据会放在本地缓存中. 如果需要获取相同的数据,直接从缓存中拿,不会再查数据库. 一级缓存 ...

  3. 05-如何全部清除redis缓存数据库中的缓存数据

    在redis缓存数据库的使用过程中,有时会遇到因为连接不同的数据库导致redis缓存数据库中缓存了多个数据库的信息,产生脏数据进而影响程序的正常运行 如何一次性清除所有的缓存数据让redis重新缓存? ...

  4. php微信网页不缓存,微信中浏览器缓存了不该缓存的网页?

    服务端 用的 python的flask框架 返回静态文件代码如下 flask.send_file('../static/js/main.js',cache_timeout=0) request hea ...

  5. 广域虚拟数据空间中边缘缓存系统的研究与实现

    点击上方蓝字关注我们 广域虚拟数据空间中边缘缓存系统的研究与实现 霍建同1,2, 肖利民1,2, 霍志胜1,2, 徐耀文1,2 1 软件开发环境国家重点实验室,北京 100191 2 北京航空航天大学 ...

  6. java中一级缓存_JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  7. 架构专家高磊:缓存为王——无线缓存架构优化

    高磊 微软架构专家 读完需要 12 分钟 速读仅需 4 分钟 高磊,一线架构师,具有多年架构和研发经验:曾就职于阿里.华为等公司,专注于云计算.微服务体系等领域. 1 无线缓存的定义.限制条件及影响 ...

  8. 容迟网络中的路由算法笔记(三)

    第三章 基于地理信息的路由算法 背景:为了提高消息成功投递的可能性,一种普遍受认可的方式是采用基于洪泛的多副本策略,通过引入更多的消息副本,增大消息与目的节点相遇的机会.为了实现消息的受控洪泛,减少消 ...

  9. 修改console缓存大小_更改缓存的行大小将如何影响其他参数?

    修改console缓存大小 Prerequisites: Memory mapping and its types 先决条件: 内存映射及其类型 While designing a cache sys ...

最新文章

  1. 选择排序-直接选择排序
  2. dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
  3. linux 文件系统覆盖目录,Linux内核裁减及根文件系统定制
  4. cpu只能单通道是什么表现_【小白入门】为什么要组内存双通道?
  5. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...
  6. 在 SSD 上使用 btrfs 文件系统的相关优化
  7. webpack--安装,使用
  8. P3924 康娜的线段树
  9. 【完美】mac word2016 安装 endnote x9
  10. 伟大的通信使者——JSON(JavaScript版本)
  11. 孙鑫VC学习笔记:第十八讲 ActiveX 控件
  12. 火柴棍游戏c语言,C语言题目
  13. logback.xml和日志输入格式说明
  14. 汉澳sinox载入ntfs硬盘,移动ntfs硬盘,u盘 并读写完全成功
  15. 电影网站 php asp,asp电影网址导航大全 V20201218
  16. 安装卸载Oracle
  17. 的统一,展现出更深远的思想,使读者领会更深的道理。 语言优美:所谓优美,就是指散文的语言清新明丽(也美丽
  18. offsetof 详解
  19. http 请求包含哪几个部分,分别有何作用?
  20. 好牛逼的技术——Android运行时Crash自动恢复框架:Recovery

热门文章

  1. 多核时代:并行程序设计探讨(7)——并行编程模式概览
  2. echarts 饼状图 扇面上显示 文字和百分比
  3. php获取手机ime,关于IME
  4. 黑马程序员C语言基础(第二天)(linux相关操作)
  5. 常用的正则表达式验证
  6. iOS 支付宝支付及授权
  7. 《时代》杂志公布2023年全球最具有影响力的100家公司名单 | 美通社头条
  8. 携程--数据运营、数据分析
  9. H5页面使用html2canvas实现div+图片生成为图片
  10. title,description,keywords有什么价值?