首页 > 解决方案 > Elixir - 将分布式 Cachex 与 Kubernetes 一起使用。如何设置 :nodes 配置

问题描述

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

标签: kuberneteselixir

解决方案


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

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

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

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

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


推荐阅读