分布式像素缓存
分布式像素缓存是单一主机上传统像素缓存的扩展。分布式像素缓存可以跨越多台服务器,因此能够在大小和事务容量上扩展,以支持非常大的图像或大型图像序列。在一台或多台主机上启动像素缓存服务器。当你读取或操作图像而本地像素缓存资源耗尽时,ImageMagick 会联系这些远程像素服务器中的一个或多个来存储或检索像素。
对于真正大的图像或大型图像序列,或者当你的主机资源有限时,你可以利用一台或多台远程主机上的分布式像素缓存。要开始使用,首先在 policy.xml 安全策略配置文件中设置你的共享密钥:
<policy domain="cache" name="shared-secret" value="_passphrase_ " stealth="true"/>
这里我们创建一个分布式像素缓存服务并从桌面使用它:
magick -distribute-cache 6668 & # start on localhost
magick -limit memory 1GiB -limit map 2GiB -limit disk 4GiB \
-define registry:cache:hosts=localhost:6668 \
myhugeimage.jpg -sharpen 5x2 myhugeimage.png
这里我们创建两个分布式像素缓存并从桌面使用它们:
magick -distribute-cache 6668 & # start on 192.168.100.50
magick -distribute-cache 6668 & # start on 192.168.100.51
magick -limit memory 1GiB -limit map 2GiB -limit disk 4GiB \
-define registry:cache:hosts=192.168.100.50:6668,192.168.100.51:6668 \
myhugeimage.jpg -sharpen 5x2 myhugeimage.png
对于大型图像序列,服务器以轮询(round-robin)方式被联系,从而将负载分散到多个分布式像素缓存上(前提是你有一个主机列表而不是单一主机)。在我们的示例中,桌面上有一些适度的资源,由 -limit 选项定义。对于较小的图像,它们会在指定的上限内分配到桌面上。
当使用分布式像素缓存时,由于像素需要在客户端与服务器之间通过网络往返传输,你的图像处理任务很可能会变慢。访问虚拟像素的算法(例如 -sharpen)由于网络流量增加,会明显比仅访问真实像素的算法(例如 -negate)慢,最多可慢 3 倍。
客户端只能联系兼容的分布式像素缓存服务器。兼容性要求相同的 ImageMagick 库接口、量子深度(quantum depth)、HDRI 状态、操作系统字长、字节序(endianness)和密钥短语(passphrase)。分布式像素缓存会检查这些属性,如果不满足这些要求则抛出异常。