基础

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分钟后过期
条件式请求 比如,根据修改时间来判断是否有改动
访问流程 客户端请求缓存服务器,缓存服务器请求上游服务器缓存是否有效
  • 有效,则打包响应给客户端
  • 无效,则请求上游,上游响应最新数据,在由缓存回报给客户端,这样客户端始终可以得到新数据
还有一个问题,时间戳只能以秒计算,为了避免这种问题,可以使用etag扩展标签,为每个页面资源生成扩展标签,相当于哈希,只要页面内容变了,哈希码就会变化
访问流程和以上相似,当然也可以时间戳和和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

小结

从性能角度来说,3台varnish > 8台 squid 软件包建议查找使用顺序,先使用光盘中基础源 –> epel –> elrepo
命中率:hit /(hit+miss) 命中次数 /(命中次数 + 未命中)
文档命中率:从文档个数进行衡量:字节命中率:从内容大小进行衡量;
缓存处理步骤 接收请求 –> 解析请求(提取请求的 URL 及各种首部)-> 查询缓存 –> 新鲜度检测 –> 创建响应报文 –> 发送响应 –> 记录日志
varnish 如何存储缓存对象: file:单个文件;不支持持久机制: malloc:内存; persistent:基于文件的持久存储;
vcl 配置缓存系统的缓存机制 1、通过 vcl 配置文件进行配置; 2、先编译,后应用; 3、依赖于 c 编译器; 4、重载varnish(不要重启)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
Loading...