Elixir - 在 Kubernetes 中使用分布式 Cachex。如何设置 :nodes 配置

Pet*_*r R 1 elixir kubernetes

所以我想使用Cachex来跨集群共享临时数据。Cachex:nodes在配置文件中获取一个列表。这在测试中效果很好,因为我可以硬编码[:"a@My-Laptop", :"b@My-Laptop"]并且它有效,但是对于 Kubernetes,名称是动态的。我将如何设置这些?

Mik*_*lan 5

不久前,我在日常工作中查看了这个,而 Cachex 没有动态节点成员资格的解决方案。它希望您拥有所有预定义和静态的节点名称。您可以使用有状态集在 Kubernetes 中执行此操作,但是如果您希望将缓存分布在所有节点上,您将放弃所有未来自动缩放的可能性。

IMO 更好的解决方案是Nebulex。Nebulex 不关心管理与您的节点或其成员资格的连接。它只关心保持分布在[Node.self() | Node.list()](集群中的所有节点)的缓存。这一切都在 PG2 上运行,PG2 是一个分布式发布订阅实现。它能够在节点加入或离开时传输数据并将其分片,以便您在节点之间拥有重复的数据。它甚至允许您匹配节点名称以存储缓存数据。

为了以动态方式管理节点之间的相互连接,有一个名为libcluster的库,它实际上内置了 Kubernetes 支持。 Libcluster 将使用 Kubernetes DNS,或者您可以创建一个无头服务,该服务将为您的所有 elixir pod 的 IP 地址提供服务. Libcluster 将在一个轮询间隔上 ping 这个服务并尝试加入 erlang 集群。

两者都设置好后,libcluster 将管理将您的节点保持在集群中,而 Nebulex 将管理使您的数据在所有节点之间保持同步。它非常酷,我们还没有遇到任何问题。

我不打算在这里写任何来源,因为所有这些东西的文档都写得很好。如果您有任何问题,请告诉我。