Erlang对*透明*演员分配的支持如何影响应用程序设计?

时间:2009-06-09 21:44:01

标签: algorithm erlang distributed actor

Erlang中actor模型的一个特性是透明分发。除非我误解,当你在演员之间发送消息时,理论上你不应该假设它们在同一个进程空间中,甚至不在同一个物理机器上。

我一直认为分布式容错系统需要仔细的应用程序设计来解决ordering/causalityconsensus(以及其他)周围的固有问题。

我很确定Erlang不承诺透明地解决这些类问题,所以我的问题是,Erlang开发人员如何应对这一问题?您是否将所有演员设计在相同的进程空间中,然后在实际分发它们时才解决分发问题?

如果是这样,Erlang的透明分发功能是否真的只关注用于远程消息传递的有线协议而不是真正的透明,就像真正的分布式应用程序一样仍然需要在应用层进行精心设计?

3 个答案:

答案 0 :(得分:3)

事实上,Erlang确实透明地解决了这些问题。它可以这样做,因为它是一个具有不可变(单一赋值)变量的函数式语言。它使用Actor model进行并发,专门设计用于允许热插拔代码和并发编程,而无需程序员担心synchronization

Wikipedia article实际上对此有很好的描述。据我所知,爱立信发明了这种语言作为大规模并行电话交换机编程的实用方法。

答案 1 :(得分:3)

你是正确的,erlang本身并不能解决订购/因果关系或共识问题。 erlang为你抽象的是将消息发送到本地或远程节点之间的区别。

我不确定在语言设计中解决这些问题是否真的可行。更恰当地属于框架。 OTP框架确实有一些工具可以帮助解决这个问题。实际上,它在某种程度上取决于您正在解决的具体问题。

有关Erlang VectorClock实现的一个示例,请查看distributerl Erlang OTP主管也可能提供一些必要的共识基础设施,但有些人认为共识是异步消息传递分布式系统的不可能性。有关其他信息,请参阅您引用的Wiki页面。

答案 2 :(得分:3)

Erlang承诺这些事情(http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf第3.1(39-40)节):

  • 一切都是一个过程。
  • 流程非常孤立。
  • 流程创建和销毁是一种轻量级操作。
  • 消息传递是进程交互的唯一方式。
  • 流程具有唯一名称。
  • 如果您知道某个流程的名称,则可以向其发送消息。
  • 流程不共享资源。
  • 错误处理是非本地的。
  • 流程执行他们应该做或失败的事情。

休息取决于你。如果您想知道为什么会看到第2章。很快,如果您知道它的PID,即使它在另一块硬件上,您也可以发送消息进行处理。除非您收到有共同秘密的回复,否则您无法确定邮件是否到达。当您监视(或链接)进程失败时,您可以确定将收到失败消息。这些是你可以随心所欲地构建的基本元素。