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的三种应用
  1. varnishd应用程序命令行参数:监听的socket,使用的存储类型等,额外的配置参数:-p param=value; -r param,param,…设定只读参数列表
    /etc/varnish/varnish.params
  2. -p 选项指明的参数
    运行时参数:
    可在程序运行中,通过其CLI进行配置
  3. 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的主要内容,如果未能解决你的问题,请参考以下文章

Varnish换粗

Varnish基础配置实现动静分离web站点

varnish基础应用

varnish缓存服务

缓存服务器memcached和varnish

高性能web缓存加速器---varnish