問題タブ [akka.net-cluster]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
414 参照

akka.net - ノードがクラスターに参加したとき、Akka.net クラスターにイベントはありますか?

私の Akka.Net クラスターには、いくつかのノードがあります。クラスターに正常に参加したときに開始したい通信があります。クラスターにようこそというログを確認できます。

しかし、これのために発生した、サブスクライブできるイベントが表示されません。

0 投票する
0 に答える
350 参照

akka.net - Akka.net クラスタ ブロードキャストは 1 つのノードでのみ受信されます

Akka.net WebCrawlerから学び、独自のクラスター テストを作成しました。プロセッサ ノード (コンソール アプリ) と API ノード (SignalR) があります。構成は次のとおりです。

プロセッサ ノード:

API ノード: (非シード ノードはポート = 0 になります)

API ノード内に、SignalR という通常のアクターを作成しました。

プロセッサ ノード内で通常のアクターを作成し、Scheduler を使用しTell()て API ノードの signalR アクターに文字列を渡しました。

これは、1 つのプロセッサと 1 つの API がある場合にうまく機能します。複数のプロセッサ ノードと 1 つの API ノードがある場合にも機能します。残念ながら、複数の API ノードがある場合、どのように構成をセットアップしても、"tell" ですべての API ノードが通知されるわけではありません。メッセージはそのうちの 1 つにのみ送信されます。どのノードがメッセージを受信するかは、API ノードの開始シーケンスに基づきます。すべての API ノードがクラスターに正しく登録されているようですが、間違っている可能性があります。

これは構成または理解の問題だと感じ始めています。誰でも洞察を共有できますか?

追加のテストを行いました。ASP.NET SignalR API ノードを通常のコンソール アプリケーションに置き換えても、動作は変わりません。

更新: Akka.NET チームに連絡しました。この動作は既知のバグです。1.1 リリースで修正される予定です。 更新 2: この問題は、GitHub のプロジェクトで修正済みとしてマークされています。

0 投票する
1 に答える
458 参照

akka.net - Akka.Net での冗長性とフェイルオーバーの処理

リモート要求を受け入れ、処理を行い、応答を返すサービスに Akka.Net アクター システムを実装しました。システム内の一部のアクターには、データベースに永続化される状態があります。アクター システムが起動すると、これらのアクターはデータベースから状態を読み取ることによって水和します。

リクエストが来ると、アクターはオンデマンドで遅延ロードされ、メモリに常駐してさらなるリクエストを処理します。

現在、可能な限り簡単な方法で冗長性を提供する方法を検討しています。

ここでの最も簡単な解決策は、サービスの 2 つ目のコピーを「コールド」スタンバイにすることだと思います。最初のノードがダウンすると、リクエストは 2 番目のノードにルーティングされます。これにより、アクターの作成とデータベースからの状態の取得が開始されます。

その後、元のノードは起動時に「プライマリ」ではないことを認識し、すべてのアクターを終了する必要があります (アクティブになったときにディスクから状態を読み取れるようにするため)。

これを達成する最善の方法は何ですか?Akka.Cluster を使用して、ノードがいつクラスターに参加または離脱するかをリッスンする必要があると思いますか? しかし、すべてのメッセージが基本的に 1 つのノードに送信される必要があるとは、どのように言えばよいのでしょうか? ある種のリーダー選出プロセスはありますが、クラスター全体ではなく個々の役割のためのものですか?

これを行うためのより良い/簡単な方法はありますか?

0 投票する
1 に答える
463 参照

akka - IIS が AppPool をリサイクルした後、ノードが Akka.Net クラスターに参加しないことがある

SMS、電子メール、およびプッシュ通知用の Akka クラスター インフラストラクチャを作成しました。システムには、クライアント、送信者、灯台の 3 種類のノードが存在します。クライアント ロールは、Web アプリケーションと API アプリケーションによって使用されています (Web と API は IIS でホストされています)。Lighthouse と Sender の役割は、Windows サービスとしてホストされています。IIS によって Web アプリと API アプリの AppPools がリサイクルされることを考慮して、global.asax.cs の Start および Stop イベントで、Client ロールでアクター システムをシャットダウンし、再度開始します。ログから、システムが正常にシャットダウンしてクラスターに参加したことを確認できます。

しかし、AppPool がリサイクルされると、クライアントの ActorSystem は起動しますが、クラスターに参加できず、通知が機能しなくなることがあります (これは私たちにとって大きな問題です)。ActorSystem を手動で停止し、再度手動で動作させると、クラスターに参加します。この状況は、約 2 日ごとに発生します。

クライアントがエラーの前にクラスターに参加していることを確認できます。

ノード [akka.tcp://NotificationSystem@ . . . :41350] は JOINING、ロール [クライアント]
リーダーはノード [akka.tcp://NotificationSystem@ を移動中です。. . :41350] から [上へ]

ログを見ると、クライアントがクラスターに参加した後に次のエラーが表示されます。

シャットダウン アドレス: akka.tcp://NotificationSystem@ . . :41350Akka.Remote.ShutDownAssociation: シャットダウンアドレス: akka.tcp://NotificationSystem@ . . .:41350 ---> Akka.Remote.Transport.InvalidAssociationException: シャットダウン中のため、リモート システムがアソシエーションを終了しました。--- 内部例外スタック トレースの終了 --- Akka.Remote.EndpointWriter.PublishAndThrow(例外の理由、LogLevel レベル) で Akka.Remote.EndpointWriter.b__20_0(例外の例) で Akka.Actor.LocalOnlyDecider.Decide(例外の原因) で) at Akka.Actor.OneForOneStrategy.Handle(IActorRef child, Exception x) at Akka.Actor.SupervisorStrategy.HandleFailure(ActorCell actorCell, Exception cause, ChildRestartStats failedChildStats, IReadOnlyCollection1 allChildren) at Akka.Actor.ActorCell.HandleFailed(Failed f) at Akka.Actor.ActorCell.SystemInvoke(エンベロープ エンベロープ)--- 例外がスローされた前の場所からのスタック トレースの終わり --- Akka.Actor で Akka.Actor.ActorCell.HandleFailed(Failed f) で。. . .:41350 ---> Akka.Remote.Transport.InvalidAssociationException: シャットダウン中のため、リモート システムがアソシエーションを終了しました。--- 内部例外スタック トレースの終了 --- Akka.Remote.EndpointWriter.PublishAndThrow(例外の理由、LogLevel レベル) で Akka.Remote.EndpointWriter.b__20_0(例外の例) で Akka.Actor.LocalOnlyDecider.Decide(例外の原因) で) at Akka.Actor.OneForOneStrategy.Handle(IActorRef child, Exception x) at Akka.Actor.SupervisorStrategy.HandleFailure(ActorCell actorCell, Exception cause, ChildRestartStats failedChildStats, IReadOnlyCollection`1 allChildren) at Akka.Actor.ActorCell.HandleFailed(Failed f) ) Akka.Actor.ActorCell.SystemInvoke(エンベロープ エンベロープ) で --- 例外がスローされた前の場所からのスタック トレースの終わり --- Akka.Actor で Akka.Actor.ActorCell.HandleFailed(Failed f) で。

エラーの後、次のエラー メッセージが表示されます。

[akka.tcp://NotificationSystem@ への関連付け. . :41350] が UID [226948907] を持つことは回復不能に失敗しました。UID は隔離され、この UID へのすべてのメッセージはデッド レターに配信されます。この状況から回復するには、リモート アクター システムを再起動する必要があります。

クライアント アクターを再起動しないと、システムはそれ自体を修正しません。

クライアント ロールの構成は次のとおりです。

送信者の役割の構成は次のとおりです。

どうすればこの問題を解決できますか? ありがとうございました。

0 投票する
2 に答える
2556 参照

c# - Akka.NET クラスター ノードの正常なシャットダウン

バックグラウンド

Lighthouse シード ノードと、アクター システムを実行する他の 2 つのノードを含む Akka.NET クラスターがあります。クラスタ ノードの 1 つでグレースフル シャットダウンを実行しようとすると、他のノードの少なくとも 1 つがノードの離脱に関するメッセージを受信し、最終的にすべてのクラスタ ノードがノード リストの離脱ノードを除外することを確認したいと考えています。

それが処理されたら、他の2つのノードがシャットダウンしたノードに接続できないことに夢中になることなく、ノードをシャットダウンできるはずです。

私が試したこと

私が今持っているのは、TopShelf アプリケーションにラップされたコンソール アプリケーションです。

これが私のメインです:

停止機能をステップ実行すると、ノードが他のノードから離れることに関する受信メッセージが表示されません。ただし、関数が戻ると、他のノードが例外の噴出を開始します。

Akka.NET Gitter チャネルのユーザーは次のように述べています。

Webホストが終了した後、純粋なASP.NET Coreプロジェクトを使用して、TopShelfがなくても同じことを観察しました。

質問

ノードの離脱に関するメッセージを他のノードが受信できるようにするには、何を追加できますか?

0 投票する
2 に答える
332 参照

akka.net - Akka.Net クラスター シングルトン - 現在のシングルトン ノードが予期せずシャットダウンしたときにハンドオーバーが発生しない

シングルトンの動作を使用するために Akka.Net Cluster Tools を試していますが、完全に機能しているように見えますが、現在のシングルトン ノードの「ホスト」が正常にクラスターを離れたときです。ホスト ノードを突然シャットダウンすると、ハンドオーバーが発生しません。

バックグラウンド

4つのノードで構成されるシステムを構築しています(当初)。これらのノードの 1 つが「ワーカー コーディネーター」となり、データベースからのデータを監視し、必要に応じてジョブを他のワーカーに送信します。クラスターイベントにサブスクライブし、役割リーダー変更イベントを使用して (リーダーノード上の) アクターをコーディネーターにすることを考えていましたが、この場合はクラスターシングルトンの方が適していると思います。

作業サンプル (ただし、クラスターを正常に終了した場合のみ)

構成