例如,我有一个非常慢且过时的后端提供商,请求通常需要几十秒。我们还有一台内存适中且存储空间大的机器。理想情况下,我想使用两个都内存和存储以满足请求。
我发现:
https://info.varnish-software.com/blog/partitioning-your-varnish-cache
但这似乎意味着我必须手动在两者之间分割数据,这看起来很有挑战性?
答案1
正如 Gerard H. Pille 的评论所指出的,操作系统的页面缓存将确保热数据存储在内存中。
文件装卸
就 Varnish 而言,这意味着您可以使用file
装卸工来存储对象。
以下是如何配置它的方法:
varnishd -s file,/var/lib/varnish/storage,250G
上面的例子中我只关注了
-s
参数。实际上, 会用到很多参数varnihsd
。
结合 malloc 和 file
如果你有非常明确的迹象表明哪些内容只会存在于内存中,你可以定义多个装卸工人,如下图所示:
varnishd -s disk=file,/var/lib/varnish/storage,250G -s memory=malloc,32G
在虚拟专用网络,然后您可以执行以下操作:
sub backend_response {
if(beresp.http.Content-Type ~ "^(image|video)/") {
set beresp.storage = "file";
} else {
set beresp.storage = "memory";
}
}
文件装卸限制
码头工人file
有能力缓存大量数据。主要问题是随着时间的推移,磁盘容易出现碎片。
我们已经看到file
基于的设置在加班时表现非常糟糕,主要是由于碎片化。
另一个缺点是操作系统的页面缓存需要猜测哪些内容应该适合内存。
最后,虽然磁盘是持久的,但file
装卸工不是:只要你重新启动漆缓存的内容已消失。
海量存储引擎
在Varnish 软件,我们开发了海量存储引擎,这是一种先进的码头工人解决file
已存在的问题。
看https://docs.varnish-software.com/varnish-cache-plus/features/mse/了解更多信息。
免责声明:
mse
是一家专有的装卸公司,属于清漆企业。它需要商业许可证,但有官方机器映像AWS,Azure&地理信息中心您可以按小时付费,而无需预先购买许可证密钥。
微分方程可配置性更强,设计时考虑到了反碎片化。内存缓存不依赖于操作系统的页面缓存,性能优于malloc
Varnish 中的标准实现。
持久层可以根据您的需要进行定制,基于多个存储位置。还有一个模块允许您从 VCL 中选择特定的存储设备(请参阅https://docs.varnish-software.com/varnish-cache-plus/vmods/mse/)。
最后,内存调节器该功能会根据 Varnish 其他部分的内存需求自动调整内存大小。请参阅https://docs.varnish-software.com/varnish-cache-plus/features/mse/memory_governor/