技术干货:使用静态缓存提升网站性能的五种方法!

news/2024/5/10 2:16:57/文章来源:https://blog.csdn.net/qq_21956483/article/details/78720345

摘要: 静态缓存,一般指web类应用中,将图片、js、css、视频、html等静态文件/资源通过磁盘/内存等缓存方式,提高资源响应方式,减少服务器压力/资源开销的一门缓存技术。本文主要通过五个方面展开,跟着小编一起来看看吧~

6d000037ed7b90463d0

本文作者: 乔锐杰 现担任上海驻云信息科技有限公司运维总监/架构师。曾任职过黑客讲师、java软件工程师/网站架构师、高级运维、阿里云架构师等职位。维护过上千台服务器,主导过众安保险、新华社等千万级上云架构。在云端运维、分布式集群架构等方面有着丰富的经验。

以下正文

上次写了一篇数据库缓存,由于快餐式的风格,遭到了广大读友的吐槽。上篇风格有点 “ 虚 ”,我本身是一个技术控,偏向经验/干货的分享,本文主要描述静态缓存方面的一些心得及分享。作为系列二,有所不足之处,依旧希望大家踊跃“ 亮砖 ”。

说起静态缓存技术,CDN是经典代表之作。静态缓存技术面非常广,涉及的开源技术包含apache、Lighttpd、nginx、varnish、squid等。

静态缓存,一般指 web 类应用中,将图片、js、css、视频、html等静态文件/资源通过磁盘/内存等缓存方式,提高资源响应方式,减少服务器压力/资源开销的一门缓存技术。

本文主要通过:浏览器缓存、磁盘缓存、内存缓存、nginx的内存缓存、CDN五个方面围绕静态缓存而展开。

一、浏览器缓存

浏览器缓存,也称为客户端缓存,是静态缓存中最常见最直接的表现形式,很多时候都往往被人忽略掉。

案例1:

我们经常在nginx的配置文件中看到以下缓存配置:

6d000037ed9f276fc6c

案例2:

在经常写 jsp 的时候,html 标签中关于 http 头信息也可以注意到“ expires ”的字样:

6d100037e15c8ded90d

对于案例1和案例2中(nginx设置的expires优先级大于代码中设置的expires优先级),expires是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。如果文件变动较频繁,就不要使用 expires 来缓存。

比如对于常见类web网站来说,css 样式和 js 脚本基本已经定型,所以最适合的方法是 expires 来缓存一些内容到访问者浏览器。

案例3:

通过 chrome 访问服务器端的一张图片,用F12键打开开发者前端调试工具:

6d000037eda08b47417

第一次访问,响应200状态,当第二次及后续访问的时候,变成304状态,客户端已经开始获取浏览器缓存内容,而不需要去服务器端获取对应的请求内容,即 nginx 中 expires 参数设置已经生效。等待客户端缓存时间过期后,会再次请求服务器端内容来更新本地缓存。

6d000037edbc442d9b9

介绍到这里,突然想起一个有意思的需求。比如,访问一张静态文件,不想客户端缓存,需要每次都去服务器端取数据。我们可以用“ last-modified ”参数来实现,即“ last-modified ”是根据文件更新时间来确定是否再次发送加载。

Nginx核心配置如下:

6d000037ed8acbc1f97

我们更改掉服务器传回客户端的“ last-modified ”文件修改时间参数的值,这样导致客户端本地保存的文件时间每次跟服务器端传回来的时间不一致,所以每次客户端“ 误认为 ”服务器端有静态文件更新,每次都会去服务器端取“ 所谓的最新数据 ”。这样我们可以看到,不管在浏览器访问多少次,返回的 http 状态都是200,再也找不到304状态了。

误区:在 nginx 中设置 expires,并不是指把静态内容缓存在 nginx 中,而是设置客户端浏览器缓存的时间,这是很多人的误区所在。

二、磁盘缓存

除了存储在客户端的静态缓存(浏览器静态)技术外,在服务器端的静态缓存技术主要分为磁盘缓存和内存缓存两大类。单纯围绕 nginx 的 squid、varnish 等一类中间件,处理静态数据的性能十分优秀。核心是 nginx 基于 epoll 网络模型,而相比 apache 基于 select 网络模型。所以 apache 的优势在于密计算型,稳定性好。而 nginx 偏向静态处理,反向代理,高并发。比如 apache+php 的稳定性比 nginx+php 要好,而性能是明显 nginx 要优秀许多。

以上仅单纯是对磁盘中静态数据处理的能力,所谓磁盘缓存,指另外的一种缓存静态文件的技术。以 nginx 配置为例:

6d100037e19d4127df6

可以看出 nginx 主要通过 proxy_cache 来实现 web cache,熟悉 nginx 的同学,不难看出,以上配置在 location 这里,不仅可以实现静态文件的缓存,还可以实现动态文件的缓存(这里放在下章节详细介绍)。我们编写个 test.html测试文件,然后并访问。test.html 源码如下:

6d000037edc9ba52346

我们发现服务器的 cache 目录里面,多了两个缓存文件:

6d100037e1746809432

有意思的,这两个文件里面的内容分别为(通过 less 命令查看):

6d100037e1ae69f0753

(b0ad5d3e7f099bfff9e4fc6a159d868c)

6d100037e1e193e6dbb

(53edc39ed253e14415a29412cfc01faf)

所以不难看出,nginx 把 html 内容和图片二进制全部缓存到本地磁盘上了。下次用户再次来访问 test.html 的时候,nginx 直接将缓存在本地磁盘的文件返回给用户。特别是后端如若是部署的 tomcat、iis 等,nginx 强大的静态缓存能力,有效减少了服务器压力。

三、内存缓存

紧接上面描述的磁盘缓存,内存缓存顾名思义,就是把静态文件缓存在服务器端的内存中。所以这种缓存,如若命中缓存的话,取内存中的缓存数据返回比取磁盘中的缓存数据返回,性能要高很多。以 varnish 为例,varnish 核心配置如下:

启动命令:

6d100037e18e22f534b

参数简介:

6d000037ee413494231

default.vcl核心配置如下:

6d000037ee6dd062ae8

Varnish对.gif、.jpg、.jpeg、.png等结尾的 URL 缓存时间设置1小时。varnish设置完毕后,我们用命令行方式,通过查看网页头来查看命中情况:

6d000037ee881153360

6d100037e203342923b

最后,我们可以通过 varnishadm 命令来清理缓存,也可以通过 varnishstat 命令来查看 varnish 系统缓存状态。

四、Nginx 的内存缓存

以上主要以 Varnish 为例,介绍了内存缓存静态资源的方法。其实 nginx 也有内存缓存,相比 squid、varnish 而言,nginx 的内存缓存需要通过编码实现。如下配置:

6d000037ee7f70a3812

memcached_pass 指定服务器地址,使用变量 $memcache_key 为 key 查询值,去 memcache 查询对应 value 值。

如我们访问:http://***.***.***.***/image/test.jpg ,则 nginx 去 memcache 中查询key 为“ test.jpg ”的 value 值并返回。如果没有相应的值,则返回 error_page 404。介绍到这里,关键在于存储在 memcache 中的静态文件,需要通过代码写入 memcache 中。怎么样通过 php/java 等代码把静态资源的数据写入 memcache 中,关于这块的示例就不再过多介绍了。

Nginx的内存缓存因为需要通过编码实现,所以灵活性特别高。这块可以结合自身业务系统的特点,让静态缓存的灵活性和效率都能得到保障。可能唯一的缺陷就是,通过编码实现的方式,给我们维护管理带来了负担。在之前我曾参与的一个电商系统,就是把客户的订单照片通过 php 代码写入 memcache,客户访问取图的时候,从 memcache 中获取,速度效率特别高。Nginx 作为一款在七层无所不能且轻量级高性能的中间件,能够直接去 memcache 中取数据,来实现静态缓存的效果,这块相应的功能是其他软件无法相媲美的。

五、CDN

说起 CDN,大家都不陌生,它是静态缓存加速最典型的代表。CDN技术并不是一门新的技术,它是基于传统 nginx、squid、varnish 等 web 缓存技术,结合 DNS 智能解析的静态缓存加速技术。值得注意的是,他对动态链接访问并没有加速效果。架构原理图如下:

6d100037e2349afb0db

所以CDN的静态缓存技术核心主要在于两点:

节点缓存:对需要加速的网站应用,相应的静态资源通过内存缓存+磁盘缓存的方式缓存在服务器端。

精准调度:对访问的用户 ip 进行智能解析调度,实现就近缓存节点访问。比如以上图例中,北京用户访问 www.a.com。通过 dns 解析的时候,分析用户 ip,发现是北京用户。则 dns 返回对应北京缓存节点的 ip 地址给到用户,则用户 www.a.com 默认访问北京服务器上面的缓存数据,实现就近访问的策略,大大提升了访问速度。

杜绝抄袭,支持开源,我为自己呐喊,百分百原创作者:乔锐杰


好啦~本文到这里就结束了,同时,如果喜欢我们的话就赶紧订阅我们吧~~~每天定时推送新鲜干货~~~也可以关注我们的微信公众号:架构云专家频道 每天同步更新哟~~~

版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_811820.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET学习(1)-网站配置文件读取/保存

虽然做了几个网站,但是一直有个问题困扰我,就是网站配置文件的保存问题,网上有人说保存在数据库,有人说保存在XML中。保存在数据库中是个方便的选择,但是有个问题,每张表都应该有个主键,如果网站…

Matomo – 搭建一个属于自己的网站统计分析站点

https://www.sooele.com/index.php/2018/03/18/%E3%80%8E%E6%95%99%E7%A8%8B%E3%80%8Fmatomo-%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%B1%9E%E4%BA%8E%E8%87%AA%E5%B7%B1%E7%9A%84%E7%BD%91%E7%AB%99%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90%E7%AB%99/地址 http://www.bigf.inf…

网站实现扫描二维码关注微信公众号,自动登陆网站并获取其信息

原文:初始方案: https://www.cnblogs.com/cmyxn/p/7803117.html 优化方案 http://www.cnblogs.com/cmyxn/p/7814120.html 需求 网站实现扫描二维码关注微信公众号,如果已经关注公众号就自动登陆网站并获取其微信昵称,头…

使用Google WebP图片格式帮助控制网站页面大小

日期:2013-3-16 来源:GBin1.com 不管你相信或者不相信,随着互联网的快速发展网页也在持续不断的变大。 使 网页迅速膨胀的罪魁祸首不是大量使用的JavaScript库,CSS和无尽的共享按钮,而是精美的图片。根据HTTPArchive的…

网站服务器的管理,网站服务器的管理

网站服务器的管理 内容精选换一换域名注册(Domain Registration)是用户付费获取Internet上某一域名一段时间使用权的过程。华为云域名注册服务提供域名的注册、购买、实名认证以及管理功能。华为云的域名注册服务与新网合作,因此通过华为云注册的域名其注册商为新网…

富士通服务器怎么修复,BIOS维修网站www.biosrepair.com-富士通E8410 BIOS刷新修复

接修一台富士通E8410笔记本,故障原因是用户自升级BIOS后无法开机;对于维修来说,BIOS损坏是最容易修复的故障,只要重写BIOS芯片即可,当然维修BIOS,最关键的问题是BIOS文件。由于明确机器故障,因此…

杨建:网站加速--服务器编写篇

杨建:网站加速--服务器编写篇(上) --提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一,如何节约CPU二,怎样使用内存三,减少磁盘I/O四,优化你的网卡五,…

nginx的http2.0性能太逆天了,HTTPS网站性能优化

m## 关于http2.0 请阅读: [HTTP 2.0的那些事][(http://mrpeak.cn/blog/http2/) 背景 我们七层负载层,使用了5台24U64G内存的物理机支行nginx做https加解密与proxy_pass。每天上下班时段,5台机CPU基本在50%左右,算是计算型。 优…

弱键(Weak Key, ACM/ICPC Seoul 2004, UVa1618)

I think: 给出k(4≤k≤5000)个互不相同的整数组成的序列Ni,判断是否存在4个整数Np、Nq、Nr和Ns(1≤p<q<r<s≤k),使得Nq>Ns>Np>Nr或者N…

建立一个免费的网站

大家可能想建立一个个人主页,但是只想尝试一下,那么,先建立一个免费的网站是不错的选择. 一、 建站需要什么 1. 域名,是访问的地址。 2. 空间,是存储网站的主机。 二、建站的步骤 1. 申请空间 到http://www.id666.com/注册用户.之后在会员页面点击初始化…

如何让百度快速收录WordPress网站?

首先,如果要让百度快速收录自己的网站的话,最近就有一个非常好的途径,那就是百度推出的百度熊掌号,他就是为保护原创而诞生的,我身边的朋友百分之80都开始使用百度熊掌号了,大家共同得出一个结论就是&#…

企业网站公司网站应该如何优化如何做SEO

前言:今天逛了一逛Zac的博客,看了一篇文章,我认为可以给许多seo小白或者说老手都很有帮助,所以今天把这篇文章发出来给大家看一看,一个企业或者说公司,里面的SEO部门应该做些什么,SEO初期应该做…

免费SSL证书大全,加速普及网站实现HTTPS加密

免费SSL证书大全,加速普及网站实现HTTPS加密 SSL 证书用于加密 HTTP 协议,实现网站通过HTTPS加密协议访问。随着国内外各大网站实现全站 HTTPS 协议,以及搜索引擎对使用 HTTPS 协议网站的更加友好,加之互联网对数据和隐私安全的加…

志在指尖网站优化工具Ver2.0【收费版破解版】

废话不多说直接先放图 从1.0版本开始一直到1.3版本全部免费,持续了这么多个版本。 我想在免费期间一直使用本软件的用户一定清楚我们的软件效果怎样,这里我以本站使用工具优化的收录量为例。 下面是我秒收录的相关图片 我只发了一个标题为1 内容为1的文…

解读seo熊掌号指数2.0的三种快速提升技巧

解读SEO熊掌号指数2.0的三种快速提升技巧 熊掌号指数2.0是什么? 熊掌号指数是根据账号在平台的整体表现而综合计算分析得出的分数,用于判断熊掌号的内容运营、服务运营以及用户运营等能力。 本文来自:IT技术 本文原网址:https:…

为什么网站优化了很久了还是没有排名 那是因为你没注意下面这三点

对于一个Seoer来说,最心累的中央不是网站关键词排名上不去,而是本人辛辛劳苦的维护的关键词排名不断在降落,只能眼睁睁地看关键词排名在降落,却无能为力,由于他们不晓得本人犯了什么错招致了这个现象。这里我就给大家总…

如何应用SEO优化来进行对网站的搜索引擎排名

如果网页设计师和开发者想要抓住利润丰厚的移动搜索市场,他们不仅需要适应网页来改变他们的战略和战略。移动搜索是市场不时增长的一部分。这是一个好消息。但是,移动搜索有自己的规则,这与传统的桌面搜索规则不同。这就是为什么如果你不想错…

建设手机网站最主要的因素是什么

移动网站的访问速度非常不同。 PC和PC之间的区别在于访问手机网站需要花费大量时间。在这种情况下,如果移动网站的内容太大,则内存太大或速度慢。在用户看来,它是不时消耗我自己的流量,第一个响应首先自然关闭。影响移动网站开放的…

怎么预防网站被降权

怎么预防网站被降权 SEO是网站流量的重要来源之一,但根据SEO优化大数据,一半的的网站都经历了降级的体验。那么如何防止网站在日常SEO优化中被减少?以下是一些需要解释的重要因素。 首先,不要注意内容 对于网站,内容…

新博客新网站到底该怎么操作SEO才能快速参与排名呢,快来看看,大多数人都误解了-下载联盟

新博客新网站到底该怎么操作SEO才能快速参与排名呢,快来看看,大多数人都误解了-下载联盟 好的各位,咋们又在下载联盟见面啦,昨天我们写了一篇关于个人下载博客和个人技术博客的前景问题,相信大家应该都有所了解了&…