阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

高性能的开源http加速器Varnish介绍

481次阅读
没有评论

共计 6019 个字符,预计需要花费 16 分钟才能阅读完成。

Varnish
一、varnish 简介
Varnish 是一款高性能的开源 HTTP 加速器,它比 squid 还稳定,且效率更高,资源占用更少。相信在反向代理,web 加速方面,varnish 已经有足够能力代替 squid。挪威最大的在线报纸 Verdens Gang 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好。
 
二、Varnish 的结构与特点
Varnish 是一个轻量级的 Cache 和反向代理软件,先进的设计理念和成熟的设计框架是 Varnish 的主要特点,现在的 Varnish 总共代码量不大,功能上虽然在不断改进,但是还需要继续丰富和加强。下面总结了 Varnish 的一些特点:
(1)是基于内存缓存,重启后数据将消失。
(2)利用虚拟内存方式,io 性能好。
(3)支持设置 0~60 秒内的精确缓存时间。
(4)VCL 配置管理比较灵活。
(5)32 位机器上缓存文件大小为最大 2G。
(6)具有强大的管理功能,例如 top,stat,admin,list 等。
(7)状态机设计巧妙,结构清晰。
(8)利用二叉堆管理缓存文件,达到积极删除目的。

三、varnish 的系统架构
varnish 主要运行两个进程:Management 进程和 Child 进程(也叫 Cache 进程)。
 
Management 进程主要实现应用新的配置、编译 VCL、监控 varnish、初始化 varnish 以及提供一个命令行接口等。Management 进程会每隔几秒钟探测一下 Child 进程以判断其是否正常运行,如果在指定的时长内未得到 Child 进程的回应,Management 将会重启此 Child 进程。
 
Child 进程包含多种类型的线程,常见的如:
cache-main 线程:全局只有一个,用于启动 cache;
acceptor 线程:接收新的连接请求并响应;
worker 线程:child 进程会为每个会话启动一个 worker 线程,因此,在高并发的场景中可能会出现数百个 worker 线程甚至更多;
expiry 线程:从缓存中清理过期内容;
backend poll 线程:每个后端服务器一个,用于检测后端服务器的健康状况;
epoll/kqueue 线程:数量可配置,默认为 2,用于管理线程池
 
在配置 varnish 时,一般只需为关注 cache-worker 线程,而且也只能配置其线程池的数量,而除此之外的其它均非可配置参数。与此同时,线程池的数量也只能在流量较大的场景下才需要增加,而且经验表明其多于 2 个对提升性能并无益处。

四、Varnish 的安装
由于我使用的系统为 RHEL5.8,因此在安装 varnish 之前,需要安装如下软件包:
automake,autoconf,libtool,ncurses-devel,libxslt,groff,pcre-devel,pkgconfig
# yum -y install *.rpm
 
编译安装 varnish
# tar xf varnish-2.1.3.tar.gz
# cd varnish-2.1.3
# ./configure –prefix=/usr/loca/varnish
 

# make  && make install

为 varnish 提供配置文件
将 varnish 的默认配置文件复制成为 /etc/sysconfig/varnish
# cp /usr/local/varnish/etc/varnish/default.vcl  /etc/sysconfig/varnish
 
创建 Varnish 用户和 Varnish 的工作目录
# useradd –s /sbin/nologin varnish
#mkdir  /web/cache
#chown –R varnish:varnish /web/cache

在 varnish 2.0 版本中,启动 varnish 之前首先需要为 varnish 指定后端服务器地址,因此,我们需要编辑 varnish 的配置文件,指定后端服务器地址。
# vim  /etc/sysconfig/varnish
添加如下信息即可:
backend default {
    .host = “127.0.0.1”;
    .port = “80”;
}
 
五、varnish 的启动和停止
# /usr/local/varnish/sbin/varnishd -f /etc/sysconfig/varnish -s malloc,200M -T 127.0.0.1:2000 -a 0.0.0.0:8080
-f:指定 varnish 的配置文件
-s:指定 varnish 的存储类型和存储容量
-T:指定一个基于本文的管理接口,可用于在不停止 varnish 的情况下来管理 varnish
-a:指定监听的套接字
 
查看 varnish 是否启动成功
# netstat -tunlp | grep varnish
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                  LISTEN      18684/varnishd     
tcp        0      0 127.0.0.1:2000              0.0.0.0:*                  LISTEN      18683/varnishd     
其中 8080 为 Varnish 监听的端口,2000 为 Varnish 基于 telnet 的管理端口。

停止 Varnish,使用如下命令
# killall varnishd
 
六、Varnish 的二进制程序文件
在安装 Varnish 后,会生成许多二进制程序文件,其中常见的命令有:
/usr/local/varnish/sbin/varnishd: 这种 Varnish 的启动命令,最重要
/usr/local/varnish/bin/varnishadm:可用来控制管理 Varnish 实例的。如删除缓存对象
/usr/local/varnish/bin/varnishlog: 显示 Varnish 的日志信息
/usr/local/varnish/bin/varnishncsa:这个命令也可以显示 Varnish 的日志信息,只不过这个命令显示的日志信息的格式有点类似于 apache 的 combine 格式输出的日志。
/usr/local/varnish/bin/varnishstat:显示 Varnish 的缓存信息
 
七、varnishd 指令
varnishd 的启动命令是 /usr/local/varnishd/sbin/varnisd 命令,这个命令有众多参数,可以使用 /usr/local/varnish/sbin/varnishd –h 来查看相关参数的详细信息。其中常用的参数有:
-a address:port:指定 Varnish 监听的套接字
-b address:port:指定后端服务器地址及其监听端口
-d:表示 debug 调试模式
-f file:指定 Varnish 的配置文件
-P file:指定 Varnish 的 pid 文件
-p param=value:指定服务器参数,用来优化 Varnish 性能的
-n dir:指定 Varnish 的工作目录
-s kind[,storageoptions]:指定 Varnish 后端存储的方式。常用的后端存储方式有:
        -s malloc,-s file,<dir_or_file>,<size>。注意在 32 位的操作系统下,Varnish 最大仅支持 2G 的容量存储。
-t:指定缺省的 ttl 值
-T address:port:设定 Varnish 基于 telnet 的管理地址及其端口
-V:指定 Varnish 的版本号
-w int[,int[,int]]:指定 Varnish 的工作线程数。其配置方式有如下几种:
                  -w <fixed_count>
        -w min,max
        -w min,max,timeout [default: -w2,500,300]

八、Varnish 是如何记录数据的?
Varnish 一个比较显著的特点就是它如何记录数据的,varnish 将所有的数据全部记录到内存当中,当内存全部使用以后,又从头开始记录,覆盖最旧的记录。因此,这样就可以很快的记录数据,而且也不占用磁盘空间。不过,一旦服务器宕机的话,则内存中所有的数据都会被释放。
 
九、varnishlog 指令
Varnish 提供了众多的工具来查看内存中的数据,在这里我只说 varnishlog 的应用
在命令行上执行 varnishlog 命令,显示结果如下:
  17 RxHeader    c Accept-Encoding: gzip, deflate
  17 RxHeader    c Host: 192.168.108.202:8080
  17 RxHeader    c Connection: Keep-Alive
  17 VCL_call    c recv
  17 VCL_return  c lookup
  17 VCL_call    c hash
  17 VCL_return  c hash
其中第一列是任意的数,它用来定义请求,相同的号码代表相同的 HTTP 传输。
第二列是信息标记,所有的日志都带有一个标记(tag),标记对应相对的操作。Rx 表示 varnish 收到数据,Tx 表示 varnish 发送数据。
第三列代表数据是从哪里传出或者传入的,是从 c(client)还是 b(backend)。
第四列是被记录的数据。
Varnishlog 还有许多子选项:
-b:只显示 varnish 和 backend server 之间的日志,当您想要优化命中率的时候可以使用这个参数。
-c:和 - b 差不多,不过它代表的是 varnish 和 client 端的通信。
-i tag:只显示某个 tag 相关的信息,比如“varnishlog –iSessionOpen”将只显示新会话,注意,这个地方的 tag 名字是不区分大小写的。
-I:通过正则表达式过滤数据,比如“varnishlog -c -i RxHeader -I Cookie”将显示所有接到来自客户端的包含 Cookie 单词的头信息。

十、varnishstat 指令
varnishstat 的二进制程序是 /usr/local/varnish/bin/varnishstat。缓存命中率的高低直接说明了 varnish 的运行状态和效果,较高的缓存命中率说明了 varnish 运行状态良好,web 服务器的性能也会提高很多,反之,过低的缓存命中率说明 varnish 的配置可能存在问题,那么就需要进行调整,因此,从整体上了解 varnish 的命中率和缓存状态,对于优化和调整 varnish 至关重要。
使用 /usr/local/varnish/bin/varnishstat 命令可以查看 Varnish 的缓存状态信息。如:
# /usr/local/varnish/bin/varnishstat
Hitrate ratio:        1        1        1
Hitrate avg:    0.5294  0.5294  0.5294
 
          18        0.00        0.01 Client connections accepted
          17        0.00        0.01 Client requests received
          9        0.00        0.00 Cache hits
          8        0.00        0.00 Cache misses
          8        0.00        0.00 Backend conn. success
          8        0.00        0.00 Fetch with Length
          11          .            .  N struct sess_mem
          1          .            .  N struct objectcore
          1          .            .  N struct objecthead
          1          .            .  N struct smf
          1          .            .  N large free smf
          10          .            .  N worker threads
          10        0.00        0.00 N worker threads created
          1          .            .  N backends
          8          .            .  N expired objects
          8          .            .  N LRU moved objects
          10        0.00        0.00 Objects sent with write
          18        0.00        0.01 Total Sessions
          17        0.00        0.01 Total Requests
 
其中比较重要的参数有:
Client connections accepted:表示接受的连接数
Client requests received:表示接受的请求总数,如果使用了长连接,那么该值一般大于 Client connections accepted 值
Cache hits:表示命中的次数
Cache misses:表示非命中的次数
N struct objectcore:表示被缓存对象的数量
N expired objects:表示过期的缓存对象数量
N LRU moved objects:表示被淘汰的缓存对象数量

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/117752.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计6019字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7973934
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...