Linux–varnish(一)

简介

Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点;
目前最新版本是4.0.0,而3.x的版本也是可以生产环境下使用的稳定版本,但yum源中的2.x版本过于陈旧,不建议使用;

Varnish与Squid的对比

相同点
都是一个反向代理服务器;
都是开源软件;

Varnish的优势

Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启;
Varnish访问速度更快,因为采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而squid是从硬盘读取,因而Varnish在访问速度方面会更快;
Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快,因而在高并发连接情况下可以支持更多TCP连接;
Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的;
squid属于是单进程使用单核CPU,但Varnish是通过fork形式打开多进程来做处理,所以可以合理的使用所有核来处理相应的请求;

Varnish的劣势

varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力;
在varnish使用中如果单个url的请求通过HA/F5等负载均衡,则每次请求落在不同的varnish服务器中,造成请求都会被穿透到后端;而且同样的请求在多台服务器上缓存,也会造成varnish的缓存的资源浪费,造成性能下降;
Varnish劣势的解决方案
针对劣势一:在访问量很大的情况下推荐使用varnish的内存缓存方式启动,而且后面需要跟多台squid服务器。主要为了防止前面的varnish服 务、服务器被重启的情况下,大量请求穿透varnish,这样squid可以就担当第二层CACHE,而且也弥补了varnish缓存在内存中重启都会释 放的问题;
针对劣势二:可以在负载均衡上做url哈希,让单个url请求固定请求到一台varnish服务器上;

架构及文件缓存的工作流程

程序架构:

Manager进程 管理进程

Cacher进程,包含多种类型的线程:

accept, worker, expiry, ...

shared memory log:

统计数据:计数器;

日志区域:日志记录;

varnishlog, varnishncsa, varnishstat...

配置接口:VCL

Varnish Configuration Language, DSL(Domain Specific Language) 域专用语言

过程:vcl complier --> c complier --> bin shared object

VCL complier

1 转成C语言代码

2 编译成C语言模块

3 被varnish cache主进程装载使用

varnish配置文件

varnish配置由varnishadm工具来管理port:6081:6082(Management)

HTTP请求的方法:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式

1、OPTIONS

返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

2、HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

回显服务器收到的请求,主要用于测试或诊断

8、CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

注意:

1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。

2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

varnish只缓存get head

Varnish 处理 HTTP 请求的过程如下

  1. Receive 状态(vcl_recv):也就是请求处理的入口状态,根据 VCL 规则判断该请求应该 pass(vcl_pass)或是 pipe(vcl_pipe),还是进入 lookup(本地查询);
  2. Lookup 状态:进入该状态后,会在 hash 表中查找数据,若找到,则进入 hit(vcl_hit)状态,否则进入 miss(vcl_miss)状态;
  3. Pass(vcl_pass)状态:在此状态下,会直接进入后端请求,即进入 fetch(vcl_fetch)状态;
  4. Fetch(vcl_fetch)状态:在 fetch 状态下,对请求进行后端获取,发送请求,获得数据,并根据设置进行本地存储;
  5. Deliver(vcl_deliver)状态:将获取到的数据发给客户端,然后完成本次请求;

注:Varnish4中在vcl_fetch部分略有出入,已独立为vcl_backend_fetch和vcl_backend_response2个函数;

内置函数(也叫子例程)

  • vcl_recv:用于接收和处理请求;当请求到达并成功接收后被调用,通过判断请求的数据来决定如何处理请求;
  • vcl_pipe:此函数在进入pipe模式时被调用,用于将请求直接传递至后端主机,并将后端响应原样返回客户端;
  • vcl_pass:此函数在进入pass模式时被调用,用于将请求直接传递至后端主机,但后端主机的响应并不缓存直接返回客户端;
  • vcl_hit:在执行 lookup 指令后,在缓存中找到请求的内容后将自动调用该函数;
  • vcl_miss:在执行 lookup 指令后,在缓存中没有找到请求的内容时自动调用该方法,此函数可用于判断是否需要从后端服务器获取内容;
  • vcl_hash:在vcl_recv调用后为请求创建一个hash值时,调用此函数;此hash值将作为varnish中搜索缓存对象的key;
  • vcl_purge:pruge操作执行后调用此函数,可用于构建一个响应;
  • vcl_deliver:将在缓存中找到请求的内容发送给客户端前调用此方法;
  • vcl_backend_fetch:向后端主机发送请求前,调用此函数,可修改发往后端的请求;
  • vcl_backend_response:获得后端主机的响应后,可调用此函数;
  • vcl_backend_error:当从后端主机获取源文件失败时,调用此函数;
  • vcl_init:VCL加载时调用此函数,经常用于初始化varnish模块(VMODs)
  • vcl_fini:当所有请求都离开当前VCL,且当前VCL被弃用时,调用此函数,经常用于清理varnish模块;

varnish程序的运行具有局部性特征:

时间局部性:一个数据被访问过之后,可能很快会被再次访问到;

空间局部性:一个数据被访问时,其周边的数据也有可能被访问到

cache:命中

热区:局部性;

时效性:

缓存空间耗尽:LRU,最近最少使用;

过期:缓存清理

缓存命中率:hit/(hit+miss)

(0,1)

页面命中率:基于页面数量进行衡量

字节命中率:基于页面的体积进行衡量

缓存与否:

私有数据:private,private cache;

公共数据:public, public or private cache;

Cache-related Headers Fields

The most important caching header fields are:

Expires:过期时间;

Expires:Thu, 22 Oct 2026 06:34:30 GMT

Cache-Control:max-age=

Etag

If-None-Match

Last-Modified

If-Modified-Since

Vary

Age

缓存有效性判断机制:

过期时间:Expires

HTTP/1.0

Expires:过期

HTTP/1.1

Cache-Control: maxage=

Cache-Control: s-maxage=

条件式请求:

Last-Modified/If-Modified-Since:基于文件的修改时间戳来判别;

Etag/If-None-Match:基于文件的校验码来判别;

  1 Expires:Thu, 13 Aug 2026 02:05:12 GMT
  2
  3 Cache-Control:max-age=315360000
  4
  5 ETag:"1ec5-502264e2ae4c0"
  6
  7 Last-Modified:Wed, 03 Sep 2014 10:00:27 GMT
  8 

缓存层级:

私有缓存:用户代理附带的本地缓存机制;

公共缓存:反向代理服务器的缓存功能;

User-Agent <--> private cache <--> public cache <--> public cache 2 <--> Original Server

Cache-Control: key=value, key=value

请求报文用于通知缓存服务如何使用缓存响应请求:

  1 cache-request-directive =
  2
  3 "no-cache", //不能直接用缓存响应
  4
  5 | "no-store" //不能直接用缓存响应,要去远程服务器去取新的。
  6
  7 | "max-age" "=" delta-seconds
  8
  9 | "max-stale" [ "=" delta-seconds ] //过期的缓存,最大允许过期多长时间的缓存来响应
 10
 11 | "min-fresh" "=" delta-seconds //指示客户机可以接收响应时间小于当前时间加上指定时间的min-fresh。
 12
 13 | "no-transform"
 14
 15 | "only-if-cached"
 16
 17 | cache-extension
 18 

响应报文用于通知缓存服务器如何存储上级服务器响应的内容:

  1 cache-response-directive =
  2
  3 "public"
  4
  5 | "private" [ "=" <"> 1#field-name <"> ]
  6
  7 | "no-cache" [ "=" <"> 1#field-name <"> ],//可缓存,但响应给客户端之前需要revalidation,即必须发出条件式请求进行缓存有效性验正;
  8
  9 | "no-store" ,//不允许存储响应内容于缓存中;
 10
 11 | "no-transform"
 12
 13 | "must-revalidate"
 14
 15 | "proxy-revalidate"
 16
 17 | "max-age" "=" delta-seconds //私有缓存能缓存多长时间
 18
 19 | "s-maxage" "=" delta-seconds //公共缓存能缓存多长时间
 20
 21 | cache-extension
 22 

原文地址:https://www.cnblogs.com/OrochWang/p/9607305.html

时间: 2024-11-13 09:38:54

Linux–varnish(一)的相关文章

架构 Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb (三)

四.优化Linux内核参数 vi /etc/sysctl.conf 在末尾增加以下内容: 引用net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 300net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.ip_local_port_range = 5000    65000 使配置立即生效: /sbin/sy

Linux之varnish

一:varnish简介 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好 Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有两种:内存与硬盘.但现在计算机系统的内存除了主存外,还包括了CPU内的L1.L2,甚至有L3快取.硬盘上也有自己的快取装置,因此Squid Cache

Linux安装配置varnish web加速器

Linux安装配置varnish web加速器 Varnish是一款高性能的开源HTTP加速器,它可以来做纯粹的代理服务器,负载均衡,但varnish最主要的功能是缓存加速,也是它最出色的地方.下面介绍如何安装和使用. wget -c http://repo.varnish-cache.org/source/varnish-3.0.1.tar.gz tar xzvf varnish-3.0.1.tar.gz cd varnish-3.0.1 ./configure --prefix=/usr/l

Linux运维 第三阶段 (十九) varnish(1)

Linux运维 第三阶段 (十九) varnish 一.相关概念: http/1.0-->http/1.1(重大改进:对缓存功能实现了更精细化的设计) RFC(request file comment,每一种协议都有请求注解文档,讲协议规范) http页面由众多的web object组成,有些是静态,有些是通过程序执行后生成的:为加速web的访问,browser中引入了缓存机制,能将访问的静态内容或可缓存的动态内容缓存到本地,而后client再次到原始server上请求之前相同的内容时,如果原始

linux 中varnish服务

一.安装varnish在server1中安装两个包varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm1.在server1中(varnish)配置varnish服务vim /etc/sysconfig/varnishVARNISH_LISTEN_PORT=80      ##varnish监听端口 vim /etc/varnish/default.vclbackend default {.host = "172.25

Linux平台部署varnish 高性能缓存服务器(1)

[本文档所介绍的内容适用于公司测试/生产常见的varnish环境部署] 一:varnish部署前准备: 1.1相关软件以及系统,web服务 系统要求:Centos 6(以上) (64位) 相关中间件:varnish-4.0.2 1.2相关系统依赖包安装检查准备 1.2.1 检查系统自带nginx是否安装 rpm -qa | grep varnish 如有安装,请使用以下命令卸载相关程序 yum remove varnish -y 1.2.2 安装编译nginx需要的依赖包  yum instal

Linux集群之varnish应用

一.varnish简介 varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件设置体系机构,和现的的硬件体系紧密配合,与传递的squid相比,varnish相比,varnish具有性能更高.速度更快.管理更加方便等诸多优点. 二. varnish软件体系架构 varnish主要运行两个进程:Management进程和Child进程. Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Manage

linux之搭建varnish缓存代理服务器

一.varnish原理: 1)Varnish简介: varnish缓存是web应用加速器,同时也作为http反向缓存代理.你可以安装varnish在任何http的前端,同时配置它缓存内容.与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点.有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一. 根据官网的介绍,Varnish的主要特性如下:http

Linux中Varnish基础应用

http  cache的实现方式有两种: Squid.Varnish:一般被称为缓存服务器 Squid:支持正向和反向代理.是一款重量级的缓存服务器,在高负载的情况下,性能非常的稳定 Varnish:支持反向代理:相比于Squid是非常轻量级的缓存服务器,在高负载情况下,性能较差,没有Squid稳定:一般被称为http加速器: Varnish的特点: 一.组成部分 Management:作为主控进程:提供命令行接口.管理各种子进程.初始化,加载文件等等 Child/Cache:缓存管理.日志数据