在分布式系统中,演员(Akka)和代理(JADE)有什么区别?

9

Akka演员和Jade代理的概念有实质性的区别吗?

据我所知,两者都通过创建独立实体(带有系统逻辑块)并使它们之间通过发送消息来通信来实现系统分布。

它们之间还有其他因素使它们不同(例如性能或预期目的)吗?

3个回答

18

我以前不知道JADE,我是Akka技术负责人,所以请将我的回答视为参考。

浏览他们的网站(可能应该在更小的屏幕上查看),看起来他们的代理执行了actors的串行消息处理部分,但是他们缺乏监督和因此容错性,并且他们似乎鼓励阻塞或轮询,而Akka的actors完全是事件驱动的,因此消耗更少的资源(线程)。查看程序员指南,似乎该概念主要是为GUI开发而开发的用例,而Akka actors并不具体,可以用于模拟任何类型的计算或交互。

我在我的表面搜索中遇到的一个非常大的区别是提供给Agents和Actors的接口大小:可能是Akka的抽象更简单,因此更强大。

移动代理在主机之间的能力看起来很有趣,我们仍然需要实现它(请参见roadmap)。

如果我没有漏掉JADE方面的任何内容,那么Akka在反应式编程方面有更好的支持,它具有完全非阻塞的actor,可组合的Futures(即不是来自java.util.concurrent的阻塞Futures,而是具有用于异步组合的转换方法),STM支持等等。
我不知道JADE是如何实现的,但在Akka中,您可以通过仅更改配置来弹性地扩展和分配您的actors,参见路由
最后但并非最不重要的是Akka中的集群支持,我没有在JADE中找到相应的功能,但我没有深入挖掘过。
我刚刚注意到一件事:Akka不需要登录即可尝试使用它;-)

2
我的脑袋炸成了碎片。没想到会得到第一手的见解。谢谢! - atok
我可能错了,但我听了一场关于AMUSE的讲座(它是基于JADE的更具体的社交视频游戏框架),由JADE项目负责人之一主讲。他告诉我们,JADE代理对变化和故障非常敏感,因此具有容错性。 - Pievis
另外一件事,在我的大学里,他们鼓励将代理的含义解释为比演员更发展的东西。他们教导我们,演员只是封装了他的控制线程的简单对象,事实上,我仍然不理解Akka演员,因为根据我所学的观点,它们更像代理。 - Pievis
请注意,如果您想在单个位置中保存一些状态,Akka具有Clojure启发的Agents。http://doc.akka.io/docs/akka/snapshot/scala/agents.html - JasonG

9

我知道这个问题已经有几年了,但是为了完整性(对于那些像我一样寻找关于这个主题的信息的人),我想提出一个观点,与Ronald的立场相反(比Akka更了解JADE)。我不是JADE的贡献者,但曾经使用过它(几年前)并且进行了(大量的)移动软件代理方面的研究。

软件代理范式已经存在多年了,Jeffrey M. Bradshaw的论文是该主题的良好介绍。它涵盖了比纯粹的actors更多的概念。

我不会对这种范式进行介绍(如果您感兴趣,可以参考论文),但是没有一些关于它的知识就比较这些框架似乎是不公平的。只是提一下,JADE 实现了许多(并非全部,因为上次我检查时并非如此)范式概念,不仅仅是可以与演员进行比较的部分,还有像 BDI 模型、本体论等概念。此外,JADE 还实现了FIPA 规范,该规范有多个部分。

就像我说的,距离我上次检查JADE实现已经过了几年,因此我不会逐点进行技术比较。正如Ronald所说,JADE没有实现响应式或弹性扩展等概念,但必须考虑到这些概念今天广泛存在,但在许多年前(JADE开始时)并不太流行。我想要澄清的是,JADE确实具有容错性、可扩展性和非阻塞工作方式(也许网站上不太清楚)。书籍使用JADE开发多代理系统是该框架的一份绝佳介绍。
总之,如果演员模型足以满足您的需求,我会选择Akka,因为它比JADE更加简洁(可能更加轻巧)和现代化。如果您需要/希望使用与(移动)软件代理相关的更高级/特定功能,那么JADE是更广泛使用的框架+平台(或者至少在我研究时是这样)。
只是我的个人看法!

3
再过一年......我可以确认故障转移对Jade至关重要,以下是其中一些机制:备份平台、虚拟复制代理的概念、无状态中介容器(处理断开连接和ip更改)、持久消息传递。Wade增加了更多的容错机制:http://jade.tilab.com/wade/doc/WADE-User-Guide.pdf
Jade并不主要针对GUI开发。
Jade中另一个强大的功能是,代理在网络上不需要打开端口进行双向通信,只有平台和备份需要打开端口。
此外,STM(有限状态机)在Jade中是一个重要的部分,FIPA对话模型使用STM实现。Jade代理不会发送和接收消息,而是在工作流中执行对话。
Jade中没有提供集群功能,但Wade提供可配置的代理池,其中分布式代理池负责某个特定任务。
关于弹性扩展和Jade,已经进行了一些研究,我不知道目前的情况。也许最好在jvm级别上解决弹性扩展问题。
在分布式基于消息的解决方案中,Jade和Akka都需要关注安全性(身份、认证、授权)。
总之,Jade比第一眼看到的更加强大和功能丰富。Jade需要现代化。
研究如何使Akka和Jade相互受益,例如使用AkkaAgent将是有趣的课题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接