Varnish工作原理

Varnish是什么
Varnish作用是访问web速度的web加速器,被安装在web服务器之前,从而缓存web服务器的应用程序和数据,最后相应客户的请求。 功能与Squid服务器相似,都可以用来做HTTP缓存。与Squid不同之处在于,Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,所以Varnish要相对更高效,但也有缺点,内存中的缓存在服务器重启后会丢失。
Varnish架构:
在这里插入图片描述
Varnish初始化过程
varnish启动会产生两个进程:master进程 和 child进程
master进程:master进程负责启动工作,master进程会读取配置文件,根据指定的配置信息做出相应的动作,例如管理员在配置文件中分配了2G内存大小,它就会在内存中创建2G的存储空间; master进程还会创建并管理child进程。
child进程: child进程来处理后续任务,它会分配一些线程来执行不同的工作,例如:(1). 接受http请求 (2).为缓存对象分配存储空间 (3).清除过期缓存对象(4). 释放空间 碎片整理

2. 分配缓存过程:有一个对象需要缓存时,根据这个对象的大小,到空闲缓存区中查找大小最适合的空闲块,找到后就把这个对象放进去
如果这个对象没有填满这个空闲块,就把剩余的空间做为一个新的空闲块
如果空闲缓存区中没地方了,就要先删除一部分缓存来腾出地方,删除是根据最近最少使用原则。

3.释放缓存过程:有一个线程来负责缓存的释放工作,他定期检查缓存中所有对象的生存周期,如果某个对象在指定的时间段内没有被访问,就把这个对象删除,释放其占用的缓存空间; 释放空间后,检查一下临近的内存空间是否是空闲的,如果是,就整合为一个更大的空闲块,实现空间碎片的整理
4.VCL(varnish configuration Langage)语言相关
1)、VCL概念
VCL语言被使用在default.vcl这个文件中,用来设置varnish服务器对后端web服务器加速的一些规则; vcl是一种区域配置语言。在执行vcl时,varnish会将vcl语言转化未二进制代码; default.vcl文件中的vcl语言被分为多个子程序, 不同的子程序在不同的时间点执行,比如有的子程序在接收到客户端请求时执行,有的子程序在接收到后端服务器的文件时执行。
VCL处理过程:
在这里插入图片描述
2)、 backend servers(后端服务器)
一般来说就代表web服务器,提供varnish加速的内容,即varnish缓存内容的源头。
在/etc/varnish/default.vcl文件中会配置相关信息和规则,告诉varnish服务器应该去哪里寻找缓存的内容

3)、vcl_recv
该子程序在请求的开始被调用,在接收、解析了客户端的请求后,该子程序会决定是否响应请求、怎么响应请求以及使用哪个后台服务器响应请求。
4)、actions:
主要有一下动作 :
pass:当一个请求被 pass 后,这个请求将通过 varnish 转发到后端服务器,
但是它不会被缓存。pass 可以放在 vcl_recv 和 vcl_fetch 中。
lookup:当一个请求在 vcl_recv 中被 lookup 后,varnish 将从缓存中提取数
据,如果缓存中没有数据,将被设置为 pass,不能在 vcl_fetch 中设置 lookup。
pipe:pipe 和 pass 相似,都要访问后端服务器,不过当进入 pipe 模式后,在
此连接未关闭前,后续的所有请求都发到后端服务器
deliver:请求的目标被缓存,然后发送给客户端

5)、3个重要的数据结构:Requests、Responses 、 objects

req:请求目标,当 varnish 接收到一个请求,这时 req object 就被创建了,
你在 vcl_recv 中的大部分工作,都是在 req object 上展开的。
beresp:后端服务器返回的目标,它包含返回的头信息,你在 vcl_fetch 中的大部分工作都是在 beresp object 上开展的。
obj:被 cache 的目标,只读的目标被保存于内存中,obj.ttl 的值可修改,其他的只能读。
6)、两个varnish服务器上的监控命令

varnishlog
varnishtop

猜你喜欢

转载自blog.csdn.net/weixin_43314056/article/details/86634127