十字张贴在https://developer.jboss.org/thread/279735

假设我们有多个Docker容器(每个容器都有Java Web应用程序,因此本质上是多个JVM),每个容器都在以下位置使用相同的复制Infinispan缓存:

  • 使用jgroups进行发现的嵌入式模式
  • 使用Docker Hub作为Infinispan服务器的服务器模式,客户端通过hotrod连接。

  • 无论哪种情况,所有缓存成员/客户端都有一个文件存储,它们在启动时从中预加载(样本用于服务器模式,类似于嵌入式模式的xml):

    通过docker compose,每个容器的文件存储(例如/var/tmp/server/OUR_CACHE.dat)中的路径绑定(bind)安装到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文件并不容易。

    谢谢,

    _Prateek

    最佳答案

    复制模式的意义不是每个节点都有自己的独立数据副本吗?我不完全了解您要达到的目标。

    到问题的最后一点:



    您能否在配置xml中放置一个占位符(例如:${myprop})并在启动时指定它(例如:-Dmyprop=hostname01)?

    关于docker - Infinispan复制的缓存的多个客户端可以共享同一持久文件存储吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55177605/

    10-12 22:54
    查看更多