Linux学习-Varnish
Posted 丢爸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-Varnish相关的知识,希望对你有一定的参考价值。
Web Cache
Varnish官网
两个组件衔接不流畅,加中间层,衔接上性能不匹配,加缓存
注:
缓存对象:生命周期,定期清理,
缓存空间耗尽:LRU(Least Recent Use)最近最少使用
可缓存,不可缓存(用户私有数据)
程序具有局部性
- 时间局部性
- 空间局部性
key - value
key:访问路径,URL,hash
value:web content
命中率:hit/(hit+miss)
- 文档命中率:从文档个数进行衡量
- 字节命中率:从内容大小进行衡量
缓存处理步骤
接收请求–>解析请求(提取请求的URL及各种首部)–>查询缓存–>新鲜度检测–>创建响应报文,发送响应–>记录日志
新鲜度检测
- 过期日期
- HTTP1.0 Expires expires: Fri, 20 May 2022 22:18:06 GMT
- HTTP1.1 Cache-Control:max-age cache-control: max-age=31536000
- 有效性再验证:revalidate
- 如原始内容未改变,则仅响应首部(不附加body部分),响应码304(Not Modified)
- 如原始内容发生改变,则正常响应,响应码200
- 如原始内容消失,则响应404,此时缓存中的cache object也应删除
- 条件式请求首部
- If-Modified-Since:基于请求内容的时间戳作验证
#Last-Modified,If-Modified-Since
客户端浏览器第一次请求某一个URL时,服务器端返回HTTP状态码200,内容为你请求资源,同时有一个Last-Modified属性标记此文件在服务器端最后被修改的时间
Last-Modified: Fri, 20 May 2022 23:11:27 GMT :时间为服务器存储的文件修改时间
当客户端浏览器第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT :时间为本地浏览器存储的文件修改时间
如服务器端资源没发生变化,则时间一致,服务器返回HTTP状态码304(Not Changed.),响应内容为空,客户端浏览器收到响应后,直接把本地缓存文件显示到浏览器,这样就减少了流量。
如服务器端资源发生改变或者重启了服务器,时间不一致,服务器返回HTTP200状态码和新文件内容,客户端浏览器收到响应后,会丢弃旧缓存文件,把新文件缓存下来,显示到浏览器
- If-Unmodified-Since
- If-Match
- If-None-Match
#If-None-Match
在服务器端响应HTTP请求时,会添加ETag头信息,当客户端再次请求该资源时,在HTTP请求头加入If-None-Match信息(ETag值),如果服务器验证资源的ETag值没有改变,将返回304状态,否则服务器返回200状态,返回新的资源和ETag
常见的缓存服务开源解决方案
varnish,squid(类似于nginx—>apache)
管理进程:编译VCL并应用新配置,监控varnish,初始化varnish,CLI接口
Child/Cache:
Acceptor:接收新的连接请求
worker thread:处理用户请求
Expiry:清理缓存中的过期对象
日志:Shared Memory Log,共享内存日志大小默认为90M,分两部分,一部分为计数器,一部分为请求相关数据
VCL:Varnish Configuration Language 缓存策略配置接口,基于“域”的简单编程语言
#安装varnish
[root@nginx01 ~]# yum install varnish -y
varnish如何存储缓存对象
- file:单个文件,不支持持久机制
- malloc:内存
- presistent:基于文件的持久存储(实验方法)
配置varnish的三种应用
- varnishd应用程序命令行参数:监听的socket,使用的存储类型等,额外的配置参数:-p param=value; -r param,param,…设定只读参数列表
/etc/varnish/varnish.params - -p 选项指明的参数
运行时参数:
可在程序运行中,通过其CLI进行配置 - vcl:配置缓存系统的缓存机制(/etc/varnish/default.vcl)
通过vcl配置文件进行配置:先编译,后应用,依赖于C编译器
#修改varnish配置文件
backend default
.host = "192.168.88.101";
.port = "80";
#启动varnish服务
[root@nginx03 ~]# systemctl start varnish
#查看端口
[root@nginx03 ~]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:6081 *:* users:(("varnishd",pid=1759,fd=6))
LISTEN 0 10 127.0.0.1:6082 *:* users:(("varnishd",pid=1757,fd=5))
#连接varnish
[root@nginx03 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-862.el7.x86_64,x86_64,-smalloc,-smalloc,-hcritbit
varnish-4.0.5 revision 07eff4c29
Type 'help' for command list.
Type 'quit' to close CLI session.
#查看子进程是否运行正常
status
200
Child in state running
#查看服务是否运行正常
ping
200
PONG 1653086485 1.0
#转入vcl
vcl.load test default.vcl
200
VCL compiled.
vcl.list
200
active 0 boot
available 0 test
#使用test配置的vcl
vcl.use test
200
VCL 'test' now active
vcl.list
200
available 0 boot
active 0 test
#删除vcl,vcl当前需处于非活动状态
vcl.discard test
106
Cannot discard active VCL program
vcl.use boot
200
VCL 'boot' now active
vcl.discard test
200
vcl.list
200
active 0 boot
#显示配置参数
param.show
#设定参数的值
param.set thread_pools 4
200
#显示指定参数的值
param.show thread_pools
#显示存储列表
storage.list
200
Storage devices:
storage.Transient = malloc
storage.s0 = malloc
#显示配置文件编译前的内容
vcl.show boot
200
#显示后端服务器列表
backend.list
200
Backend name Refs Admin Probe
default(192.168.88.101,,80) 1 probe Healthy (no probe)
#退出
quit
500
Closing CLI connection
#查看日志
[root@nginx03 ~]# varnishlog
[root@nginx03 ~]# varnishncsa
192.168.88.1 - - [20/May/2022:19:00:20 -0400] "GET http://192.168.88.103:6081/test1.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"
#排序
[root@nginx03 ~]# varnishtop
#统计数据(statistics)
[root@nginx03 ~]# varnishstat
VCL(Varnish Configuration Language)配置
# state engine
以上是关于Linux学习-Varnish的主要内容,如果未能解决你的问题,请参考以下文章