varnishd

来源:互联网 发布:面部识别照相软件 编辑:程序博客网 时间:2024/06/11 15:06

基本概念

     在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。

    

根据官网的介绍,Varnish的主要特性如下:https://www.varnish-cache.org/

        1.缓存位置:可以使用内存也可以使用磁盘。如果要使用磁盘的话推荐SSDRAID1

        2.日志存储:日志也存储在内存中。存储策略:固定大小,循环使用

        3.支持虚拟内存的使用。

        4.有精确的时间管理机制,即缓存的时间属性控制。

        5.状态引擎架构:在不同的引擎上完成对不同的缓存和代理数据进行处理。可以通过特定的配置语言设计不同的控制语句,以决定数据在不同位置以不同方式缓存。类似于netfilter中的钩子,在特定的地方对经过的报文进行特定规则的处理。

        6.缓存管理:以二叉堆格式管理缓存数据,做到数据的及时清理。

 

2.简单架构

    Management进程:对子进程进行管理,同时对VCL配置进行编译,并应用到不同的状态引擎。

    Child进程:生成线程池,负责对用户请求进行处理,并通过hash查找返回用户结果。

    wKioL1Qe667iERLeAAERfZzjdp0689.jpg


3.状态引擎

      每一个状态引擎处理结束之后,都会将结果returnvarnish,由varnish决定下一个状态引擎。由于每个引擎的下一个处理引擎都是特定的,所以return的值基本上也是确定的,可以通过官方文档获取。各引擎的处理流程图如下:

    wKiom1Qe7A7DjFuNAAFeXnOTfQA147.jpg


1
2
3
4
5
6
7
vcl_recv : 接收用户请求,判断是否是可缓存数据。
    vcl_pipe :不可缓存数据,直接管道后端处理
    vcl_hash :可缓存数据,通过hash机制处理,默认url做key;也可以自定义区分客户端是否支持处理压缩数据而判断区分缓存。
        vcl_hit : 命中          
        vcl_miss :未命中          vcl_fetch : 后端取数据
             vcl_pass :给命中或者未命中的数据提供一个特殊位置以对请求的数据进行特殊处理
vcl_deliver: 1.hit直接deliver; 2.fetch直接deliver



4.内部处理流程

        wKiom1Qe7IbRRHkVAAINQZRar-k711.jpg

0 0
原创粉丝点击