持久的消息¶
这条消息是关于Spersistent的,以及为什么你不应该使用它,即使它仍然存在于Varnish4.x中。从Varnish 6开始,只有在编译时显式启用它时才会出现。
TL;DR:¶
在狭隘和定义不明确的情况下,-persistent工作得很好,但通常情况下,运行它会带来更多麻烦,而我们目前没有解决这一问题的开发资源。
如果你认为你有这些情况,你需要
打电话
configure
使用--with-persistent-storage
编译前使用存储引擎名称
deprecated_persistent
,请使用a::-sdeprecated_persistent,<options>
启动Varnish时的参数
才能使用它。
说来话长¶
当我们为Varnish添加-Spersistent时,它是为了回应一群真正想要它的特定客户,并由他们赞助。
持久化存储模块与非持久化模块是完全不同的VAX,因为它带来了所有丑陋的一致性问题。
让我给你举个例子。
设想一个由一些使用禁止的Varnish服务器组成的集群。
如果没有持久存储,如果它们中的一个关闭并重新启动,所有旧的缓存对象都会消失,根据定义,所有被禁止的对象也会消失。
使用永久存储,我们不仅必须存储仍然有效的禁令和缓存的对象,并痛苦地保持两者的同步,因此禁令将与对象一起恢复,我们还必须担心在停机期间丢失禁令,因为这些可能会禁止我们将在启动时恢复的对象。
惊喜:直接进入数据库/文件系统一致性领域。
但我们知道这一点,我想我有一个很好的策略来处理这件事。
在某种意义上,我做到了。
与数据库和文件系统相比,Varnish有一个优势,即我们实际上可以释放对象,而不会造成灾难。如果我们不这样做会更好,但我们可以简单地丢弃看起来不一致的东西,这样我们就会安全。
我们的策略是创建一个“日志结构文件系统”,这是一个曾经很有前途的概念,但很快就被证明很难很好地实现。
有趣的是,今天SSD中的ARM芯片很可能实现了LFS以实现损耗均衡,但功能集大大减少:所有的“文件”都是一个扇区长的,文件名是整数,并且没有子目录或重命名操作。另一方面,还有关于闪存阵列状态的额外簿记。
LFS由两个主要部分组成:读和写的位,这是非常微不足道的,以及提供可用空间的位,而不是。
起初我们甚至没有做第二部分,因为在Varnish对象到期,如果他们这样做足够快,空间将神奇地变得可用。这对我们的初始用户来说已经足够好了,他们只是偶尔使用禁令,所以这也很酷。
换句话说,经典的20%的努力,80%的收益。
不幸的是,我们找不到时间和金钱来完成另外80%的努力,这将带来最后20%的好处,因此,Spersistent最终陷入了困境。
今天,我们决定正式弃用-persistent,并开始警告人们不要使用它,但我们现在将它留在源代码中,以便保持持久存储所需的接口正常工作,希望我们以后可以再次使用它们。
因此,如果您真的想使用永久存储,并且您知道自己在做什么,则可以使用:
-s不推荐使用_Persistent
我已经警告过你了。
保尔-亨宁,2014-05-26