varnish的架构和日志

varnish的架构

	知道varnish的内部结构有两个重要的原因:
首先,架构主要负责性能,其次,它影响你如何将Varnish集成到你自己的架构中。
主程序块是Manager进程,包含在二进制程序varnishd中。
Manager进程的任务是将任务包括缓存委托给子进程。
Manager进程确保每个任务总是有一个进程。
这样设计的主要驱动因素就是安全性。
可以通过以下方式访问Manager的命令行界面(CLI):
1)varnishadm管理界面部分,
2)Varnish Agent vagent2
3)Varnish管理控制台(VAC)(通过vagent2)
Varnish Agent vagent2是一个varnishd服务的开源HTTP REST接口,它提供远程控制和监视服务。
vagent2提供了一种Web UI ,同时你可以编写自己的UI。
vagent2的一些功能是:VCL上传,下载,保存(存储到磁盘),参数查看,存储(还没有持续),显示/清除应急消息,开始/停止/查看varnishd服务,取缔功能,varnishstat 采用JSON格式。
父进程:manager
Manager 进程由root用户所拥有,其主要功能有:
应用配置更改(从VCL文件和参数)
将任务委托给子进程:Cacher和VCL到C编译器(VCC)
监视varnish
提供一个varnish命令行界面(CLI)
初始化子进程:Cacher
Manager进程每几秒钟检查一次cacher是否仍然存在。
如果Manager在由ping_interval给定的时间间隔内没有得到回复,那么Manager将杀死Cacher并重新启动。
如果Cacher意外退出,也会发生自动重启。
你可以通过使用varnishadm ping来进行手动ping。
子进程的自动重启是Varnish的一种复原属性,这个属性可以确保即使Varnish包含一个可以危害子进程的重要bug,子进程通常也会在几秒钟内重新启动,您可以使用auto_restart参数切换此属性。
注意:
即使您没有察觉到长时间的服务停机时间,您也应该检查varnish的子进程是否正在重新启动。
这一点很重要,因为子进程重启会导致额外的加载时间,因为这段时间中varnishd会不断清空缓存。
自动重启的日志记录在/var/log/syslog,为了验证子进程是否被重启,你也可以用varnishstat中的MAIN.uptime计数器来检查它的生命周期。
子进程:cacher
由于Cacher侦听的是公共IP地址和已知端口,因此它暴露在恶意客户端面前。
因此,出于安全考虑,这个子进程由非特权用户拥有,并且没有与其父进程Manager进行反向通信。
Cacher的主要功能是:
听取客户端的要求
管理工作线程
存储缓存
记录流量
更新统计的计数器
Varnish使用工作区来减少每个线程在需要获取或修改内存时的争用。
有多个工作区,但最重要的是会话工作区,它用于处理会话数据。
如在输入到缓存之前将www.example.com更改为example.com,来减少重复。
请注意,即使你拥有5 MB的会话工作区并使用1000个线程,但实际的内存使用量也不是5 GB,虚拟内存的使用量确实是5GB,但是除非你真的使用内存,这不是问题,您的内存控制器和操作系统将跟踪您实际使用的内容。
为了与系统的其他部分进行通信,子进程使用VSL访问文件系统,这意味着如果一个线程需要记录某些内容,所需要做的就是设定一个锁,然后写内容到到内存区域,最后再解锁。
除此之外,每个工作线程都有一个缓存用于记录日志数据以此来减少锁定争用。
日志文件通常大约80MB,并分成两部分:第一部分是计数器,第二部分是请求数据,要查看实际数据,可以采用工具解析VSL。
由于日志数据并不意味着都是以原始形式写入磁盘的,因此Varnish可以做得非常详细,这样你可以使用其中一种日志解析工具来提取您想要的信息 - 即可以永久存储也可以实时监控Varnish。
如果Cacher出现问题,它会记录一个详细的应急信息到syslog。
当测试时,你可以使用varnishadm debug.panic.worker 命令或使用vanish agent web 页面上的induce panic按钮来减少varnishd服务的应急信息。 VCL编译
打印编译为C语言的VCL代码并退出:
varnishd - C - f < vcl_filename >
用于检查您的VCL代码是否正确编译。
Varnish配置语言VCL配置了Varnish的高速缓存策,然后VCL被VCC进程转换为C,它是由一个普通的C编译器gcc编译,然后链接到正在运行的Varnish实例中。
由于VCL的编译是在子进程之外完成的,所以不会无意中加载格式不正确的VCL,从而影响正在运行的Varnish实例。
因此,运行Varnish时更改配置非常方便,新的VCL的政策会立即生效,但是,所使用的旧配置缓存的对象可能会一直存在,直到它们没有了旧的引用或新的配置对其执行操作为止。
一个已编译的VCL文件将一直存在,直到完全重启Varnish,或直到管理界面发出vcl.discard命令,在使用完编译的VCL文件后你只能删除。
您可以通过读取vcl.list参数来查看VCL引用的数量。 VCL重载
varnishd可以重新加载VCL程序,无需重新启动,只是重新加载VCL编译代码。
service varnish reload
systemctl reload varnish
varnish_reload_vcl
varnishadm vcl.load <compiledVCL> <VCLsourcecode>
varnishadm vcl.list
varnishadm vcl.use

varnish日志

	varnish日志中记录有请求,缓存和对varnish共享内存日志(VSL)的响应信息。
内存日志覆盖有两个效果,一方面没有历史数据,但另一方面却有大量的信息以非常快的速度获得。
当然,仍然可以将日志存储在文件中。
varnish会生成大量的数据,因此它不会将日志默认写入磁盘,而只会记录到内存中。
如果需要记录日志到磁盘上,可以通过在/etc/default/varnishlog和/etc/default/varnishncsa中分别设置VARNISHNCSA_ENABLED=1来实现。

日志工具

	显示详细日志:
varnishlog
用于访问特定的数据,它提供了特定客户的信息和要求。
varnishncsa
以NCSA通用日志格式显示varnish访问日志。
varnishtest
允许显示测试中的日志记录和计数器。
统计工具:
varnishstat
用于访问全局计数器,不读取varnish日志中的条目。
varnishtop
读取Varnish日志并呈现最常出现的日志条目的不断更新的列表。
varnishhist
读取Varnish日志,并显示一个连续更新的直方图,显示最后N个请求的处理分布情况。

日志布局

	varnish日志事务处理如图所示,varnishlog是最常用的工具之一,并采用了按TCP会话,前端或后端工作者分组的事务机制重新排序事务。
varnishlog的各种参数是为帮助你找到你想要的东西。使用varnishlog可以有效地过滤varnish工作中产生的大量日志数据。

事务处理

	varnishlog -g <session|request|vxid|raw> -d
Varnish Transaction IDs (VXIDs,varnish 事务id)被应用于大量不同种类的工作项目中。
事务类型:
session:tcp 会话
request:前端或后端工作者处理的事务
varnish默认按照VXID来分组,1是后端请求BeReq,2是客户端请求Request,3是会话Session。
事务组
事务组是分层的
层级和关系
Level 1: Client request (cache miss)
Level 2: Backend request
Level 2: ESI subrequest (cache miss)
Level 3: Backend request
Level 3: Backend request (VCL restart)
Level 3: ESI subrequest (cache miss)
Level 4: Backend request
Level 2: ESI subrequest (cache hit)

varnish的架构和日志的更多相关文章

  1. 基础架构之日志管理平台搭建及java&net使用

    在现代化的软件开发流程中,日志显得非常的重要,不可能再零散的游离在各个项目中,等查看日志的时候再登录服务器去到特定的目录去查看,这显然很繁琐且效率低下,所有整合一套日志管理平台,也显得非常重要,这篇文 ...

  2. 基础架构之日志管理平台及钉钉&邮件告警通知

    接上一篇,我们继续解释如何把ELK跟钉钉及发送邮件功能结合起来,让我们及时的了解重要日志并快速反馈. Sentinel 安装,项目介绍在https://github.com/sirensolution ...

  3. 微服务架构Day02-SpringBoot日志slf4j

    日志框架 日志门面(接口,日志抽象层 ) 日志实现 JCL(Jakarta Commons Logging).slf4j(Simple Logging Facade for Java).jboss-l ...

  4. 海量日志实时收集系统架构设计与go语言实现

    日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求.运维成本低.稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的.然而这时理想中的日志收集系统,现实往往不是这样的. ...

  5. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  7. java架构师负载均衡、高并发、nginx优化、tomcat集群、异步性能优化、Dubbo分布式、Redis持久化、ActiveMQ中间件、Netty互联网、spring大型分布式项目实战视频教程百度网盘

    15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; ...

  8. 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  9. 15套java架构师大型分布式综合项目实战、千万高并发-视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

随机推荐

  1. LeetCode1---两数之和

    import java.util.Arrays;import java.util.HashMap;import java.util.Map; /** *功能描述 :两数之和 * @author lkr ...

  2. 杭电 5363 求集合的非空子集中key的数量

    Description soda has a set S with n integers {1,2,…,n}. A set is called key set if the sum of intege ...

  3. allegro中出光绘文件遇到问题的解决办法

    一:设置好光绘文件参数后,选择check dabase before artwork后,点击生成光绘时出现错误告警信息:    database has errors:artwork generati ...

  4. Python安装配置

    Python下载 官网下载地址:https://www.python.org/downloads/windows/ 下载安装包: python-3.5.0-amd64(64位).exe python- ...

  5. Linux清除arp缓存

    arp缓存就是IP地址和MAC地址关系缓存列表.在Windows下 arp -d [$ip] 不指定IP地址时清除所有arp缓存.在Linux下 arp -d $ip 必须指定IP地址才能执行这条命令 ...

  6. 【转】Java的path,classpath,java_home环境变量的配置与具体含义

    对于一个Java初学者来说,第一步要做的是安装jdk并配置环境变量,一般按照书上或者网上的步骤,一步步照着做就行了,但是对于初学者来说,很多问题没有解决,比如为什么很多配置方法各不相同,却都能够配置成 ...

  7. Redundant Paths-POJ3177(强连通缩点)

    http://poj.org/problem?id=3177 题目大意:给你几个点和几条边   求你能加几条边  就可以让每一个点到达任意点都有两种方法. Description In order t ...

  8. Spring 加载类路径外的资源文件

    原文:http://blog.csdn.net/gaofuqi/article/details/46417259 <bean id="propertyConfigurer" ...

  9. 网页页面NULL值对浏览器兼容性的影响

    网页页面NULL值对浏览器兼容性的影响       近期做项目中一个页面中的input radio出现浏览器兼容性问题. 主要问题: 在谷歌浏览器,360急速模式和搜狗急速模式中给radio初始动态赋 ...

  10. Cracking the Coding Interview 150题(一)

    1.数组与字符串 1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.假设不允许使用额外的数据结构,又该如何处理? 1.2 用C或C++实现void reverse(char* str)函数, ...