Varnish 5.2中的更改

Varnish5.2主要是在引擎盖下的变化,因此大多数Varnish安装将能够升级,而不需要修改。

标准分发中的新VMOD

我们在Varnish项目中增加了三个新的VMOD。

VMOD BLOB

我们已经添加了变量 req.hashbereq.hash 设置为VCL,它包含由Varnish为当前请求计算的哈希值,用于缓存查找。它们的数据类型是BLOB,它表示任意长度的不透明数据--新变量包含原始的二进制散列。

这是标准VCL的元素第一次具有BLOB类型(到目前为止,BLOB只在第三方VMOD中使用)。因此,我们添加了VMOD BLOB以方便它们的使用。特别是,VMOD实现了二进制到文本的编码,例如,这样您就可以将散列作为Base64或十六进制字符串分配给报头。它还提供了一些其他实用程序,例如获取Blob的长度或测试Blob的等价性。

看见 VMOD BLOB-用于VCL BLOB类型、编码和解码的实用程序

VMOD清除

在引入之前 vcl 4.0 过去有一个 purge 函数而不是 return(purge) 过渡。此模块的工作方式类似于旧式VCL清除(应该在两种情况下都使用 vcl_hitvcl_miss ),并提供比常规清除更多的功能,并让您知道有多少对象受到影响。

看见 VMOD清洗-Varnish清洗模块

VMOD VTC

只要我们有Vmod,我们就有一个内部vmod,名为 vmod_debug 它曾与 varnishtest 练习与VMOD相关的部分 varnishd 。随着时间的推移,这个vmod增加了其他用于编写测试用例的有用函数。

我们只分发 vmod_debug 在源代码版本中,因为它有一些非常邪恶的功能,例如 debug.panic()

我们已经把不会自杀的测试写的好东西从 vmod_debug 并将它们放入一个新的 vmod_vtc ,以便使用它们的人可以使用它们 varnishtest 测试本地配置、VMOD等。

世界上最火的把戏 vmod_vtc 是可以从VCL代码访问VTC障碍,但还有其他便利,如工作空间操作等。

看见 VMOD VTC-用于varnishtest的实用程序模块

VMOD和Varnish API客户端应用程序作者的新闻

$ABI [strict|vrt]

VMOD作者可以选择仅与提供的受祝福的界面集成 varnishd 或者在堆栈中走得更远。根据一般经验,如果您的VMOD使用的不只是VRT(Varnish运行时),并且它应该是为准确的Varnish版本构建的,那么您就被认为是“自己的”。

Varnish已经能够检查构建VMOD时所依据的主要/次要VRT版本,或者需要确切的版本,但选择哪一个取决于Varnish是如何构建的。

VMOD作者现在可以指定模块是否符合VRT,并且只有在通过添加 $ABI vrt 添加到它们的VCC描述符。缺省值为 $ABI strict 当被省略时。

VSM/VSC API更改

通过共享内存输出统计计数器的做法已经彻底改变,摆脱了11年前有意义的限制,但现在就不那么有意义了。

一组统计信息计数器现在已在 .vsc 对象处理的文件 vsctool.py 脚本转换为.c和.h文件,该文件被编译为相关的代码体。

这意味着统计信息计数器现在在共享内存中是自描述的,并且 varnishstat 或其他使用程序的VSC-API不再具有存在哪些计数器或如何处理它们的编译列表。

这为VMOD甚至VCL定义自定义计数器铺平了道路,并使它们像其他计数器一样显示在varnishstat和其他基于VSC-API的程序中。

VSM/VSC代码的重写简化了这两个API,使它们更加健壮,但调用这些API的代码必须更新以匹配。

必要的更改主要集中在检测varnishd管理/工作进程是否已重新启动。

在新的VSM-API中,设置完成后,VSM_ATTACH()锁定正在运行的varnishd主进程并保持不变。

Vsm_status()更新内存中的VSM段列表,并返回有关主进程和辅助进程的状态信息:它们是否正在运行?它们重新启动了吗?是否已添加/删除VSM数据段?

现在,每个VSM段都是一块单独的共享内存,段的名称可以更长。

在可以访问实际共享内存之前,应用程序必须调用VSM_Map(),当VSM_StillValid()指示该段不再有效时,应调用VSM_Unmap()以再次释放该段。

总而言之,这应该更简单、更稳健。

VRT API更改

VRT_purge 在外部使用时,现在会使事务失败,而不是死机 vcl_hitvcl_miss 。它还返回被清除的对象的数量。

添加了VUT API

扩展Varnish的一种方法是编写VSM客户端,这些程序通常通过 libvarnishapi 或者C语言以外的其他语言的社区绑定,Varnish已经附带了VUT(Varnish实用程序),它们要么像这样处理Varnish共享日志(VSL) varnishlogvarnishncsa 或者Varnish共享计数器(VSC),如 varnishstat

这些程序的大多数设置都是相似的,因此它们共享一个API,该API现在可以在Varnish源代码树之外使用。VUT API已被清理,删除了对我们的实用程序的假设。它隐藏了设置日志处理器的大部分复杂性和冗余性,并帮助您专注于功能。如果使用AutoTools进行生成,则会在 varnish.m4 删除一些样板文件以生成部分文档。

我们希望我们能看到新的工具利用这个API以新的方式扩展Varnish,就像VMOD使向VCL添加新功能变得容易一样。

eof