1. ホーム
  2. node.js

[解決済み] Node.jsのイベントシステムは、Akkaのアクターパターンとどう違うのでしょうか?

2023-01-04 20:58:05

質問

私はこれまで Node.js を少し使っていて、自分ではかなりJavaに慣れていると思っています。 しかし、私はちょうど Akka を発見し、そのアクター パターンにすぐに興味を持ちました (私が理解したところでは)。

さて、私のJavaScriptのスキルがScala/Javaのスキルと同等であったと仮定して、どちらのシステムの実用性にも注目したいと思います。 特に Web サービスの観点で。

Nodeは多くの同時処理を扱うのに優れていると私は理解しています。 私は、資産管理システム用の優れた Node Web サービスが、(大規模で高トラフィックのアプリケーションで)同時に変更を送信する多くのユーザーの処理に優れていることを想像しています。

しかし、Akka のアクターについて読んだ後、それは同じことに秀でているように思えます。 そして、仕事を一口サイズの断片に減らすという考え方が好きです。 さらに、何年も前に私はErlangに手を出し、それが使用するメッセージパッシングシステムに恋をしてしまいました。

私は複雑なビジネスロジックを扱う多くのアプリケーションに取り組んでいますが、そろそろどちらかに大きく飛び込む時期なのではないかと思っています。 特にレガシーなStrutsとC#アプリケーションをアップグレードするのがそうです。

とにかく、聖戦を避けるために、2つのシステムは根本的にどう違うのでしょうか? どちらも同じ目標に向かっているように見えますが。

Akka の自己回復アーキテクチャが有利なのかもしれません。

EDIT

近い票を集めているようです。 この質問を"nodeとakkaのどちらが良いですか"として取らないようにしてください。 私が探しているのは、Nodeのようなイベント駆動型ライブラリとAkkaのようなアクターベースのライブラリの根本的な違いです。

どのように解決するのですか?

詳細は省きますが(Node.js の場合、私はほとんど知らないので)、主な違いは、Node.js は並列処理を伴わない並行処理のみをサポートし、Akka は両方をサポートしているという点です。どちらも完全なイベント駆動型であり、大きなワークロードに対応できますが、並列性がないため Node.js では困難です(つまり、並列性は複数のノードを起動し、それに応じてリクエストをディスパッチすることで明示的にコーディングされるため、実行時に柔軟性を欠くことになるのです)。分離された小さな作業単位(アクター呼び出し)を与えると、Akka は自動的に実行を並列化します。

重要なもうひとつの違いは、Node.js がコールバックからコールバックへエラー条件を渡すための作者の慣習に依存しているのに対し、Akka は構造的な方法で障害を処理するシステムを含んでいることです(必須である、親によって各アクターを監視させることによって)。根本的な問題は、非同期システムでは、同期スタックベースのシステムで採用されている例外処理の標準的なアプローチを使用できないことです。なぜなら、コールバックのエラーが発生するまでに、「呼び出し」コードは別のタスクに移動してしまうからです。システムに障害処理を組み込むことで、そのシステム上に構築されたアプリケーションが堅牢である可能性が高くなります。

上記はすべてを網羅したわけではなく、もっと多くの違いがあると思います。