Akka-プルパターンと耐久性のあるメールボックス

ルイス・メディナ

私は、Akkaを使用して、Twitterストリームを(今のところ)取り込み、アクターを使用してさまざまな方法でメッセージを処理するリアルタイム処理システムを作成するプロジェクトに取り組んでいます。私は他の人がAkkaを使用して構築した同様のアーキテクチャについて読んでいて、この特定のブログ投稿が私の目に留まりました。

http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling

ここでは、アクターに作業(メッセージなど)をプッシュする場合と、アクターに作業をプルさせる場合に発生するさまざまな問題について説明します。記事を言い換えると、メッセージをプッシュすることによって、どの作業単位がどの作業者によって受信されたかを知る組み込みの方法はなく、それを確実に追跡することもできません。さらに、ワーカーが突然多数のメッセージを受信し、各メッセージが非常に大きい場合、圧倒されてマシンのメモリが不足する可能性があります。または、処理がCPUを集中的に使用する場合は、CPUのスラッシングが原因でノードが応答しなくなる可能性があります。さらに、jvmがクラッシュすると、アクターがメールボックスに持っていたすべてのメッセージが失われます。

メッセージをプルすると、これらの問題が大幅に解消されます。特定のアクターはコーディネーターから作業をプルする必要があるため、コーディネーターは各ワーカーの作業単位を常に把握しています。作業者が死亡した場合、コーディネーターはどの作業単位を再処理するかを知っています。また、メッセージはワーカーのメールボックスに配置されないため(1つのメッセージをプルし、別のメッセージをプルする前に処理するため)、アクターがクラッシュした場合にそれらのメールボックスが失われることは問題ではありません。さらに、各ワーカーは現在のタスクを完了した後にのみより多くの作業を要求するため、ワーカーが同時に処理できる以上の作業を受け取ったり開始したりする心配はありません。明らかに、コーディネーター自体がクラッシュしたときに何が起こるかなど、このソリューションには問題もありますが、今のところ、これは問題ではないと仮定しましょう。

http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2

これにより、このプルパターンを実行する代わりに、プッシュを実行するが耐久性のあるメールボックスを使用するという代替案について考えました。私が考えていた例は、RabbitMQを使用するメールボックスを実装し(Redis、MongoDB、Kafkaなどの他のデータストアもここで機能します)、アクターの各ルーター(すべて同じ目的で使用されます)を共有することでした同じメッセージキュー(または使用するデータストアに応じて同じDB /コレクションなど)。言い換えると、各ルーターは、メールボックスとして機能する独自のキューをRabbitMQに持ちます。このように、ルートの1つがダウンした場合でも、まだアップしているルートは、通常のメモリ内メールボックスを使用しなくなったため、キューがオーバーフローすることをあまり心配せずに、RabbitMQから取得し続けることができます。また、メールボックスはメモリ内に実装されていないため、ルートがクラッシュした場合、失われる可能性のあるメッセージのほとんどは、クラッシュ前に処理していた単一のメッセージです。ルーター全体がダウンした場合、ルーターが回復してメッセージの処理を再開できるようになるまで、RabbitMQ(または使用されているデータストア)が増加した負荷を処理することが期待できます。

耐久性のあるメールボックスに関しては、バージョン2.0に戻ると、AkkaはMongoDBやZooKeeperなどで動作するいくつかのメールボックスを実装していたため、これらをより積極的にサポートすることに力を注いでいたようです。しかし、何らかの理由でアイデアを放棄したようです。最新バージョン(この投稿の執筆時点では2.3.2)以降のある時点で、それらについては言及されていません。enqueue()、dequeue()などのメソッドを提供するMessageQueueインターフェースを実装することで、独自のメールボックスを実装することもできます。そのため、RabbitMQ、MongoDB、Redisなどで機能するメールボックスを作成することはできません。問題になる。

とにかく、これについてあなたの男とギャルの考えを聞きたかっただけです。これは、引っ張る代わりに実行可能な方法のように見えますか?

ローランド・クーン

この質問はまた、akka-userにかなり長く有益なスレッドを生み出しました要約すると、(永続的な)アクターによって処理される作業項目を明示的に管理し、そこから可変数のワーカーアクターが新しいジョブをプルすることをお勧めします。これにより、リソース管理が向上し、処理対象と再試行の処理方法を明示的に制御できるようになります。 。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

耐久性のあるメールボックスが削除されたので、Akkaアクターのメッセージを回復するにはどうすればよいですか?

分類Dev

Java、Akkaアクター、およびバウンドメールボックス

分類Dev

akkaルーターメッセージのシーケンス

分類Dev

AKKA.NETメールボックスのSynchronizationLockException

分類Dev

ベスト プラクティス - akka アクターのヘルパー メソッド

分類Dev

Azureの耐久性のある機能高スループット/低レイテンシーのために?

分類Dev

さまざまなAkkaメールボックスタイプを使用する場合

分類Dev

Akkaディスパッチャーとルーター

分類Dev

akka 2.6のTypedActors

分類Dev

Akkaメールボックス内の特定のメッセージを無効にする

分類Dev

akkaクラスター対応ルーターとakkaクラスターシャーディングの異なるユースケース?

分類Dev

Akka:アクターの現在のメールボックスのサイズまたは処理を待機しているメッセージの数

分類Dev

Akka:アクターの現在のメールボックスのサイズまたは処理を待機しているメッセージの数

分類Dev

Akkaスレッドプールエグゼキュータ構成パラメータの説明

分類Dev

スプレールートでのAkkaアクターのチェーン

分類Dev

プール内のAkkaアクターインスタンス間で可変データを共有する

分類Dev

Akka.NETアクターとラッパー(Rxを使用する可能性があります)

分類Dev

Akkaクラスターでトピックグループを使用するPubsub

分類Dev

Scala Akka Streamsプロジェクトのコンパイルに失敗しました、「value〜>はakka.streams.Outlet [In]のメンバーではありません」

分類Dev

フォールバックするAkkaとスーパーバイザーの戦略

分類Dev

Akkaのアクタープールとグループの違い

分類Dev

akka-httpはスプレールーティングdslと完全に互換性がありますか?

分類Dev

耐久性のあるドキュメントフォルダ?

分類Dev

Akka-HTTPルートからクエリパラメータを抽出する警告メッセージ

分類Dev

akka-http-testkitとakka-actor-testkit-typed

分類Dev

Akkaメッセージとアクターの命名規則

分類Dev

Akka Stream:mapMaterializedValueの意味

分類Dev

Akka Stream:mapMaterializedValueの意味

分類Dev

AkkaのTestKit.expectMsgClass

Related 関連記事

  1. 1

    耐久性のあるメールボックスが削除されたので、Akkaアクターのメッセージを回復するにはどうすればよいですか?

  2. 2

    Java、Akkaアクター、およびバウンドメールボックス

  3. 3

    akkaルーターメッセージのシーケンス

  4. 4

    AKKA.NETメールボックスのSynchronizationLockException

  5. 5

    ベスト プラクティス - akka アクターのヘルパー メソッド

  6. 6

    Azureの耐久性のある機能高スループット/低レイテンシーのために?

  7. 7

    さまざまなAkkaメールボックスタイプを使用する場合

  8. 8

    Akkaディスパッチャーとルーター

  9. 9

    akka 2.6のTypedActors

  10. 10

    Akkaメールボックス内の特定のメッセージを無効にする

  11. 11

    akkaクラスター対応ルーターとakkaクラスターシャーディングの異なるユースケース?

  12. 12

    Akka:アクターの現在のメールボックスのサイズまたは処理を待機しているメッセージの数

  13. 13

    Akka:アクターの現在のメールボックスのサイズまたは処理を待機しているメッセージの数

  14. 14

    Akkaスレッドプールエグゼキュータ構成パラメータの説明

  15. 15

    スプレールートでのAkkaアクターのチェーン

  16. 16

    プール内のAkkaアクターインスタンス間で可変データを共有する

  17. 17

    Akka.NETアクターとラッパー(Rxを使用する可能性があります)

  18. 18

    Akkaクラスターでトピックグループを使用するPubsub

  19. 19

    Scala Akka Streamsプロジェクトのコンパイルに失敗しました、「value〜>はakka.streams.Outlet [In]のメンバーではありません」

  20. 20

    フォールバックするAkkaとスーパーバイザーの戦略

  21. 21

    Akkaのアクタープールとグループの違い

  22. 22

    akka-httpはスプレールーティングdslと完全に互換性がありますか?

  23. 23

    耐久性のあるドキュメントフォルダ?

  24. 24

    Akka-HTTPルートからクエリパラメータを抽出する警告メッセージ

  25. 25

    akka-http-testkitとakka-actor-testkit-typed

  26. 26

    Akkaメッセージとアクターの命名規則

  27. 27

    Akka Stream:mapMaterializedValueの意味

  28. 28

    Akka Stream:mapMaterializedValueの意味

  29. 29

    AkkaのTestKit.expectMsgClass

ホットタグ

アーカイブ