gpt4 book ai didi

docker - Infinispan 复制缓存的多个客户端可以共享同一个持久文件存储吗?

转载 作者:行者123 更新时间:2023-12-02 18:28:29 28 4
gpt4 key购买 nike

交叉张贴在 https://developer.jboss.org/thread/279735

假设我们有多个 docker 容器(每个都有 java webapps,所以本质上是多个 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)都是唯一的,但在部署之前不会为人所知,因此使用“路径”的值静态填充 infinispan_server.xml 文件并不容易。

谢谢,

_Prateek

最佳答案

复制模式的重点不就是每个节点都有自己独立的数据副本吗?我不完全理解您要实现的目标。

关于你问题的最后一点:

If its not advised to share the same file-store .dat file, then what is the best practice to have a GUID in the filepath for each container's path in the .xml file. Each docker container's hostname (which is containerId) is unique, but it won't be known before its deployed, so it won't be easy to populate the infinispan_server.xml file with the value for "path" statically.

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com