Varnish 6.2中的更改

有关将当前Varnish部署更新到新版本的信息,请参见 升级到Varnish 6.2

有关Varnish更改的更详细的技术说明,以及指向已修复的问题和已合并的拉入请求的链接,请参阅 change log

华而不实

缓存查找经历了许多优化,其中包括减少了锁争用,并缩短和简化了查找代码的关键部分。我们预计这将提高性能和可伸缩性。

我们已经为线程池添加了一个“看门狗”,如果将任务调度到工作线程上出现死锁,它将使工作进程死机,导致它重新启动。在死机之前的时间长度由 thread_pool_watchdog 参数。如果发生这种情况,可能意味着线程池太小,您应该考虑增加参数 thread_pool_minthread_pool_max 和/或 thread_pools

参数

的默认值为 thread_pool_stack 在64位平台上从48k增加到56k,在32位平台上增加到52k。

最近,我们偶尔会收到堆栈溢出的报告,这显然与不受Varnish项目控制的外部库(如glibc)的更改有关。这也可能与某些平台上的堆栈溢出问题有关,当最近版本的 jemalloc ,推荐用于Varnish的内存分配器,已与 pcre 启用JIT编译。编译器强化标志还可能增加堆栈使用,并且在某些系统上,可以默认启用这种堆栈保护器标志。随着新的编译器版本增加了新的缓解措施,堆栈消耗也可能在这方面增加。

测试表明,在以前可能导致堆栈溢出的情况下,Varnish在许多平台上以新的默认堆栈大小稳定运行--例如,ESI包含的默认限制高达 max_esi_depth ,相对较深的VCL子例程调用深度,以及最近的jemalloc和pcre-jit。

不同的站点对堆栈大小有不同的要求。例如,如果您的站点使用高深度的ESI包含,则您可能已经在使用增加的值 thread_pool_stack 。如果您没有这样的要求,并且您想要减少内存占用,您可以考虑降低 thread_pool_stack ,但请确保测试结果。

一些长期不推荐使用的参数现在已停用。看见 运行时参数 在……里面 升级到Varnish 6.2

增列 thread_pool_watchdog ,请参见上文。

这个 调试 参数现在有一个标志 vcl_keep 。打开该标志时,从VCL源代码生成的C源代码和共享对象库将保留在Varnish工作目录中(请参见关于 varnishtest (见下文)。

对于32位平台,我们增加了默认设置 workspace_backend 从16K到20K可以容纳更大的响应头,这已经变得很常见。

Varnish的其他变化

VCL语法版本现在显示为紧急消息,VCL 4.1的版本为41,VCL 4.0的版本为40。

对VCL的更改

VCL变量

增列 req.is_hitmissreq.is_hitpass ,见 VCL

VCL的其他更改

有关Unix域套接字可访问性的运行时限制已放宽,请参阅 VCL 在……里面 升级到Varnish 6.2

return(miss) 从… vcl_hit{} 对于常见的情况,它从来没有像预期的那样工作(它实际上变成了一个通行证),所以我们现在删除它并更改 builtin.vcl 。看见 VCL

VMODs

中的类型转换函数 VMOD标准-Varnish标准模块 已经重新制作,使它们更灵活、更易于使用。这个 std. x2y 转换函数现在已弃用。看见 VMOD标准中的类型转换函数

该功能 后端查找(字符串) 已添加到 VMOD导向器-Varnish导向器模块 ,仅供在 vcl_initvcl_fini

Varnishlog(1)、varnishncsa(1)和vsl(7)

捆绑日志读取器的性能,包括 varnishlogvarnishncsa (以及使用Varnish实用程序内部VUT接口的任何工具)已得到改进。只要已知有更多内容可用,它们就会继续批量读取日志内容,而不是频繁地(和不必要地)停下来检查共享内存映射的状态。

varnishlogvarnishncsa 现在有了 -R 用于速率限制的命令行选项,用于限制每单位时间读取的日志事务数。这可以降低日志读取在高负载情况下落后并因溢出错误而失败的可能性。看见 Varnishlog瓦尼西克萨 了解更多细节。

计时信息现在统一报告在日志中,精度为微秒级。这会影响标记 ExpKillExpRearm (以前是纳秒精度)。

Varnishadm(1)和Varnish-cli(7)

的输出格式。 vcl.listbackend.list 命令已更改,请参见 列出后端列出VCLS 在……里面 升级到Varnish 6.2 ,以及 Varnish-CLI 了解更多细节。

JSON输出

JSON响应,使用 -j 选项,现在可以使用以下命令(请参见 Varnish-CLI ):

  • status -j

  • vcl.list -j

  • param.show -j

  • ban.list -j

  • storage.list -j

  • panic.show -j

这个 -j 选项已可用于 backend.listpinghelp 在以前的版本中。

用于自动解析CLI响应 (瓦尼沙德姆 输出),我们建议使用JSON格式。

param.reset <param>

添加了命令 param.reset 要将参数的值重置为其默认值,请参见 Varnish-CLI

按过期参数禁用

现在可以针对以下方面定义禁令 obj.ttlobj.ageobj.graceobj.keep ,引用缓存对象的过期和老化属性。BAN表达式也可以用一个比较运算符来定义 <<=>>= ;这些只能与禁令的一个新持续时间变量一起使用。持续时间常量(例如 5m 五分钟的时间 3h 三个小时)可以在 <arg> 在BAN表达式中与这些对象进行比较的位置。

obj.ttlobj.age 根据定义禁令的时间进行评估,而 obj.graceobj.keep 被计算为分配给对象的宽限时间或保持时间。因此,要对从现在起TTL过期超过5小时且Keep参数超过3小时的对象发布禁令,请使用以下表达式:

obj.ttl > 5h && obj.keep > 3h

看见 VCL肃清取缔 了解更多细节。

Varnish统计(1)和Varnish计数器(7)

添加了 ws_*_overflowclient_resp_500 计数器以更好地诊断工作区溢出问题,请参见 Varnish计数器

在诅咒模式下, Varnish状态 现在允许使用 +- 用于增加或降低Curses窗口刷新率的键。

Varnish测试

什么时候 Varnish测试 使用以下任一 -L-l 用于在测试后保留临时目录的选项, vcl_keep 的旗帜 调试 参数处于打开状态(请参见 Parameters (见上文)。这意味着从VCL生成的C源代码和共享对象也可以在测试后进行检查。默认情况下,临时目录在每次测试后被删除。

从上一次发布的时候起,我们就开始了这个项目 VTest ,改编自 Varnish测试 ,但作为独立程序提供,可用于测试各种HTTP客户端、服务器和代理(不仅仅是Varnish)。但目前我们仍在使用 Varnish测试 用于我们自己的测试。

针对开发人员和VMOD作者的更改

生成代码的Python工具现在需要使用Python3。

董事

Director API稍有更改:最相关的设计更改是 healthy 回调现在是动态确定控制器的健康状态的唯一方法, sick 成员: struct director 已被移除。因此, VRT_SetHealth() 已被移除,并且 VRT_SetChanged() 添加以更新上次运行状况更改时间。

在场的人 healthy 回调现在还表示导演是否被视为具有 probe 关于CLI。

签名者 list 回调已更改,以反映未记录的 backend.list -v 参数,并添加一个 VRT_CTX

eof