锁紧机构

作者

托马斯堡

联系

t在terriscope.fr的端口

mapcache有时需要对给定资源的独占访问,并提供一些机制以确保在该资源上不能有多个mapcache实例操作。这种情况可能发生在:

  • 向源WMS服务器发送给定metatile的请求。只有一个mapcache实例应发送该请求;处理来自同一metatile的tile的其他mapcache实例应等待该请求完成,而不是再次发送相同的确切请求(以避免重载WMS服务器)。

  • 在TIFF缓存中写入磁贴。TIFF库不处理并发写入,因此MapCache必须确保只有一个实例正在访问给定的TIFF文件进行写入。

储物柜配置有:

<locker type="...">
  <timeout>60</timeout>
  <retry>0.1</retry>
  ...
</locker>

当一个mapcache实例由于已经被另一个实例获取而无法获取锁时,它将:

  • 每隔`<retry>`秒检查一次,查看另一个实例是否释放了锁。

  • 考虑在`<timeout>`秒后,另一个实例失败,并在获取锁之前将其删除。

磁盘锁

这个锁定机制将文件放在文件系统的某个地方。为了同步多个mapcache实例,文件系统可以是网络共享。

<locker type="disk">
  <directory>/path/to/lockdir</directory>
</locker>

配置的目录应该可以被mapcache实例读/写访问。

内存缓存锁

这个锁定机制使用第三方memcache实例来跟踪锁。

<locker type="memcache">
   <server>
     <host>localhost</host>
     <port>11211</port>
   </server>
   <server>
     <host>memcache-host</host>
     <port>11212</port>
   </server>
</locker>

后退锁

如果第一个锁失败,这个“meta”锁将返回到第二个配置的锁(通常在memcache实例关闭时与memcache实例一起使用)。

<locker type="fallback"
  <locker type="memcache">
     <server>
       <host>localhost</host>
       <port>11211</port>
     </server>
     <server>
       <host>memcache-host</host>
       <port>11212</port>
     </server>
  </locker>
  <locker type="disk">
    <directory>/path/to/lockdir</directory>
  </locker>
</locker>