gpt4 book ai didi

erlang - 分布式erlang的安全性如何?

转载 作者:行者123 更新时间:2023-12-04 14:42:45 26 4
gpt4 key购买 nike

我希望有 2 个可以相互通信的独立 erlang 节点:

所以节点 a@myhost 将能够向 发送消息b@myhost .

有没有办法限制节点 a@myhost ,所以只有 中的一个函数安全模块 可以调用 b@myhost ?

它应该是这样的:

a@myhost> rpc:call(b@myhost,secure_module,do,[A,B,C]) returns  {ok,Result}

和所有其他电话
a@myhost> rpc:call(b@myhost,Modue,Func,Args)  return {error, Reason}

一种选择是使用 ZeroMQ库来建立节点之间的通信,但是如果可以使用一些标准的 Erlang 函数/模块来完成会更好吗?

最佳答案

在这种情况下,分布式 Erlang 不是您想要的。将节点 A 连接到节点 B 会形成一个集群——一个巨大的、受信任的计算环境。您不想信任其中的一部分,因此您不想要单个集群。

而是编写一个特定的网络服务。使用网络本身作为您的抽象层。最直接的方法是建立从 A 到 B 的流连接(只是无聊的旧 gen_tcpgen_sctp 或使用 ssl 或其他)。

A 上的套接字处理过程接收来自节点 A 需要调用 B 的任何部分的消息——如果它们直接连接,您将完全按照您的方式编写它。使用普通的 Erlang 消息样式:Message = {name_of_request, Data}或类似的。 A 上的连接过程只是执行 gen_tcp:send(Socket, term_to_binary(Message)) .

B 穿梭机上的套接字处理进程通过简单地接收 {tcp, Socket, Bin} -> Servicer ! binary_to_term(Bin) 来接收套接字和您的服务进程之间的网络消息。 .

计算结果通过使用 term_to_binary 的完全相同的过程返回到另一个方向。/binary_to_term再次翻译。

您的服务进程应该接收定义明确的消息,并忽略任何没有意义的内容(通常只是记录废话)。因此,通过这种方式,您不会执行直接 RPC(这在不受信任的环境中是不安全的),您只是响应在您的(小小)消息传递协议(protocol)中定义的有效语义。套接字处理过程的编写方式可以为您抽象出来,并让您感觉好像您正在处理分布式 Erlang 中的可信环境,但实际上您有两个独立的集群,它们的请求限制在每个集群其他由您的协议(protocol)定义。

关于erlang - 分布式erlang的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328314/

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