当前位置: 首页 > 知识库问答 >
问题:

node.js事件系统与Akka的actor模式有何不同?

上官锦
2023-03-14

我使用node.js已经有一段时间了,我认为自己对Java很熟悉。但我刚刚发现了akka,并立即对它的actor模式感兴趣(据我所知)。

现在,假设我的JavaScript技能与我的Scala/Java技能相当,我想关注这两种系统的实用性。特别是在web服务方面。

我的理解是,Node在处理许多并发操作方面非常出色。我想,一个用于资产管理系统的好的节点web服务将在处理同时提交更改的多个用户方面表现出色(在大型、高流量应用程序中)。

但在读了Akka的演员后,它认为它会在同样的事情上表现出色。我喜欢把工作减少到一口大小的小块的想法。另外,几年前我涉足了Erlang并爱上了它使用的消息传递系统

我在许多处理复杂业务逻辑的应用程序上工作,我想是时候在其中一个上投入更多的精力了。特别是升级旧的Struts和C#应用程序。

不管怎么说,避免圣战,这两种制度有什么根本区别?似乎两者都朝着同一个目标前进。也许Akka的“自愈”架构有优势。

编辑

看来我的选票接近了。请不要把这个问题当成一个“node和Akka哪个更好”。我要寻找的是事件驱动库(如节点)和基于actor的库(如Akka)的根本区别。

共有1个答案

闻梓
2023-03-14

不讨论细节(对于Node.js我对此了解太少),主要区别在于Node.js只支持并发而不支持并行,而Akka同时支持这两种。这两个系统都是完全事件驱动的,可以扩展到较大的工作负载,但是缺乏并行性使得在Node.js中很困难(即并行性是通过启动多个节点并相应地分配请求来显式编码的;因此在运行时是不灵活的),而在Akka中由于其可调的多线程执行器,这是相当容易的。给定小的孤立的工作单元(actor调用),Akka会自动为您并行化执行。

另一个重要的区别是,Akka包含了一个以结构化方式处理故障的系统(通过让每个执行元由其父级监管,这是强制性的),而Node.js则依赖于作者将错误条件从回调传递到回调的约定。潜在的问题是异步系统不能使用基于同步堆栈的系统所使用的标准异常方法,因为在回调错误发生时,“调用”代码将转移到不同的任务。将故障处理内置到系统中使得构建在该系统上的应用程序更有可能是健壮的。

以上并不意味着详尽无遗,我肯定还有很多不同之处。

 类似资料:
  • 我正在尝试创建一个Akka系统,它将响应HTTP请求。我创造了几个可以很好地交换信息的演员。我还可以使用akka-http来响应HTTP请求。问题在于如何将这两部分连接起来。 TL;DR:如何在akka-http请求处理过程中与Akka参与者对话? 我创建了一个单独的参与者来负责启动HTTP系统: 正如您可能看到的,执行元在它接收到的第一条消息上创建akka-http服务(没有理由,实际上,它也可

  • 我想创建一个基于AKKA的分布式电子邮件邮箱系统。当我的应用程序启动时,我想创建所有收件箱参与者,并在他们上启动调度器,以接收邮件的时间间隔为10秒。但是有一个问题是如何创建这些收件箱角色?是否可以在集群上创建actor或获得对它的引用(如果它存在的话)?Actor名称可以是数据库中的邮箱UUID,群集中只能存在一个具有特定UUID的Actor。 最重要的问题是如何在集群中创建以uuid为名称的a

  • Scala2.12和Akka都是新的。我正在尝试在运行时收集关于我的actor系统的一些度量。具体地说,我感兴趣的是: 获取在我的执行元系统中运行的执行元的# 对于每个执行元: 获取已接收的消息数 获取它已发送给其他参与者的消息数 确定消息在执行元邮箱中的时间 确定执行元实际处理消息所用的时间 获取执行元邮箱的当前大小 我希望Akka有某种鲜为人知的“元API”,在那里我可以去获取这些类型的度量,

  • Actor是封装状态和行为的对象,他们唯一的通讯方式是交换消息——把消息存放在接收方的邮箱里。从某种意义上来说,actor是面向对象最严格的形式,不过最好把它们比作人:在使用actor来对解决方案建模时,把actor想象成一群人,把子任务分配给他们,将他们的功能整理成一个有组织的结构,考虑如何将失败逐级上传(好在我们并不需要真正跟人打交道,这样我们就不需要关心他们的情绪状态和道德问题)。这个结果就

  • TestKit 实例 (Scala) 对于任何软件开发,自动化测试都是开发过程中一个重要组成部分。actor 模型对于代码单元如何划分,它们之间如何交互提供了一种新的视角,这对如何编写测试也造成了影响。 Akka 有一个专门的模块——akka-testkit来支持不同层次上的测试,测试很明显有两个类别: 测试独立的、不包括actor模型的代码,即没有多线程的内容;这意味着给事件发生的次序给定,有完

  • 主要内容:引入模块,服务端的模块放在哪里为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。 引入模块 在 Node.js 中,引入一个模块非常简单,如下我们创建一个 main.js 文件并引入 hello 模