Squid Web Cache Wiki

Squid Web Cache 文档

🔗 特性:COSS(循环对象存储系统)

🔗 COSS 是什么?

COSS 是一个由 Eric Stern 最初设计的循环对象存储系统。COSS 使用单个文件,并且每个条带(stripe)的大小固定,在文件中的位置也固定。条带大小是编译时选项。

当对象被写入 COSS 条带时,它们的位置会被预留,并将数据复制到条带的内存副本中。因此,在将对象存储到 COSS 文件系统中之前,必须知道对象的大小。(这就是为什么在 coss cache_dir 中有 max-size 的要求。)

当一个条带被填满时,该条带将被写入磁盘,并创建一个新的内存条带。

🔗 性能更好吗?

是的。在撰写本文时,COSS 是 squid 中性能最好的 cache_dir。由于 COSS cache_dir 只能存储小型缓存对象,因此需要将其与其他类型的 cache_dir(aufs, diskd 或 ufs)结合使用,以允许缓存大型对象。由于 COSS 更有效地处理小型对象,非 COSS cache_dir 的性能也会提高,因为它们需要处理的对象数量更少,但个头更大。

🔗 如何使用?

您需要运行 Squid 版本 2.6 或更高版本才能运行稳定的 COSS 版本。

要配置 Squid 使用 COSS,请使用 `--enable-storeio` 选项(以及 `--enable-coss-aio-ops` 以启用异步 I/O)。

% ./configure --enable-storeio=coss,ufs

🔗 如果我使用 COSS,是否必须清除当前缓存?

是的。COSS 使用单个文件或直接分区访问来存储对象。要准备一个文件或磁盘用于 COSS,您需要运行以下命令:

dd if=/dev/zero bs=1048576 count=<size> of=<outfile>

其中

🔗 COSS 需要哪些选项?

COSS 分区的最小配置如下:

cache_dir coss <file> <size> max-size=<max-size>
cache_swap_log /var/spool/squid/%s

其中

如果使用常规文件名作为 <file>,请使用 `cache_swap_log` 选项指定一个目录,Squid 将在该目录中为所有没有自己目录的 cache_dir 存储 `swap.state` 文件(见下文)。

如果使用目录名作为 <file>,Squid 将在该目录中创建 COSS 存储,使用“stripe”作为文件名,并将 `swap.state` 文件放在同一目录中。在这种情况下,Squid 将忽略上面讨论的 `cache_swap_state` 选项。为 COSS 存储指定目录有助于将 COSS cache_dir 的 I/O 和故障隔离到单个磁盘。

🔗 COSS 还有其他配置选项吗?

COSS 分区有许多不同的配置选项可用。这些选项包括:

block-size=<n>

这将限制 COSS cache_dir 的最大大小(大小计算为磁盘空间 + 任何 `membufs` 的大小),如下所示:

`block-size` 的默认值为 512 字节。

overwrite-percent=<n>

这将允许在 COSS cache_dir 的增长大小、LRU 算法的准确性以及使用的磁盘 I/O 带宽量之间进行权衡。`<n>` 的值必须在 0 到 100 之间。

如果设置为 0,COSS cache_dir 将始终将任何缓存命中复制到当前条带。这会减少缓存中存储的唯一数据量,增加使用的磁盘带宽,但 LRU 算法会完美工作。

如果设置为 100,COSS cache_dir 将永远不会将任何缓存命中复制到当前条带。这意味着所有对象都只存储一次,减少了使用的总磁盘带宽,但实际上使磁盘成为 FIFO(即流行对象仅在 COSS 循环回原始条带的持续时间内保留在 cache_dir 中)。

`overwrite-percent` 的默认值 50 在两个极端之间取得了良好的平衡。

max-stripe-waste=<n>

此选项设置 COSS cache_dir 在将条带写入磁盘时可能浪费的最大空间量。每次写入 COSS 条带时,它最多会浪费 `max-size` 值的空间。如果 `max-size` 设置为较大的值(例如,当 COSS 条带为 1MB 时 `max-size` 为 512K,则条带中最多 50% 的空间可以写入磁盘而没有数据),这会成为一个问题。`max-stripe-waste` 通过动态减小 `max-size` 值来解决此问题,以确保每次条带写入只浪费 `<n>` 字节的空间。

`max-stripe-waste` 选项默认未设置。

membufs=<n>

此选项确定 COSS 用于将缓存命中发送给客户端的条带的最大数量。它旨在限制给定 COSS cache_dir 可能导致 squid 使用的内存量。一旦 squid 用尽 `membufs`,它就会开始将所有对象移动到当前磁盘条带,从而有效地忽略 `overwrite-percent` 设置。

`membufs` 的默认值为 10。

maxfullbufs=<n>

此选项设置将要被释放但已满的条带的最大数量,这些条带将被此 cache_dir 保存在内存中。同样,这是为了限制给定 COSS cache_dir 可能增长使用的内存量。

每个 cache_dir 将最后 2 个 `maxfullbufs` 保留用于缓存命中(即,只有在 squid 用尽 `membufs` 时才会使用它们)。这是为了在存储新对象的代价下实现更高的命中率。

默认情况下,`maxfullbufs` 选项不设置限制(即,我们总是可以接受新对象)。

🔗 存储索引重建

当前的(Squid 2.6)COSS 实现需要扫描整个数据文件来重建对象索引,这会在每次 squid 重新配置或轮换日志文件时发生。这意味着在执行这些活动时会出现 CPU 负载高峰。

🔗 示例

cache_dir coss /var/spool/squid/coss 100 block-size=512 max-size=131072

类别:功能

导航:站点搜索站点页面类别🔼 向上