• Varnish介绍


    varnish介绍

    varnish

    	官方网站
    		https://varnish-cache.org/
    		http://book.varnish-software.com/4.0/
    	Varnish是反向HTTP代理,有时被称为gaHTTP加速器或Web加速器,反向代理是作为普通服务器向客户端显示的代理服务器。
    	varnish(高速缓存)存储器中的文件或文件片段,用于减少将来的等效请求时的响应时间和网络带宽消耗。
    	varnish设计用于现代硬件,现代操作系统和现代工作负载。
    	Varnish采用全新的软件体系结构,和现在的硬件体系配合比较紧密。
    	Varnish不仅仅是用缓存内容来加速你服务器的反向HTTP代理,根据安装情况,varnish也可以用作:
    		web应用防火墙,DDoS攻击防御者,热链保护器,负载平衡器,整合点,单点登录网关,认证授权策略机制,快速修复不稳定的后端和HTTP路由器。
    	varnish是灵活的,因为可以在其Varnish配置语言(VCL)中编写自己的缓存策略,VCL是基于C的域特定语言,配置完成VCL后,将VCL转换为C代码并进行编译,因此Varnish可以快速执行。
    

    varnish的特点

    	Varnish基于内存缓存,重启后数据将消失      
    	利用虚拟内存方式,io性能好
    	支持设置0~60秒内的精确缓存时间
    	VCL配置管理比较灵活
    	32位机器上缓存文件大小为最大2G
    	具有强大的管理功能,例如top,stat,admin,list等
    	状态机设计巧妙,结构清晰
    	利用二叉堆管理缓存文件,达到积极删除目的
    

    varnish的工作原理

    	Varnish 与一般服务器软件类似,分为master 进程和child 进程。
    		master进程读入存储配置文件,调用合适的存储类型,然后创建/读入相应大小的缓存文件,接着master 初始化管理该存储空间的结构体,然后fork 并监控child 进程。child进程在主线程的初始化的过程中,将前面打开的存储文件整个mmap 到内存中,此时创建并初始化空闲结构体,挂到存储管理结构体,以待分配。
    		child进程分配若干线程进行工作,主要包括一些管理线程和很多worker 线程。
    	varnish的某个负责接收新HTTP 连接线程开始等待用户,如果有新的HTTP连接过来,它总负责接收,然后唤醒某个等待中的线程,并把具体的处理过程交给它。
    	Worker线程读入HTTP 请求的URI,查找已有的object,如果命中则直接返回并回复用户,如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。
    	分配缓存的过程:
    		它根据所读到object 的大小,创建相应大小的缓存文件。
    		为了读写方便,程序会把每个object的大小变为最接近其大小的内存页面倍数。
    		然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。
    		如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。
    		如果缓存已满,就根据LRU 机制,把最旧的object 释放掉。
    	释放缓存的过程:
    		有一个超时线程,检测缓存中所有object 的生存期,如果超初设定的TTL(Time To Live)没有被访问,就删除之,并且释放相应的结构体及存储内存。
    		注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该释放内存是连续的,就将它们合并成更大一块内存。
    	整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的object 都考虑是在内存中,如果系统内存不足,系统会自动将其换到swap 空间,而不需要varnish 程序去控制。
    

    varnish的优缺点

    	varnish的优点
    		Varnish采用了“Visual Page Cache”技术,所有缓存的数据都直接从内存读取。
    		Varnish稳定性比Squid高,宕机率很低。
    		通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存。
    		Varnish可以支持更多的并发连接。
    	
    	varnish的缺点
    		Varnish在高并发状态下,CPU、I/O和内存等资源的开销高于Squid。
    		Varnish的进程一旦挂起、崩溃或者重启,缓存的数据都会从内存中释放出来,此时的所有请求都会被发送到后端应用服务器上,在高并发的情况下,就会给后端服务器造成很大压力。
    

    varnish设计原则

    	varnish设计目的:
    		解决实际问题
    		运行于现代硬件(64位多核架构)
    		与内核协同工作,而不是针对内核
    		将Varnish配置语言VCL翻译成C语言
    		可通过varnish模块VMODs扩展
    		通过其面向工作区的共享内存模型减少锁定争用
    	varnish的重点始终是性能和灵活性。
    	Varnish使用面向工作区的内存模型,而不是在运行时分配确切的空间空间。
    	varnish不管理其分配的内存,但它将此任务委托给操作系统,因为内核通常可以比用户空间程序更好地执行此任务。
    	事件过滤器和通知设施,例如epoll和kqueue是操作系统的高级特性,这些特性是为像varnish这样的高性能的服务器设计的,通过使用这些特性,varnish可以移动大量的复杂信息到操作系统的内核中,这样会更好地决定那些线程会被执行。
    	Varnish使用Varnish配置语言VCL,允许准确地指定如何使用和组合Varnish的功能。
    	VCL被翻译成C编程语言代码,该代码使用标准C编译器进行编译,然后在运行时直接动态链接到Varnish中。
    	当你需要的功能在VCL中没有提供时,你可以在数据库中找到个ip地址,以便于你可以写原始C编码在自己的VCL上。
    	那个地址是在线的,但不鼓励使用,相比于在线的C,建议把你的C编码放入varnish的VMOD模块中。
    	VMOD通常以VCL和C编程语言编码,实际上,VMOD是一个共享库,具有可以从VCL代码调用的函数。
    	varnish共享存储日志(VSL)允许Varnish让其他应用程序解析数据并提取有用的信息,这个过程几乎无需花费时间。
    

    存储对象

    		对象:HTTP响应消息的本地存储
    		varnish的对象存储在内存中,并通过hash key进行寻址
    		可以控制hashing
    		多个对象可以具有共同的hash
    	对象是本地存储的响应信息且被定义在协议中,这些信息被映射为hash值并存储在内存中,涉及到的相关对象被存储hash树中。
    	Varnish的一个相当独特的功能是它允许你控制散列算法的输入。
    	默认情况下,hash key是由HTTP主机头和URL制成,且非常重要。
    	但是,你也可以通过使用其他东西来创建hash key,例如,你可以使用Cookie或客户端请求的用户代理来创建hash key。
    	HTTP指定可以根据客户端的偏好从相同的URL提供多个对象,例如,gzip格式的内容只发送到指示gzip支持的客户端。
    	varnish在一个hash key下存储单个压缩对象。
    	根据客户端请求,Varnish会检查Accept-Encoding头域。
    	如果客户端不接受gzip对象,Varnish会即时解压缩对象并将其发送给客户端。
    

    对象生命周期

    	图中显示了缓存对象的生命周期。
    	缓存对象具有原始时间戳t_origin和三个持续时间属性:1)TTL,2)grace和3)keep。
    	t_origin是在后端创建对象的时间。
    	一个对象生活在缓存中,直到经过之后TTL + grace + keep,该对象被Varnish守护进程删除。
    	VCL - vcl_backend_fetch和 VCL - vcl_backend_response有选择的解释了varnish是如何处理后端的响应以及这些时间属性是如何影响后续行动的。
    

    varnish的应用程序

    	varnish应用程序组成:
    		/usr/bin/varnishadm
    		/usr/bin/varnishhist
    		/usr/bin/varnishlog
    		/usr/bin/varnishncsa
    		/usr/bin/varnishstat
    		/usr/bin/varnishtest
    		/usr/bin/varnishtop
    		/usr/sbin/varnishd
    		。。。。
    	varnissh最重要的部分是守护进程(后台服务)varnishd。
    	核心进程varnish的接收来自客户端的HTTP请求,并将请求发送到后端backend,缓存返回的缓存的结果并回复客户端请求。 
    	varnishtest是用于测试您的Varnish安装的脚本驱动程序, varnishtest非常强大,因为它允许创建客户端模型,从模型或真实的后端中获取内容,与实际的Varnish配置交互,并说明预期的行为。
    	varnishadm控制正在运行的Varnish实例,该 varnishadm 实用程序建立在的命令行界面(CLI)连接的varnishd上,此实用程序是唯一可能影响运行的Varnish实例的实用程序,可以使用varnishadm开始和停止varnishd,更改配置参数,重新加载Varnish配置语言(VCL),查看最新的参数文档等。
    	varnish日志varnishlog提供大量信息,因此通常需要对其进行过滤。例如,“只显示与X匹配的”。 
    	varnishstat用于访问全局计数器,它提供总体统计信息,例如请求总数,对象数量等, varnishstat在将其varnishlog用于分析您的varnish安装时特别有用。
    

    varnish安装

    	varnish官方站点: http://www.varnish-cache.org/
    	直接下载安装包进行安装
    	采用epel源安装
    		yum install varnish
    		rpm -ql varnish
    		/etc/logrotate.d/varnish
    		/etc/varnish
    		/etc/varnish/default.vcl
    		/etc/varnish/varnish.params
    		/run/varnish.pid
    		/usr/bin/varnishadm
    		/usr/bin/varnishhist
    		/usr/bin/varnishlog
    		/usr/bin/varnishncsa
    		/usr/bin/varnishstat
    		/usr/bin/varnishtest
    		/usr/bin/varnishtop
    		/usr/lib/systemd/system/varnish.service
    		/usr/lib/systemd/system/varnishlog.service
    		/usr/lib/systemd/system/varnishncsa.service
    		/usr/sbin/varnish_reload_vcl
    		/usr/sbin/varnishd
    		/usr/share/doc/varnish-4.0.4
    		/var/lib/varnish
    		/var/log/varnish
    

    varnish程序架构

    		Manager进程
    		Cacher进程,包含多种类型的线程:
    				accept, worker, expiry, ... 
    		shared memory log:
    				统计数据:计数器;
    				日志区域:日志记录;
    					varnishlog, varnishncsa, varnishstat... 
    		配置接口:VCL(Varnish Configuration Language)
    				vcl complier --> c complier --> shared object
    

    varnish的程序环境

    		varnish环境配置,配置varnish服务进程的工作特性,例如监听的地址和端口,缓存机制:
    			/etc/varnish/varnish.params
    		VCL配置文件,配置各Child/Cache线程的缓存策略:
    			/etc/varnish/default.vcl
    		主程序:
    				/usr/sbin/varnishd
    		CLI interface:
    				/usr/bin/varnishadm
    		Shared Memory Log交互工具:
    				/usr/bin/varnishhist
    				/usr/bin/varnishlog
    				/usr/bin/varnishncsa
    				/usr/bin/varnishstat
    				/usr/bin/varnishtop		
    		测试工具程序:
    				/usr/bin/varnishtest
    		VCL配置文件重载程序:
    				/usr/sbin/varnish_reload_vcl
    		Systemd Unit File:
    				/usr/lib/systemd/system/varnish.service:varnish服务
    				/usr/lib/systemd/system/varnishlog.service:varnish日志服务
    				/usr/lib/systemd/system/varnishncsa.service	:varnish日志持久的服务
    
  • 相关阅读:
    Flask笔记:cookie
    Flask笔记:文件上传
    Python内置库:threading(多线程操作)
    Linux服务器架设篇,DNS服务器(三),正反解区域的配置
    Linux服务器架设篇,Windows中的虚拟机linux上不了外网怎么办?
    Linux服务器架设篇,DNS服务器(二),cache-only DNS服务器的搭建
    Linux服务器架设篇,DNS服务器(一),基础知识
    Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?
    Linux网络安全篇,FTP服务器的架设
    Linux基础管理篇,软件管理程序,yum与rpm
  • 原文地址:https://www.cnblogs.com/shenxm/p/8464953.html
Copyright © 2020-2023  润新知