kubernetes - Elixir - 将分布式 Cachex 与 Kubernetes 一起使用。如何设置 :nodes 配置
问题描述
所以我想使用 Cachex 在集群中共享临时数据。Cachex:nodes
在配置文件中获取一个列表。这在测试中效果很好,因为我可以硬编码[:"a@My-Laptop", :"b@My-Laptop"]
并且它有效,但是对于 Kubernetes,名称是动态的。我将如何设置这些?
解决方案
不久前,我在日常工作中查看了这个,而 Cachex 没有动态节点成员资格的解决方案。它希望您将所有节点名称都预定义和静态。您可以在 Kubernetes 中使用有状态集执行此操作,但如果您想让缓存分布在所有节点上,您将放弃所有未来自动缩放的可能性。
一个更好的解决方案 IMO 是Nebulex。Nebulex 不关心管理与您的节点或其成员的连接。它只关心保持缓存分布在[Node.self() | Node.list()]
(集群中的所有节点)。这一切都在 PG2 上运行,这是一个分布式 pubsub 实现。它能够在节点加入或离开时传输数据,并将其分片,以便您在节点之间拥有重复数据。它甚至允许您匹配节点名称以存储缓存数据。
为了以动态方式管理节点之间的连接,有一个名为libcluster的库,它实际上内置了 Kubernetes 支持。Libcluster 将使用 Kubernetes DNS,或者您可以创建一个无头服务,为所有 elixir pod 的 IP 地址提供服务. Libcluster 将在轮询间隔内 ping 该服务并尝试加入 erlang 集群。
当您都设置好后,libcluster 将管理您的节点在集群中,而 Nebulex 将管理您的数据在所有节点之间保持同步。这很酷,我们还没有遇到任何问题。
我不会在这里写任何源代码,因为所有这些东西的文档都写得很好。如果您有任何问题,请告诉我。
推荐阅读
- python - 如何在输入按键之前将通过键盘输入的文本打印到 python 的 input() 方法?
- python - 用列表中的值替换数据框中的 Na
- gstreamer - gstreamer rtpdepay 错误“不支持非 TIME 格式的段”
- javascript - JS时刻解析日期格式
- python - 将逗号分隔的字符串转换为 Pandas 数据框
- java - springboot中如何映射实体类对象?
- java - 背景颜色不改变JFrame
- android - 当 UIManager 未正确初始化时,无法将 rootView 附加到 ReactInstance
- javascript - 动作必须是普通对象。相反,实际类型是:“未定义”。React-Redux
- django - 愿望清单项目在 Django 中正确显示