varnish的架构和日志

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)

原文地址:https://www.cnblogs.com/shenxm/p/8465024.html

时间: 2024-10-28 06:50:16

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

Nginx LB+keepalived+varnish+NAMP架构部署wordpress实现动静分离

Nginxproxy+varnish Nginx负载均衡它可基于四层和七层之间进行调度,而且对后端各个节点具有健康状态检测的功能,当后端服务器故障时,会自动标记为不可用状态,当后端节点上线时再将请求调度至此节点,配合keepalived利用飘移IP,高可用保证调度器的实时在线.为保证热区数据的快速响应配合varnish缓存加速,并实现动静分离. 案例架构拓扑如下: 拓扑环境如下: 前端:Nginx+keepalived高可用 调度服务器:Varnish1.Varnish2 缓存服务器:Varni

rsyslog+loganalyzer+mysql+apache+php的lamp架构搭建日志服务器

当服务器遇到问题时,运维工程师都会根据日志分析问题,当黑客入侵服务器时,基本都会删除日志,以免留下蛛丝马迹,由此可见日志对服务器来说多么重要,为此很多公司都会有自己的日志服务器,下面我们来一起学习如何搭建日志服务器和日志分析工具. 1.首先必须得客户机与服务器都安装rsyslog这个软件: [[email protected] ~]# yum -y install rsyslog 2.客户机修改配置文件(1.4为日志服务器) [[email protected] ~]# grep -v "^$&

架构设计 - 日志管理接口设计

在后端代码中,日志无处不在,自己设计自己的一套日志管理代码,提供一套好用的日志接口将大大方便代码的开发. 其中在日志管理代码的编写中,主要有以下难点: 1.数目不确定的入参函数编写 2.日志权限控制 3.日志输出形式. 接口设计: 1.提供三类日志打印形式:1)控制台打印信息,类似printf的接口封装 2)函数追踪接口,打印当前代码的文件名,函数名及行,以及一些设定的输出参数 3)日志打印函数,提供打印级别控制,且打印内容输出到日志文件中 2.提供日志级别控制:1)在打印日志时提供当前日志级别

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构.大数据.搜索.开源技术 QQ:306591368 技术Blog:http://blog.csdn.net/yangbutao 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包

java架构师、高性能、高并发、高可用、高可扩展、性能优化、集群、电商网站架构

15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程内容包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.to

高并发电子商务平台技术架构

原文出自:http://blog.csdn.net/yangbutao/article/details/12242441 http://stamen.iteye.com/blog/1525924 我自己的大型B2B和B2C站点原来也是用Hibernate,可是后来不得不换成mybatis, 第一是用Hibernate 因为它封装得太高了.非常多东西是隐式进行的.常常引起问题,非常难定位.毕竟凡事有利必有弊: 第二大型站点肯定不是一个数据库.这点Hibernate是非常麻烦的,用Jdbc或Myba

构建高并发高可用的电商平台架构实践(上)

构建高并发高可用的电商平台架构实践(上) 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer.cache机制(数据库,中间件等) 2)      索引 哈希.B树.倒排.bitmap 哈希索

加速与缓存技术之Varnish

Varnish Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来. 挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 Varn

企业级电商项目P2P金融项目实战,企业架构师培训视频课程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.