使用Varnish为网站加速(一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【8月更文挑战第8天】Varnish是一款高性能的开源HTTP加速器。

使用Varnish为网站加速
一、varnish概述
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid,性能居然比以前更好。
Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算 机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。

处理缓存的顺序: 接受到请求 –- 分析请求(分析你的URL,分析你的首部) -- hash计算 -- 查找缓存 -- 新鲜度检测 --- 访问源 --- 缓存 – 建立响应报文 – 响应并记录日志

监听端口号: 6081
官方网站:
https://www.varnish-cache.org/
image.png
Varnish有自己的领域特定语言, varnish config language VCL
管理进程: management
子进程: child/cache
下载:
https://www.varnish-cache.org/releases
image.png

二、 varnish基础概念详解
1、比起squid更加轻量级,大致有以下几个特点:
2、可以基于内存缓存,也可以在磁盘上缓存
3、如果期望内存大小超过几十个G,比如图片服务器,纯粹使用内存,性能未必好,这时候可以使用磁盘进行缓存,或使用SSD X 2 做RAID1避免磁盘损坏,在实现随机访问上 ssd硬盘要比机械硬盘要好的多,如果必须要缓存在磁盘上还是建议使用ssd磁盘
4、可以利用虚拟内存方式,IO性能会非常好
5、支持设置0-60秒 精确缓存时间

2 支持VCL
其配置是通过vcl编程语言来完成的。 其配置需要先转换成C代码,所以使用vcl所写的配置,要先转换成C语言代码,因此要依赖于GCC 临时的编译vcl配置的,编译完之后才能运行起来
注: Varnish Configuration Language - VCL(varnish配置语言-VCL)。
Varnish使用区域配置语言,这种语言叫做“VCL”(varnish configuration language),在执行vcl时,varnish就把VCL转换成二进制代码。
VCL文件被分为多个子程序,不同的子程序在不同的时间里执行,比如一个子程序在接到请求时执行,另一个子程序在接收到后端服务器传送的文件时执行。

3 独特的日志存储及管理机制
日志既然保存在内存中,日志可以供多个应用程序所访问,所以一般查看命中率,当前请求有多少get post 方法等等,都需使用专用的工具才可以查看,比如 varnishlog 等命令工具用来查看日志信息

4 支持使用varnish状态引擎
通过巧妙的状态引擎的设计完成不同的引擎对用户的请求和缓存代理机制进行处理,用配置文件为状态引擎提供状态法则,完成缓存处理、完成代理处理等等

三、 varnish 缓存原理
varnish缓存数据机制image.png
VCL处理流程图image.png
处理过程大致分为如下几个步骤:
(1)Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或Pipe,或者进入Lookup(本地查询)。
(2)Lookup状态,在缓存中查找用户请求的对象,如果缓存中没有其请求的对象,后续操作很可能会将其请求的对象进行缓存;进入此状态后,会在hash表中查找数据,若找到,则进入Hit状态,否则进入miss状态。

(3)Pass状态,在此状态下,会进入后端请求,即进入fetch取状态。
(4)Fetch状态,在Fetch取状态下,对请求,进行后端的获取,发送请求,获得数据,并进行本地的存储。
(5)Deliver 提供状态, 将获取到的数据发送给客户端,然后完成本次请求。
注:
pass:绕过缓存,即不从缓存中查询内容或不将内容存储至缓存中;
pipe:不对客户端进行检查或做出任何操作,而是在客户端与后端服务器之间建立专用“管道”,并直接将数据在二者之间进行传送;此时,keep-alive连接中后续传送的数据也都将通过此管道进行直接传送,并不会出现在任何日志中;image.png
用户通过varnish加速时,有4线路可以获得数据。 image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
存储 缓存 Linux
使用Varnish为网站加速(二)缓存一个网站
【8月更文挑战第9天】使用Varnish为网站加速安装使用缓存一个网站
22 1
|
存储 缓存 监控
RH358优化Web服务器流量--使用Varnish缓存静态网页
RH358优化Web服务器流量--使用Varnish缓存静态网页
326 0
RH358优化Web服务器流量--使用Varnish缓存静态网页
|
应用服务中间件 nginx PHP
|
缓存 应用服务中间件 PHP
|
存储 缓存 安全
|
缓存 关系型数据库 MySQL