Varnish(一)简介与原理

简介

Varnish是一款高性能且开源的方向代理服务器和HTTP加速器

Varnish架构

官方给出的架构图

在这里插入图片描述

图片来自 http://book.varnish-software.com/4.0/chapters/Tuning.html#varnish-architecture

Varnish主要运行2个进程,Management进程和Child进程
Management进程:主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。
Child进程:主要是监听客户端请求,管理worker线程,建立缓存,更新统计计数器和记录流量

VCL(Varnish Configuration Language)是varnish配置缓存策略的工具,拥有它自己独立的一种编程语言。在策略启动前,会由Management进程转换为c代码(利用VCC,将VCL转换成C的编译器),然后通过gcc编译器编译成2进制程序。编译完成后Management负责将其连接到child进程,可以在varnish运行过程中动态切换缓存策略。

shared memory log(共享内存日志)为了与系统的其它部分进行交互,Child进程使用了可以通过文件系统接口进行访问的共享内存日志,因此,如果某线程需要记录信息,其仅需要持有一个锁,而后向共享内存中的某内存区域写入数据,再释放持有的锁即可。而为了减少竞争,每个worker线程都使用了日志数据缓存。
共享内存日志大小一般为90M,其分为两部分,前一部分为计数器,后半部分为客户端请求的数据。varnish提供了多个不同的工具如varnishlog、varnishncsa或varnishstat等来分析共享内存日志中的信息并能够以指定的方式进行显示。

varnishadm和vagent2是管理Management的一个管理接口

varnish处理流程

在这里插入图片描述

图片来自 http://book.varnish-software.com/4.0/chapters/VCL_Basics.html

  • vcl_recv函数:在Varnish完成对请求报文的解码为基本数据结构后第一个要执行的子例程,它通常有四个主要用途:1.修改客户端数据以减少缓存对象差异性;比如删除URL中的www.等字符;2.基于客户端数据选用缓存策略;比如仅缓存特定的URL请求、不缓存POST请求等;3.为某web应用程序执行URL重写规则; 4.挑选合适的后端Web服务器;
  • vcl_hash函数:默认VCL将主机名或IP地址以及请求的URL进行hash
  • vcl_hit函数:在缓存中找到请求的内容后将自动调用该函数
  • vcl_pass函数:此函数在进入pass模式时被调用,用户将请求直接传递至后端主机。后端主机在应答数据后将应答数据发送给客户端,但不进行任何缓存,在当前链接下每次都返回最新的内容。
  • vcl_miss函数:在缓存中没有找到请求的内容时自动调用该方法。此函数可用于判断是否需要从后端服务器获取内容
  • vcl_purge函数:移除缓存
  • vcl_pipe函数:进入pipe模式时,用户将请求直接传递至后端主机,在请求和返回的内容没有改变的情况下,将不变的内容返回给客户端,直到这个链接被关闭。
  • vcl_backend_fetch函数:可能是被vcl_miss或者vcl_pass调用。如果是被vcl_miss函数:调用则所获取的对象会被缓存,如果是被vcl_pass调用则获取的对象不会缓存
  • vcl_deliver函数:将在缓存中找到请求的内容发送给客户端前调用此函数
  • vcl_synth函数:创建合成响应,例如个性化定制错误消息,要调用此函数
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值