Varnish简介

时间:2022-09-13 10:40:36

Varnish介绍:

  Varnish是一个反向HTTP代理,有时也被称为HTTP的加速器或网络加速器;它存在于真实服务器的前面(可能有多级代理),将来自于客户端的请求中的部分内容存储在自身的内存中,以减少服务器响应时间和网络带宽消耗。与Varnish类似的开源解决方案还有squid.

  Varnish不仅仅是一个通过缓存数据加速服务的反向代理,根据其安装和配置,也可用来:

  • web application firewall,
  • DDoS attack defender,抵御DDos攻击
  • hotlinking protector,链保护
  • load balancer,
  • integration point, 集成点
  • single sign-on gateway,单点登录网关
  • authentication and authorization policy mechanism,认证授权策略机制
  • quick fix for unstable backends, 不稳定后台的快速修复
  • HTTP router.

Varnish简介

Manager Process:

  Manager Process是主模块,包含了Varnish的一些二进制程序。管理器进程的任务是将任务(包括缓存)委托给子进程。管理程序确保每个任务总是有一个进程。

  Manager Process的CLI(命令行接口)可通过两种方式进行管理:

    ①varnishadm:一个基于列表的管理命令程序,其与varnishd守护进程相连接。

    ②VAC-->vagent2:VAC(Varnish Administration Console)包括一个GUI和API,VAC是生产环境中最常用的实时图和统计数据工具,帮助确定Varnish缓存服务器的瓶颈和问题。VAC是一种varnish的缓存服务器组的管理控制台,也被称为高速缓存组。

缓存组是具有相同配置的varnish缓存服务器的集合。

Cacher Process:

  • listen to client requests
  • manage worker threads
  • store caches
  • log traffic
  • update counters for statistics 更新统计计数器

Shared Memory Log: 

  varnish通过可以基于文件系统接口进行访问的共享内存区域来记录日志(shared memory log);默认是90MB;分为两部分:

    前半部分是计数器;后半部分是客户端请求的数据;

要向使用Varnish,必须要配置好Varnish,而配置其前提是要先了解VCL(Varnish Configuration Language)。

VCL:是一种特殊的域语言用来描述Varnish缓存的请求处理和文件缓存策略的。

When a new configuration is loaded, the VCC process, created by the Manager process, translates the VCL code to C. This C code is compiled typically by gcc to a shared object. The shared object is then loaded into the cacher process.

  当一个新的配置项被装载时,由管理进程创建出一个VCC进程,将VCL编译成C代码;之后C代码又被gcc编译器根据类型解释成一个共享对象,此对象接下来会被装入缓存进程中。

  然而,VCL的工作流程被看作一个有限状态机

Varnish Finite State Machine

  vcl_recv

  vcl_hash:

    vcl_hit

    vcl_miss

    vcl_purge

    vcl_pipe

    vcl_pass:

      pass

      hit_for_pass

  vcl_backend_fetch

  vcl_backend_response

  vcl_backend_error

  vcl_deliver

  vcl_synth

vcl的语法:
(1)//,#,/*...*/:注释
(2)sub $name:定义子例程
(3)不支持循环,但支持条件判断
(4)有内建变量
(5)使用终止语句return,没有返回值
(6)操作符:=,==,!=,~,&&,||

Varnish简介


应用实例: 

/*测试缓存命中与否*/
sub vcl_deliver{
if(obj.hits>0){
set resp.http.X-cache = "HIT via" + " " + server.ip;
}
else{
set resp.http.X-cache = "MISS via" + " " + server.ip;
}
}
/*强制对某些资源的请求不检查缓存*/
sub vcl_resv{
if(req.url ~ "(?i)^/login" || req.url ~ "(?i)^/admin"){
return(pass);
}
}
/*对特定类型的资源,如公开的图片等,取消其私有标识,并强行设定其可以由varnish缓存的时长;*/
sub vcl_backend_response{
if(beresp.http.cache-control !~ "s-maxage"){
if(beresp.url ~ "(?i)\.jpg$"){
set beresp.ttl = 7200s;
unset beresp.http.Set-Cookie;
}
if(bereps.url ~ "(?i)\.css"){
set bereps.ttl = 3600;
unset beresp.http.Set-Cookie;
}
}
}

设置多个后端主机:

backend default{
.host = "172.18.100.67";
.port = "80";
}
backend appsrv{
.host = "172.18.100.68";
.port = "80";
}
sub vcl_recv{
if(req.url ~ "(?i)\.php$"){
set req.backend_hint = appsrv;
}
else{
set req.backend_hint = default;
}
}

缓存的负载均衡实现:

/*在default.vcl中写入:*/
import directors; backend websrv1{
.host = "192.168.1.101";
.port = "80";
} backend websrv2{
.host = "192.168.1.102";
.port = "80";
} sub vcl_init{
new websrvs = directors.round_robin();
websrvs.add_backend(websrv1);
websrvs.add_backend(websrv2);
} sub vcl_recv{
set req.backend_hint = websrvs.backend();
}

对后端主机做健康检测:

backend websrv1 {
.host = "192.168.1.101";
.port = "80";
.probe = {
.url = "/";
.interval = 1s;
.window = 8; //表示最近检测的次数
.threshold = 5; //最近检测的次数中成功的次数
.timeout = 2s; //探测时的超时时长
}
}

Varnish简介的更多相关文章

  1. Java高级架构师(一)第43节:Varnish简介、安装和基本使用

    第一部分:Varnish简介 Varnish是一款开源的.高性能的HTTP加速器和反向代理服务器. Varnish反向代理的能力远不如Nginx. Varnish主要作用是HTTP的加速器,主要通过缓 ...

  2. 01 . Varnish简介,原理,配置缓存

    简介 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器,其功能与Squid服务器相似,都可以用来做HTTP缓存.可以安装 varnish 在任何web前端,同时配置它缓存内容.与传统的 ...

  3. Varnish 简介

    Varnish是高性能开源的反向代理服务器和HTTP缓存服务器 Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存 Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存 ...

  4. WEB缓存控制机制与varnish简介

    在说到缓存varnish前,我们首先来了解下对于web服务缓存到底是什么?它有哪些特点,基础原理是什么? http是web应用协议,通常我们说的一次http事务,不外乎就是客户端请求,服务端响应,通常 ...

  5. Varnish Cache

    1 Varnish简介 Varnish是高性能且开源的反向代理服务器和HTTP加速器(cache server).其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一.Varn ...

  6. Varnish 入门

    本文将介绍 varnish 的工作流程,安装以及 varnish 的配置三个方面的内容.首先简单的介绍 varnish 以及其工作流程,大概了解其内部原理,然后介绍了 varnish 的安装方法,最后 ...

  7. Varnish 问题点 与 技术方案 Varnish 优劣分析

      A10 有没有能做热点统计   1 Varnish 分布式 HA  (目前没有HA) 2 Varnish 热点监控     (建议热点需要外部插件统计,API的话目前并木有发现,但是他自带一个伪热 ...

  8. cnetos6.5安装Varnish

    安装依赖包: tar -zxvf docutils-0.13.1.tar.gz python setup.py install unzip pcre2-10.23.zip ./configure -- ...

  9. Java高级架构师(一)第01节:整体课程概览

    本课程专注于构建:高可扩展性.高性能.大数据量.高并发.分布式的系统架构. 从零开始.全面系统.成体系的软件架构课程,循序渐进的讲述构建上述系统架构所需要的各种技术知识和技能. 适应人群: 1:有一定 ...

随机推荐

  1. mysql数据库主从复制部署笔记

    主从复制是mysql中数据库实时同步的一个常用做法了,今天我来给各位介绍一下关于mysql数据库主从复制部署一个过程,希望此例子对各位同学参考参考. 数据库主从复制原理: 数据库的主从复制就是从mas ...

  2. 【C++】非原创|统计代码覆盖率(一:C++)

    也是转别人的,因为我c++好菜好菜啊... http://blog.chinaunix.net/uid-23741326-id-3316943.html c++跟C基本是一样的,统计覆盖率,需要生成g ...

  3. Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录

    Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...

  4. HDOJ 2058 The sum problem

    Problem Description Given a sequence 1,2,3,--N, your job is to calculate all the possible sub-sequen ...

  5. springmvc 学习

    第一章回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章回顾struts ...

  6. hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形 ...

  7. Django之自定义分页

    分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页和下一页 4. ...

  8. JMeter学习(二)录制脚本(转载)

    转载自 http://www.cnblogs.com/yangxia-test 环境 Badboy  version 2.1.1 JDK: 1.7.0_67 Apache  JMeter-2.11 - ...

  9. AT&T汇编和Intel汇编语法主要区别

    AT&T使用$表示立即操作数,而Intel的立即操作数是不需要界定的.因此,使用AT&T语法引用十进制值4时,使用$4,使用Intel语法时只需使用4.   AT&T在寄存器名 ...

  10. e832. 从JTabbedPane中移动卡片

    To move a tab, it must first be removed and then reinserted into the tabbed pane as a new tab. Unfor ...