页面缓存varnish-1

本公众号内容大多由平时操作整理记录,如果有错误的地方欢迎留言指正

缓存的概念

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

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

数据缓存:例如MySQL到web应用服务器之间的缓存服务器缓存的资源是数据缓存

页面缓存:接入层和应用层中间的缓存服务器缓存的是可缓存的页面,这层就是缓存层

缓存命中率:hit/(hit+miss),一般高于30%命中率则是正向收益,好的设计系统可以达到80%到95%以上

字节命中率:按照数据的字节大小来计算命中率

请求命中率:按照请求的数量来计算命中率

代理式缓存:客户端访问缓存服务器,缓存服务器没有命中缓存时到后端服务器请求数据,此时它作为反向代理服务器工作,这种类型的缓存服务器叫做代理式缓存

旁挂式缓存:客户端亲自去查询数据库,并且将数据复制给缓存服务器一份,下次先去找缓存服务器,如果没有命中则再去数据库服务器查询,此时这种工作方式的缓存叫做旁挂式缓存,这个客户端叫做胖客户端(smart client)

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

public cache:公共缓存,反向代理服务器的缓存功能

CND:Content Delivery Network 内容投递系统

GSLB:全网均衡调度

缓存有效性判断机制

过期时间 :由应用程序定义(存在问题,在有效时间内,后后端程序内容发生变化)

条件式验证请求

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

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

过期时间验证缓存是否失效颗粒度太大,如果页面刚刚缓存应用服务器发生了变化,结果客户端拿到的就是过期数据;从而加入了条件式验证缓存的失效性,每次客户端请求到达缓存服务器,缓存服务器都要拿本地的数据和应用服务器的数据比较时间戳,如果时间戳发生了变化则缓存新的数据;这样虽然粒度小了,但是还是会有问题,如果应用服务器在同一秒页面数据变化了三次,而缓存服务器拿到的是第一份数据,这样还是会发生数据失效的问题;从而又引入了Etag(扩展标记)来标记唯一的页面数据。此时虽然解决了数据失效性的问题,但是每次客户端的请求都要去后端服务器做比较,对缓存和应用服务器都是不小的压力,我们不得不采取折中的解决方案就是“过期时间验证+条件式验证”,将不经常变动的页面做过期时间验证,变动频繁的采用条件式验证。

请求与响应报文中使用缓存的请求标识

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

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

Varnish简介

Varnish是一款轻量级的页面缓存和反向代理软件,可以代理并缓存后端的静态页面,varnish的系统结构如下图:

varnish的结构与特点

基于内存进行缓存,速度快,重启后数据丢失

缓存规则与软件配置分开定义,两个配置文件

基于VCL定义缓存匹配规则

丰富的管理功能,varnishlog,varnishstat等

分manager process和cache process

varnish监听两个套接字,一个端口6081面向客户端提供服务,一个专门用于管理端口6082

Varnish的程序环境

varnish被收录于epel源中,可以配置好epel源使用yum安装,也可以编译安装。

: 配置varnish服务进程的工作特性,例如监听的地址和端口,缓存机制

: 配置各Child/Cache线程的缓存策略

: 主程序

: 命令行管理工具

:

: 查看日志工具

: 以NCSA格式查看日志

: 查看缓存日志状态信息

: 以rank方式查看日志

: 测试工具程序

: VCL配置文件重载程序

: varnish服务

: 日志持久的服务

: 日志持久的服务

: VCL配置文件重载程序

Varnish存储机制

varnish支持多种不同类型的后端存储,这可以在varnishd启动时使用-s选项指定。后端存储的类型包括:

(1)file:使用特定的文件存储全部的缓存数据,并通过操作系统的mmap()系统调用将整个缓存文件映射至内存区域(如果条件允许);

(2)malloc:使用malloc()库调用在varnish启动时向操作系统申请指定大小的内存空间以存储缓存对象;

(3)persistent(experimental):与file的功能相同,但可以持久存储数据(即重启varnish数据时不会被清除);仍处于测试期;

varnish无法追踪某缓存对象是否存入了缓存文件,从而也就无从得知磁盘上的缓存文件是否可用,因此,file存储方法在varnish停止或重启时会清除数据。而persistent方法的出现对此有了一个弥补,但persistent仍处于测试阶段,例如目前尚无法有效处理要缓存对象总体大小超出缓存空间的情况,所以,其仅适用于有着巨大缓存空间的场景。

-s [name=]type[,options]

Varnish各管理工具指

varnishd

varnishstat

varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss #显示指定参数的当前统计数据

varnishstat -l -f MAIN -f MEMPOOL #列出指定配置段的每个参数的意义

varnishtop

-1:打印统计信息一次并退出,而不是持续更新的显示

-i taglist:可以同时使用多个-i选项,也可以一个选项跟上多个标签

-I :对指定的标签的值基于regex进行过滤

-x taglist:排除列表

-X :对指定的标签的值基于regex进行过滤,符合条件的予以排除

varnishadm

varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 #登录管理程序

指令分类

配置文件内容

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180720G1TXDC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券