アクターモデルとマイクロサービスの違いは何ですか?


23

どちらも、プロセスのネットワークを通信する並列MPIのようです。役者をサービスで識別します。アクターはより動的ですか(サービスネットワークはより静的ですが、作成して呼吸として殺すことができます)または何ですか?


回答:


11

アクターモデル-同時計算の数学モデル、およびマイクロサービス-サービス指向アーキテクチャの実装。類似点は非常に偶然です。

いくつかのアクターモデルに基づいてマイクロサービスを構築し、アクターモデルを使用してマイクロサービスアーキテクチャをモデル化することは確かに可能ですが、これらが同等であることを意味するものではありません。「マイクロサービスシステム」を「電子メールシステム」に置き換えますが、それでも変わりません。「アクターモデル」を「順次プロセスの通信」(CSP)に置き換えます。CSPとアクターモデルシステムは相互にモデル化できるため、これも「true」になります。

アクターモデルを指定すると、マイクロサービス、SOA、または電子メールを使用して実装できますが、実際に比較できるのは同じレベルの抽象化であることではありません。

また、アクターモデルはバッファー(マイクロサービスの世界ではメッセージキューと考えることができます)を重視しているため、本質的に非同期通信がまだ可能ですが、一部のアクター/マイクロサービスは準備ができていません。

言い換えれば、俳優モデルとの比較は、非常に高いレベルの考察で創造的な洞察をもたらすことができますが、ほとんどはリンゴ対オレンジです。

SOA /マイクロサービスの数学モデルとアクターモデルを比較することが目標である場合、1)SOAの合意された数学モデルがない、2)モデルには通常目的が含まれているため、自明ではありません。また、SOA /マイクロサービスモデリングは、アクターモデルの目的とは異なる可能性が非常に高いです。ここで SOAをモデル化する試みの1つの例。

もちろん、マイクロサービスを使用してアクターモデルシステムを作成し、各サービスをアクターと呼ぶことができます(アクターモデルとは厳密な定義を参照してください)。しかし、これは一般的な意味で2つの間に意味のある関係があることを意味しません。


つまり、アクターモデルを同じレベルのマイクロサービスと比較することはできません。私の答えを更新しましょう
ローマンスーシ

そんなこと言わない。マイクロサービスはアクターモードを実装でき、アセンブリまたはCプログラムも実装できます。しかし、私は彼らが常にそうしているとは言いません。はい、Erlangはアクターモデルの実装例でもあります。私はあなたの議論を理解しているかどうかわかりません。
ローマンスーシ

申し訳ありませんが、最初にアクターは数学モデルであり、uServicesはそのモデルを実装していることを読みました。サービスアーキテクチャを実装していることに気付いていません。したがって、私の質問は、アクターとSOAの2つの数学モデルを互いに比較する方法です。サービスは、要求を受け入れて応答メッセージを生成するメッセージループを持つものです。これが、アクターの役割です。SOAのマイクロサービスとの違いは何ですか?言い換えれば、サービスの分散ネットワークがある場合、それらをマイクロサービスまたはアクターと呼びますか?
リトルエイリアン

これは質疑応答サイトであり、フォーラムやニュースフィードではないことに注意してください。UPDATEやEDITなどのモニカは必要ありません。Stack Exchangeのすべての投稿には、誰でも閲覧できる詳細な編集履歴が既にあります。
ロバートハーベイ

1

マイクロサービスは、関心のある各領域を独自のデプロイ可能なアーティファクト(実行可能ファイル、スクリプト、JAR、WARなど)に分割することにより、ソフトウェアを編成する方法です。これにより、たとえば、必要な場所により多くのインスタンスを展開することで拡張できるなど、柔軟性が得られます。ユーザーがショッピングカートに物事を追加するよりも、カタログを見る時間の方が長いとします。1つのデプロイ可能なアーティファクトがカタログ機能を処理し、別のアーティファクトがショッピングカート機能を処理します。ロードを処理するためにカタログサービスのコピーをさらに実行できます。

また、内部の変更からそれらを分離します。製品データを保存するためにリレーショナルデータベースからドキュメントデータベースに移動するとします。ショッピングカートサービスを変更する必要はないでしょう。

アクターモデルは、デプロイ可能なアーティファクトよりも下位レベルであり、サービスを実装したオブジェクトの種類についての詳細です。上記の例を続けると、システム内のショッピングカートをアクターで表すことができるため、すべてのユーザーのカートは別個のアクターであり、メッセージはアイテムの追加、アイテムの削除、現在のコンテンツへの応答、配送の追加、チェックアウトを指示しますなど。この場合、マイクロサービスがまだあり、アクターモデルで実装されています。


同じサービスの複数のインスタンスを持つことができると言ったとき、私はそれが反対だと思い始めました:サービスはタイプであり、アクターはオブジェクトです:)
リトルエイリアン

アクターを個別にデプロイすることはできませんか?本気ですか?dotnet.github.io/orleans/Documentation/Grain-Versioning/...
ダフィーパンク

私には二つの概念の間で発生する収束の多分ビット、賢明な実装、があるようです...
ダフィーパンク

1

主な違いは粒度の違いだと思います。

アクターモデルの場合、アクターはOOP内の1つのオブジェクトに相当するものを表す傾向があるという点で、比較的きめ細かいです。

マイクロサービスの場合、単一のマイクロサービスが多数のアクターまたはオブジェクトで構成される可能性があるという点で、比較的粗いです。

最新のWebはさらに大きな粒度(「マクロサービス」)で同じものであると言うために、あまり想像を広げる必要はないことに注意してください。(たとえば)HTTPサーバーはマクロサービス、データベースサーバーはマクロサービス、Webブラウザーはマクロサービスなど。

それはすべてほぼ同じです-通信する孤立した部分。変更されるのは、ピースのサイズ(したがって、ピースの数)だけです。


すべてのJavaアプリケーションは、どんなに大きくても、単一のオブジェクトです。オブジェクトは他のオブジェクトで構成され、無限に大きくなる可能性があります。uServicesは、他のオブジェクトで構成されるアプリケーションの一種でもあると思います。
リトルエイリアン

0

マイクロサービスは、複数のレプリカを作成することにより水平方向に拡張します。各レプリカは、サービスのステートレスな性質により、リクエストに対応できます。彼らは、その無国籍性のおかげで失敗に対して回復力があります。

アクターは、より少ない負荷またはより多くの利用可能なリソースを持つパーティションに移動することによりスケーリングします。彼らはステートフルです。アクターフレームワークに応じて、別のアクターを動的に起動したり、アクターのホットバックアップを常に維持して障害が発生したプライマリアクターに対処したりできるため、障害に対する回復力があります。

繰り返しますが、マイクロサービスもステートフルになる可能性がありますが、マイクロサービスの設計原則に反します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.