存储后端

介绍

Varnish有可插拔的存储后端。它可以将数据存储在不同的后端,这些后端可以具有不同的性能特征。默认配置是使用大小有限的Malloc后端。对于严重的Varnish部署,您可能需要调整存储设置。

默认设置

语法:默认 [,size]

默认存储后端是umem的别名(如果可用),否则是Malloc的别名。

马洛克

语法:Malloc [,size]

Malloc是一个基于内存的后端。每个对象都将从内存中分配。如果您的系统内存不足,将使用内存交换。

请注意,大小限制仅限制实际存储,用于各种内部结构的每个对象大约1K的内存也包括在实际存储中。

SIZE参数指定最大内存量 varnishd 将分配给。除非后跟以下后缀之一,否则假定大小以字节为单位:

K,k大小以千比字节表示。

M,m大小以兆字节表示。

G,g大小以吉比字节表示。

T,t大小以字节为单位。

默认大小为无限制。

Malloc的性能受内存速度的限制,因此速度非常快。如果数据集大于可用内存,则性能将取决于操作系统有效分页的能力。

UMEM

语法:umem [,size]

UMEM是Malloc后端的更好替代方案,其中 libumem 是可用的。所有其他配置方面都被视为等同于Malloc。

libumem 实现类似于几乎所有现代操作系统中使用的内核内存分配器的片分配器,并且被认为比经典实现更高效和可伸缩。特别是, libumem 包括在OpenSolaris派生操作系统家族中,其中jemalloc(3)并不常见。

如果 libumem 则不使用,则Varnish将仅将其用于存储分配,并将默认libc分配器保留用于所有其他Varnish内存分配目的。

如果 libumem 在Varnish初始化时已加载,则输出此消息::

notice: libumem was already found to be loaded
        and will likely be used for all allocations

表明…… libumem 不仅会被用来储存。出现这种情况的可能原因是:

  • 一些类库 varnishd 链接的对象是链接的对象 libumem (最有可能 libpcre2-8 ,请咨询 ldd )

  • LD_PRELOAD_64=/usr/lib/amd64/libumem.so.1LD_PRELOAD_32=/usr/lib/libumem.so.1LD_PRELOAD=/usr/lib/libumem.so.1 已设置

Varnish还将输出此消息以建议使用 libumem 对于所有分配:

it is recommended to set UMEM_OPTIONS=perthread_cache=0,backend=mmap
before starting varnish

应遵循此建议以实现最佳 libumem Varnish的配置。需要在启动Varnish之前设置此环境变量,因为 libumem 加载后无法重新配置。

文件

语法:文件、路径 [,size[,granularity[,advice] ]]]

文件后端将对象存储在虚拟内存中,该虚拟内存由磁盘上的未链接文件支持 mmap ,当文件的部分被访问时,依靠内核来处理分页。

这意味着足够 virtual 除了Varnish需要的任何内存之外,还需要有内存来容纳文件大小。传统上,虚拟内存限制配置为 ulimit -v ,但现代操作系统对此限制有其他抽象,如控制组(Linux)或资源控制(Solaris)。

‘Path’参数指定备份文件的路径或备份文件所在目录的路径 varnishd 将创建备份文件。

SIZE参数指定备份文件的大小。除非后跟以下后缀之一,否则假定大小以字节为单位:

K,k大小以千比字节表示。

M,m大小以兆字节表示。

G,g大小以吉比字节表示。

T,t大小以字节为单位。

如果‘Path’指向现有文件,并且未指定大小,则将使用现有文件的大小。如果‘路径’不指向现有文件,则不指定大小是错误的。

如果备份文件已经存在,它将被截断或扩展到指定的大小。

请注意,如果 varnishd 必须创建或扩展文件时,它将不会预分配添加的空间,从而导致碎片,这可能会对旋转硬盘驱动器的性能产生不利影响。使用以下工具预先创建存储文件 dd(1) 将把碎片减少到最低限度。

‘Granularity’参数指定分配的粒度。所有分配都四舍五入到这个大小。假定粒度以字节表示,除非后跟为大小描述的后缀之一。

默认粒度为VM页面大小。如果您有许多小对象,则应减小大小。

文件性能通常受限于设备的写入速度以及寻道时间,具体取决于使用情况。

通知参数告诉内核如何 varnishd 预期使用此映射区域,以便内核可以选择适当的预读和缓存技术。可能的值包括 normalrandomsequential ,分别对应于MADV_NORMAL、MADV_RANDOM和MADV_SEQUENCED MADVISE()建议参数。默认为 random

在Linux上,大型对象和旋转磁盘应该会受益于“顺序”。

deprecated_persistent

语法:Deposated_Persistent,PATH,SIZE{实验性}

Before using, read 持久的消息 !

永久存储。Varnish将对象存储在文件中,以确保 most 在计划内或计划外关闭Varnish的情况下,对象的安全。

‘Path’参数指定备份文件的路径。如果该文件不存在,Varnish将创建它。

‘Size’参数指定备份文件的大小。大小以字节表示,除非后跟以下后缀之一:

K,k大小以千比字节表示。

M,m大小以兆字节表示。

G,g大小以吉比字节表示。

T,t大小以字节为单位。

Varnish会将文件拆分成逻辑文件 silos 并以循环缓冲区的方式写入竖井。在任何给定时间点,只有一个思洛存储器将保持开放。完整的筒仓是 sealed 。当Varnish在关闭后启动时,它将丢弃任何未密封的思洛存储器的内容。

请注意,使永久思洛存储器离线并同时使用禁止可能会导致问题。这是因为当思洛存储器重新进入缓存时,在思洛存储器离线时添加的禁止不会应用于思洛存储器。从而使得先前被禁止的对象能够重新出现。

暂态存储

如果您将任何存储后端命名为“临时的”,它将用于临时(短暂的)对象。这包括返回合成对象时创建的临时对象。默认情况下,Varnish将为此使用无限制的Malloc后端。

如果TTL低于参数“Short Living”,则Varnish会将对象视为短期对象。