varnish1----基础

varnish基础

varnish官网:https://varnish-cache.org/
在计算机领域中,任何两个层级之间不能协调时,无论在特性和性能上,都可以加一个中间层来解决,缓存层是典型的中间层
缓存不是权威层,有时长的,会过期,确保缓存大部分是有效的,这样缓存命中率才高,命中才是缓存的根本价值

局部性特征
时间局部:如果一个数据被访问到,随后可能又在次被访问
空间局部:如果一个数据被访问到,周边的其他数据很快也有可能被访问,通过预加载的方式,让数据加载到缓存系统中并随后能应用到
局部性意味着数据是有热区

假设有1000W商品,仅有20%热门商品(热区效应),然而这20%商品占用80%的用户,热门商品会越来越好,从人性角度来说,商品若不好,人们也会说,为了面子

那热区效应会更加明显,在20%商品基础上,进行过滤百分之20也就是40W,承载着80的交易额,那么将这40W商品缓存下来,也就意味着系统能承载80%-90%压力,这里指的商品展示信息

http/1.0
expires 绝对时间,过期机制有一个问题,不同地区,时区不一样,会导致不同时区,缓存的结果也不一样

1、若源时钟有变化,客户端取的不是最新数据,因为缓存还没有过期
2、如果缓存过期,上游一定发生变化吗?不一定,这样会浪费网络IO,为了避免这种方式可以使用http/1.1条件式请求

http/1.1
相对时间,比如忽略时区,比如设置30分钟后过期

条件式请求
比如,根据修改时间来判断是否有改动

if modifiled
    not-modifiled    响应码304
else
    ok 响应码200

    
访问流程
客户端请求缓存服务器,缓存服务器请求上游服务器缓存是否有效

  • 有效,则打包响应给客户端
  • 无效,则请求上游,上游响应最新数据,在由缓存回报给客户端,这样客户端始终可以得到新数据

还有一个问题,时间戳只能以秒计算,为了避免这种问题,可以使用etag扩展标签,为每个页面资源生成扩展标签,相当于哈希,只要页面内容变了,哈希码就会变化

if none-match
    not-etag    响应码304
else
    ok    响应码200

访问流程和以上相似,当然也可以时间戳和和etag结合

注意:
若发布变更和还没有过期的缓存,需要清理过期的缓存项
千万不要清空缓存和重启缓存服务器,缓存一般使用2天才能达到最优

gslb    全局服务负载系统,快速响应用户的请求
智能DNS是根据地理位置来响应用户的请求,那么地理位置IP哪里来的,供应商这边有相关的数据库
uri分段机制,每个缓存不同的URI,类似分布式和键值

varnish 并发性能很好,但稳定性不如squid+

基于epel源 varnish 4.0.5
工作机制
m/w     和nginx相似    management/cahild或者cache   主进程/子进程

varnish 架构

vcl Varnish Configuration Language          只有if
varnish基于c语言写的

若想配置文件不重启完成加载,必须使用VCL编译器生成可动态装置二进制模块才可以
使用VCL编译器转换成C语言,在使用C编译器,C程序的共享模块,可以被多个子进程所共享并装入进程内部(热装)

varnish两个端口
6081为客户端
6082管理口 runtime var   

varnishadm >>>>>

需要共享密钥谁secret

存储缓存项

支持三种缓存机制
1、malloc    使用内存当缓存空间,建议size必须设置,避免内存空间使用完导致崩溃
2、file    存放在文件系统下某个路径下的文件,最大不超过2G的文件,所有的缓存都存放在一个文件中,便于高效管理,但用户看到的是单一文件,简单来说是文件逻辑
3、persistent    持久化数据,此种不推荐,目前应该还在实验阶段

安装并启动varnish

yum install varnish
systemctl start varnish

客户端访问
[root@localhost ~]# curl -I http://192.168.10.2:6081/
HTTP/1.1 503 Backend fetch failed
Date: Tue, 10 Aug 2021 06: 53:27 53:27 GMT
Server: Varnish
Content-Type: text/html; charset=utf-8
Retry-After: 5
X-Varnish: 10
Age: 0
Via: 1.1 varnish-v4
Content-Length: 279
Connection: keep-alive

小结

http://varnish-cache.org/docs/4.0/users-guide/
http://varnish-cache.org/docs/4.0/users-guide/performance.html#users-performance

从性能角度来说,3台varnish > 8台 squid
软件包建议查找使用顺序,先使用光盘中基础源 --> epel --> elrepo

命中率:hit /(hit+miss)
命中次数 /(命中次数 + 未命中)

文档命中率:从文档个数进行衡量:字节命中率:从内容大小进行衡量;

缓存处理步骤
接收请求 --> 解析请求(提取请求的 URL 及各种首部)-> 查询缓存 --> 新鲜度检测 --> 创建响应报文 --> 发送响应 --> 记录日志

varnish 如何存储缓存对象:
file:单个文件;不支持持久机制:
malloc:内存;
persistent:基于文件的持久存储;

vcl 配置缓存系统的缓存机制
1、通过 vcl 配置文件进行配置;
2、先编译,后应用;
3、依赖于 c 编译器;
4、重载varnish(不要重启)

posted @ 2021-08-16 11:02  Final233  阅读(59)  评论(0编辑  收藏  举报