Elixir集群101
Elixir(以及其他BEAM语言)的主要优势之一是内置的节点聚类功能, 并实现集群间透明通信。任何分布式系统通常都会附带严肃的免责声明。 要在集群中正确同步状态非常困难,避免网络分裂时的状态损坏或网络不稳定,有效应对滚动部署和代码版本不匹配。
但这不应该让我们气馁。分布式Elixir(也称为disterl)有广泛的应用场景(以及其他很多东西, 我们真的需要一个统一的名称)。你只需要符合几个基本条件的设备:
如果有些数据丢失也没关系
如果有些数据有误也没关系
只要这些条件符合,分布式灵药和分布式系统其实并不那么可怕。因为它大多数时候都能成功,对于符合这些条件的用例来说,它通常是一个非常好、低成本且性能优良的选择。
从哪里开始
首先,你需要确保你的节点是用集群支持的配置启动的。如果你用的是Phoenix和Releases,这可能只是编辑问题env.sh.eex 以添加类似的内容
导出 RELEASE_DISTRIBUTION = 名称
export RELEASE_NODE = app @$ ( hostname - i | awk '{print $1}' )
并确保DNSCluster已配置。
或者如果你在本地尝试,可以先开几个节点
第一个终端标签
国际经济学——先说名字 @ 127.0。0.1
第二个终端标签页
IEX —— Name Second @ 127.0。0.1
它们以分布式模式启动,但仍然没有连接。我们接下来就这么做。先进入某个节点的标签页。
iex (first @ 127.0. 0.1) 1 >节点。列表
[ ]
iex (first @ 127.0. 0.1) 2 节点>。ping (:“second@127.0.0.1” )
:p ong
iex (first @ 127.0. 0.1) 3 >节点。列表
[:“second@127.0.0.1” ]
iex (first @ 127.0. 0.1) 4 >节点。自我
:“first@127.0.0.1”
我们是康奈......