资讯专栏INFORMATION COLUMN

Varnish简述

Lucky_Boy / 2434人阅读

摘要:在发生改变之后,后续最好可以整理出相应的改变执法。有变化时从后端响应二者的结合请求时,时间未过期,从缓存处响应。过期时,想后端服务器发送请求,看文件有无变化,决定响应的方式。清除一项缓存项篱笆清除一类缓存项。

一:http再闲聊 一:http闲扯

1跨主机直接通讯,分布式存储等,现在互联网上层之间的应用都是在基于http协议之上的,所以深入的理解http协议.对于上层之间的熟练运用是至关重要的.

 现在智能手机与互联网技术的充分融合,使得我们的生活越来越依赖于手机.手机已成为我们身体之外的另一个器官.手机在带给我们便利的同时.也在无尽的损耗着我们的碎片化时间.花费在手机上的时间日渐增多,但对于生活的增益却无甚寥寥.
 增益,首先是在思维上对一个事物有深刻的见解,需要花费心力、脑力持续不断的试探、执行、重复、改进。

2写日记的另一个目的在于:有迹可循。
3大道理少讲。一件事情如何做成的,心态如何改变的。
等等此类事宜。在发生改变之后,后续最好可以整理出相应的改变执法1234。

二:动态静态

用户请求web资源在服务器层面一般分为两块:
1:动态内容服务器:js css php jsp

 php jsp 在后台为动态内容
 js css 在服务器端 是静态内容,但偶尔需要作出相应修改

2:静态内容服务器:存放 jpg png jif 等图片文件

三:动态内容服务器:
分为 前端数据和后端数据

前端数据:js css 网页布局 展示 交互式设计

        wordpress属于前端展示工具,在服务器端存储的数据格式一般为 js css  
        php。

用户访问一个网页所看到的界面一般由js css 数据来提供。

 后端数据:PHP jsp 数据处理的业务端程序,负责被调用后生成数据
四:程序
 指令+数据
 指令:存放在程序文件中
 数据:变量和属组,通过i/o加载数据
       数据一般存放在 文件系统中或者 数据库之中
五:缓存

经常被访问的数据,存放在用户较近的位置。进而减少用户的I/O请求跳转,使得用户可以快速的获取所需要的数据。
缓存不处理用户的请求,仅仅是把用户经常访问的数据,在本地存放下来,随后当用户再次访问时,把数据推送给用户。

公共缓存:CDN Content Delivery NetWork

六:缓存工具:

squid:http1.0时代使用
varnish:http2.0时代。拥有更好的性能
首先是代理,其次是缓存。
varnish最强大的是缓存,其次是代理
Nginx:最强大的是代理,其次是缓存。

七:http缓存是如何工作的

缓存机制
过期机制: 依据缓存中定义的过期时间
文件过期之前,从缓存处响应客户端

        文件过期之后,从后台服务器响应客户端

条件式请求:访问缓存时,查看服务器与缓存内容有无改变
查看缓存内容有无改变的两种
1文件的修改时间

         2文件的校验码
      请求流程:每一次请求,缓存服务器都要向后端服务器发请求,查看缓存中的数
      据有无变化,无变化时,从缓存处响应。有变化时从后端响应

二者的结合: 请求时,时间未过期,从缓存处响应。 过期时,想后端服务器发送请求,看文件有无变化,决定响应的方式。

八:缓存中的请求报文 响应报文

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

    cache-request-directive = 
        "no-cache", 不可用缓存中的数据响应客户端                       
        | "no-store"                         
        | "max-age" "=" delta-seconds    最大可缓存的时间    
        | "max-stale" [ "=" delta-seconds ]   
        | "min-fresh" "=" delta-seconds      
        | "no-transform"                    
        | "only-if-cached"                  
        | cache-extension                    

响应报文用于通知缓存服务器如何存储上级服务器响应的内容:
    cache-response-directive =
        "public"  仅可用于公共缓存                             
        | "private" [ "=" <"> 1#field-name <"> ] 
        | "no-cache" [ "=" <"> 1#field-name <"> ],可缓存,但响应给客户端之前需要revalidation,即必须发出条件式请求进行缓存有效性验正;
        | "no-store" ,不允许存储响应内容于缓存中;                           
        | "no-transform"                        
        | "must-revalidate"                     
        | "proxy-revalidate"                  
        | "max-age" "=" delta-seconds           
        | "s-maxage" "=" delta-seconds          
        | cache-extension     
九:缓存命中率
缓存命中率:hit/(hit+miss)
    页面命中率:基于页面数量进行衡量
    字节命中率:基于页面的体积进行衡量
十:开源解决方案
    squid:
    varnish:
            varnish官方站点: http://www.varnish-cache.org/
           Community :社区版
        Enterprise  :企业版
二:Varnish 一:程序架构

程序架构:

        Manager进程
        Cacher进程,包含多种类型的线程:
            accept, worker, expiry, ... 
        shared memory log:
            日志存放于内存中,重启后日志数据及缓存都将丢失
            统计数据:计数器;
            日志区域:日志记录;
                查看日志的命令
                varnishlog, varnishncsa, varnishstat... 
            
        配置接口:VCL
            Varnish Configuration Language, 
                vcl complier --> c complier --> shared object
二:varnish安装

yum install varnish
varnish位于epl仓库 中

三:varnish的程序环境:
        /etc/varnish/varnish.params: 配置varnish服务进程的工作特性,例如监听的地址和端口,缓存机制, 使用多大的缓存,启用多少个线程;
        /etc/varnish/default.vcl:配置各Child/Cache线程的缓存策略;
        主程序:
            /usr/sbin/varnishd
        CLI interface:
            /usr/bin/varnishadm
        Shared Memory Log交互工具:
            /usr/bin/varnishhist
            /usr/bin/varnishlog
            /usr/bin/varnishncsa
            /usr/bin/varnishstat
            /usr/bin/varnishtop        
        测试工具程序:
            /usr/bin/varnishtest
        VCL配置文件重载程序:
            /usr/sbin/varnish_reload_vcl
        Systemd Unit File:
            /usr/lib/systemd/system/varnish.service
                varnish服务
            /usr/lib/systemd/system/varnishlog.service
            /usr/lib/systemd/system/varnishncsa.service    
                日志持久的服务;
四:varnish的缓存存储机制( Storage Types):

/etc/varnish/varnish.params 在此文件中做修改

        -s [name=]type[,options]
        
        • malloc[,size]
            内存存储,[,size]用于定义空间大小;重启后所有缓存项失效;
        • file[,path[,size[,granularity]]]
            磁盘文件存储,黑盒;重启后所有缓存项失效;
        • persistent,path,size
            文件存储,黑盒;重启后所有缓存项有效;实验;
            
    varnish程序的选项:
        程序选项:/etc/varnish/varnish.params文件
            -a address[:port][,address[:port][...],http监听的端口默认为6081端口; 
            -T address[:port],默认为6082端口;
            -s [name=]type[,options],定义缓存存储机制;

            -u user
            -g group
            -f config:VCL配置文件;
            -F:运行于前台;

运行时参数:
/etc/varnish/varnish.params文件, DEAMON_OPTS

            DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"
            
            -p param=value:设定运行参数及其值; 可重复使用多次;
            -r param[,param...]: 设定指定的参数为只读状态;

重载vcl配置文件:

        ~ ]# varnish_reload_vcl
五:简要修改配置文件。启动varnish服务、

修改 /etc/varnish/default.vcl文件
默认监听的后端 ip地址及端口号(http服务)


更改为

启动服务 systemctl start varnish

启动服务时,要确保本机的httpd 及 nginx服务都是关闭状态

ss –ntl

测试: http://172.16.253.95:6081/ind...
95主机没有提供web服务,
显示的是后端服务器的页面

响应报文 也证实了这一点

三:配置VCL 1:varnish工作流程

varnish 3版本和 4 版本的流程稍微不一样。具体如下

varnish 3版本


一:vcl_recv()引擎 收到请求如何处理
1:不是http请求 直接发至后端服务器
使用pass()引擎
2:是http请求,发送至Cacheable处理
1)不可缓存的方法如 put post等

给fetch()引擎。fetch()引擎向后端去取数据
去取数据之前,还可以操纵以下请求报文,作出一些修改

fetch()取到数据之后,给deliver()引擎(交付之意),deliver引擎发送至客户端。
deliver()引擎发送至客户端之前,可以修改以下响应报文

2)可以缓存的方法 get head

交付给 vcl_hash,   vcl_hash可以定义hash哪些数据
hash完之后的结果有两种命中或不命中

命中交付给 hit()引擎处理
不命中miss() 引擎处理

结:此流程主要 提及了以下几个引擎
vcl_recv() 接收用户请求的引擎
fetch() 向后端去取数据的引擎,可以修改请求报文
deliver() 发送数据给 客户端的引擎,可以修改响应报文
vcl_hash() : 缓存 hash比较的引擎,可以定义hash的一些规则
hit() 命中缓存的引擎
miss() 未命中缓存的引擎
varnish 4.0

增加的引擎:
vcl_purge(): 修剪。 清除一项缓存项
ban():篱笆 清除一类缓存项。 支持正则
pipe(): 不是http请求,直接发送至后端处理
2:vcl中的状态引擎
1:recv():接收用户请求的缓存
pipe():不是http的请求,通过管道(四层)直接发送至后端
pass():直接发送至后端
sysnth() 自定义不接受用户的请求
purge()修剪缓存
hash()
2:hash()缓存 hash比较的引擎,可以定义hash的一些规则
hit() 命中缓存的引擎
miss() 未命中缓存的引擎
3:
fetch():
接收的是 miss()引擎后的请求及
recv()请求 及
beresponce() 后端处理过的请求
修改请求报文至 后端
error():发送至后端处理之后,没有找到数据
beresponce() 后端处理之后 ,可以处理的数据

deliver() 发送数据给 客户端的引擎,可以修改响应报文

   接收 hit()及 fetch()的数据
3:变量可以使用的位置

下述章节主要描述 vcl配置及 实验实现

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10287.html

相关文章

  • 运维-服务器缓存之varnish

    摘要:如带有如下头信息,,默认不会缓存。是一款高性能开源的反向代理服务器和缓存服务器,其开发者是核心的开发人员之一。备份复制备份用默认端口开启你会得到如下信息我们看到,已经开启,但是除了知道这个东西已经监听端口外,我们不知道发生了什么。 varnish 小草新blog: http://homeway.me/ 一、介绍下吧: 首先了解几个概念, 1. Varnish不缓存带有...

    Youngs 评论0 收藏0
  • 运维-服务器缓存之varnish

    摘要:如带有如下头信息,,默认不会缓存。是一款高性能开源的反向代理服务器和缓存服务器,其开发者是核心的开发人员之一。备份复制备份用默认端口开启你会得到如下信息我们看到,已经开启,但是除了知道这个东西已经监听端口外,我们不知道发生了什么。 varnish 小草新blog: http://homeway.me/ 一、介绍下吧: 首先了解几个概念, 1. Varnish不缓存带有...

    leanote 评论0 收藏0
  • 缓存服务器Varnish

    摘要:线程对于缓存的对象,根据过期时间,组织成二叉堆,该线程周期检查该堆的根,处理过期的文件。缓存会根据进来的请求保存输出内容的副本当下一个请求到来的时候,如果是相同的,缓存会根据缓存机制决定是直接使用副本响应访问请求还是向源服务器再次发送请求。 博文参考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...

    Baaaan 评论0 收藏0
  • 缓存服务器Varnish

    摘要:线程对于缓存的对象,根据过期时间,组织成二叉堆,该线程周期检查该堆的根,处理过期的文件。缓存会根据进来的请求保存输出内容的副本当下一个请求到来的时候,如果是相同的,缓存会根据缓存机制决定是直接使用副本响应访问请求还是向源服务器再次发送请求。 博文参考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...

    MSchumi 评论0 收藏0
  • 缓存服务器Varnish

    摘要:线程对于缓存的对象,根据过期时间,组织成二叉堆,该线程周期检查该堆的根,处理过期的文件。缓存会根据进来的请求保存输出内容的副本当下一个请求到来的时候,如果是相同的,缓存会根据缓存机制决定是直接使用副本响应访问请求还是向源服务器再次发送请求。 博文参考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...

    William_Sang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<