Cross发布在https://developer.jboss.org/thread/279735
假设我们有多个docker容器(每个容器都有java webapps,本质上是多个JVM),每个容器都使用相同的复制Infinispan缓存:
在任何一种情况下,所有缓存成员/客户端都有一个文件存储,它们在启动时从它们预加载(示例用于服务器模式,类似于嵌入模式的xml):
通过docker compose,每个容器的文件存储区内的路径(比如说/var/tmp/server/OUR_CACHE.dat)被绑定挂载到docker主机上的同一个文件中。
<paths>
<path name="cachestore.root" path="/var/tmp"/>
</paths>
...
<local-cache name="OUR_CACHE">
<expiration lifespan="-1"/>
<locking isolation="SERIALIZABLE" acquire-timeout="30000" concurrency-level="1000" striping="false"/>
<file-store relative-to="cachestore.root" path="server" max-entries="-1" purge="false" passivation="false" preload="true" fetch-state="true"/>
<memory>
<binary size="100000000" eviction="MEMORY"/>
</memory>
</local-cache>
我的问题是 - 是否设计了持久性机制,以便多个复制的缓存客户端可以读/写同一个文件存储而没有任何错误?
我的理解是,在复制模式下,键值最终将在所有节点的内存中保持一致。但我的目标是确保使用相同文件存储进行持久性和预加载的多个客户端容器不会对此复制产生负面影响。
如果不建议共享相同的文件存储.dat文件,那么在文件路径中为.xml文件中的每个容器的路径设置GUID的最佳做法是什么。每个docker容器的主机名(即containerId)都是唯一的,但在部署之前不会知道,因此使用静态的“path”值填充infinispan_server.xml文件并不容易。
谢谢,
Pratika
复制模式的重点不在于每个节点都有自己独立的数据副本吗?我不完全明白你想要实现的目标。
至于你问题的最后一点:
如果不建议共享相同的文件存储.dat文件,那么在文件路径中为.xml文件中的每个容器的路径设置GUID的最佳做法是什么。每个docker容器的主机名(即containerId)都是唯一的,但在部署之前不会知道,因此使用静态的“path”值填充infinispan_server.xml文件并不容易。
你可以在config xml中放置一个占位符(例如:${myprop}
)并在启动时指定它(例如:-Dmyprop=hostname01
)吗?