Varnish 5.2中的更改
Varnish5.2主要是在引擎盖下的变化,因此大多数Varnish安装将能够升级,而不需要修改。
标准分发中的新VMOD
我们在Varnish项目中增加了三个新的VMOD。
VMOD BLOB
我们已经添加了变量 req.hash
和 bereq.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_hit
和 vcl_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_hit
或 vcl_miss
。它还返回被清除的对象的数量。
添加了VUT API
扩展Varnish的一种方法是编写VSM客户端,这些程序通常通过 libvarnishapi
或者C语言以外的其他语言的社区绑定,Varnish已经附带了VUT(Varnish实用程序),它们要么像这样处理Varnish共享日志(VSL) varnishlog
或 varnishncsa
或者Varnish共享计数器(VSC),如 varnishstat
。
这些程序的大多数设置都是相似的,因此它们共享一个API,该API现在可以在Varnish源代码树之外使用。VUT API已被清理,删除了对我们的实用程序的假设。它隐藏了设置日志处理器的大部分复杂性和冗余性,并帮助您专注于功能。如果使用AutoTools进行生成,则会在 varnish.m4
删除一些样板文件以生成部分文档。
我们希望我们能看到新的工具利用这个API以新的方式扩展Varnish,就像VMOD使向VCL添加新功能变得容易一样。
eof