問題タブ [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.
akka.net - Akka.NET Cluster 1.0.8 および 1.1.1 の変更点
AKKA.NET クラスター 1.0.8 バージョンとその関連する依存関係を使用しているときに動作する AKKA.NET クラスターがあります。バージョン 1.1.1 を使用している間、同じクラスターは機能しません。クラスタはローカルで形成されますが、リモート マシンはクラスタを検出できません。このローカル クラスタは 1.1.1 でも動作します。これはネットワークの問題でしょうか、それとも何か間違っていますか?
これは、Web.Config の Akka Config セクションです。この同じ構成は 1.0.8 では機能しますが、1.1.1 では機能しません
HOCONにAPIの変更や構成の変更はありますか? どんな助けでも感謝します。ありがとう!
[編集: 2]
ログの Gist リンクhttps://gist.github.com/yashu2203/21e84af600cc3198961c0a6fe0300bb9
akka.net - クラスター内のノードに送信されたメッセージを追跡する
クラスターにnノードがあり、メッセージをそれらにルーティングしている場合、どのメッセージがクラスタールーター (RoundRobinPool または利用可能な場合は他のもの) 内からどのノードに送信されたかを追跡する方法はありますか?
つまり、すべてのメッセージを
送信した後、最後に次
のようなリストが必要です。message-3,6,9 から C ノードへ」など。
どんな助けでも大歓迎です。
akka.net - Akka.Net プール アクターが負荷に基づいてスケールアップまたはスケールダウンしないのはなぜですか
次の構成を使用して、ワークロードに基づいてスケールアップ/ダウンできるアクター システムを構築しようとしています。
私のメイン ループでは、3000 のメッセージを作成し、処理のためにアクターにプッシュしています。
上記の for ループに何か問題があると思いますか?私には、ルーターではなく 1 つのアクター ref にすべてのメッセージを送信しているように見えます。
私のReceiveActor
非常に単純なロギングアプリケーションです
また、開始および停止されたアクターの数を確認するためにAroundPreStart
、およびをオーバーライドしました。PostStop
しかし、アプリケーションが起動すると、アクターの数が 2 つしか作成されないことがわかります。lower-bound
これにより、デフォルトの 1 に基づいてより多くのアクターが作成されることを期待していましたが、pressure-threshold
発生していないことがわかります。処理するメッセージはありません。
誰かが私がここで間違っていることを理解するのを手伝ってくれますか? - ありがとう
更新 1:
私は実際の問題を理解したと思います。メッセージを投稿している間、ロジックを変更して展開構成にパスを追加し、関数をroutees.paths = ["/user/analysis"]
使用して、このようなものAsk
を使用して正しい参照を取得する必要があります analysisRef.Ask<Routees>
。
f# - F# でクラスター化された構成でアクターを作成する方法
Akka.Cluster
Aが灯台である3つのノードA、B、およびCでサンプルを作成しています。これまでのところ、ログから、クラスターは、アクターが存在しない場合、またはアクターがローカル (および で作成) の場合に正常に動作しspawn
ますspawnOpt
。B からアクターを作成し、C からアクセスしたいと考えています。
と
私は得る
2016-08-31 01:59:00.1185|INFO|Akka.Actor.EmptyLocalActorRef|Message String from akka://calculatorSystem/deadLetters to akka://calculatorSystem/user/r-actor was not delivered. 1 dead letters encountered.
使用する
例外をスローします
タイプの未処理の例外が
Akka.Configuration.ConfigurationException
Akka.dll で発生しました
追加情報:Configuration problem while creating [akka://calculatorSystem/user/r-actor] with router dispatcher [akka.actor.default-dispatcher] and mailbox and routee dispatcher [akka.actor.default-dispatcher] and mailbox [].
ノード C のテスト関数は次のとおりです。
HOCON (ノード B)
クラスター内の別のノードから呼び出すことができるアクターを作成するにはどうすればよいですか?
akka.net - Akka.net クラスターのデバッグ
タイトルがややこしいので、詳しく説明します。
バックエンドサーバーの一部として使用する以外に、スレッドセーフではない dll があります。スレッドの問題によりクラッシュするため、サーバーで直接使用することはできません。そこで、それぞれが 1 つのアクターをホストする N ノードの akka.net クラスターを作成しました。元々その不良な dll に対して行われていたすべての API 呼び出しは、ラウンド ロビン グループを介してこれらのノードへのメッセージを通じてルーティングされるようになりました。各ノードにはシングル スレッド アクターが 1 つしかないため、安全にアクセスできますが、N 個のアクターを実行しているため、ある種の並列性が得られます。
本番環境ではauto-down = false
、ハートビートなどのデフォルトのタイミングで構成されたものがあります。これは完全に機能します。必要に応じて新しいノードを起動したり、グループに追加したり、削除したりできCluster.Leave
ます。これも満足です。
私の問題はデバッグにあります。私たちの開発環境では、20 個のノードからなるクラスターを維持し、それぞれが上記のようにこの dll をラップする単一のアクターを公開しています。また、シード ノードとして機能し、他に何もしない一連のノードもあります。
アプリケーションが実行されると、クラスターに参加します。これにより、ラウンドロビン ルーターを介して、クラスター内で保持しているノードに要求を送信できます。アプリの開発、テスト、デバッグを行っているときに、使用するものを構成するとauto-down = false
、テストの実行がクラッシュしたり、適切なクラスターを経由せずにロジックを残してアプリケーションを停止したりするたびに、問題が発生します。デバッガーの停止ボタンでアプリを終了するときなど。
自動停止がないと、クラスターのメンバーが欠落したままになり、リーダーがクラスターへの追加を許可しなくなります。これは、次回アプリを実行してデバッグするときに、クラスターに参加できず、立ち往生していることを意味します。
デバッグを機能させるには、オートダウンを設定する必要があるようです。設定されている場合、アプリをクラッシュさせると、ノードは 5 秒後にクラスターから削除されます。次にアプリを起動すると、クラスターは正常な状態に戻り、問題なく参加できます。
これに関する問題は、アプリケーションをデバッグしてしばらく一時停止すると、ほとんどすぐに到達不能と見なされ、5 秒後にクラスターからスローされることです。基本的に、これらの設定ではデバッグできません。
だから、私は設定しましたfailure-detector.acceptable-heartbeat-pause = 600s
デバッグ中にアプリを一時停止する時間を増やすために。10 分でシャットダウンしますが、それほど長くデバッガーに座っていることはあまりないので、許容できるトレードオフです。もちろん、これに関する問題は、アプリをクラッシュさせるか、デバッガーで停止すると、クラスターは次の 10 分間存在すると見なすことです。誰もこれらのノードと直接通信しようとしないため、理論的には大きな問題ではありませんが、実行したばかりのテスト自体がロール リーダーとして選出されるケースに何度も遭遇します。そのため、役割のリーダーは死んでいますが、クラスターはまだそれを認識していません。これにより、10分が経過するまで、クラスターに新しいものを参加させることができないようです。うまくクラスタを離れようとすると、デッド ノードが終了状態でスタックし、10 分間削除されません。また、削除の通知が常に届くとは限りません。
「私をリーダーにしないで」と言う方法はないようです。クラスターにロールを設定せずにアプリを実行すると、それ自体がクラスター リーダーとして選出されることが多く、ロール リーダーが死んでいるが不明な場合と同じ問題を引き起こしますが、より大きなレベルで発生します。
だから、これを回避する方法は本当にわかりませんが、誰かがこれをやってのけるためのトリックを持っているかもしれません. クラスター メンバーがクラスターから追い出されることなくデバッグできるようにしたいのですが、リーダー ノードが存在しないのに存在するとクラスターに認識させたくありません。
何か案は?
akka.net - シードのない Akka.net クラスター
今日、Akka.net に出会いました。私のプロジェクトの 1 つにぴったりのようです。しかし、ユーザーが (ローカル) ネットワーク上の複数のマシンでアプリを起動するだけで、自動的にクラスターを形成する、ゼロ構成クラスターのようなものが必要です。Akka.net でこれが可能かどうかはわかりません。構成ファイルに入れるシード ノードがないからです。
プログラムでシード ノードを設定するオプションがあれば、ブロードキャストして他のノードを見つけることができると思いますが、すべてのノードが同じシード ノードのセットで始まるという保証はありません。ノード A をシード ノード B で起動し、ノード C をシード ノード A で起動することは可能ですか?
akka.net - Akka.net Lighthouse が失敗したノードへの接続を試行し続ける
akka.net クラスタリングを学習しようとしています。
ノードがダウンすると、クラスターから削除されることを理解していると思いました。しかし、それは起こっていないようです。
Lighthouse のインスタンスを (シード ノードとして) 起動し、非常にシンプルな Akka.net プロジェクトを作成して接続しました。それはすべてうまく接続しました。
しかし、私がノードを強制終了すると、Lighthouse はそれを何度も探し続けます。最終的には、リーダーがその義務を遂行できないことについて何かを言うでしょう.
ノードが正常にクラスターから離れなかったことはわかっていますが、クラッシュするノードがあると思います。
それが起こったとき、ゴシップシステムがデッドノードをクラスターから取り除き、すべてが進むと思っていました. (その後、ノードがオンラインに戻った場合、クラスターに再度追加するように要求される可能性があります。
しかし、私は何かが欠けているに違いありません。Lighthouse は何度も再試行を繰り返すためです。
再び接続されるのを待つのではなく、なぜそれを行うのですか?
akka - Akka.net 親が子アクターを再起動しないようにする方法
それはおそらく、実装の問題というよりも設計の問題です。Akka クラスターを形成する次のアクター階層があるとします。
(スペースを節約するために意図的にシード ノードを配置しませんでした) API ロールも冗長化できます
したがって、ワークフローは明らかです。ユーザーは対話的に/スクリプトによって、さまざまなワーカー ノードでさまざまなジョブの束を開始します。ジョブは「ファイア アンド フォーゲット」タイプであり、ユーザーは結果を待たず、結果はデータベースに書き込まれます。その後、悪いことが起こります - API ノードが再起動されるか、さらに悪化します (破壊、浸水、ゴジラに食べられるなど)。子アクターはもはや有効ではない親アクターの状態の一部であるため、子アクターを存続させることができないことを理解しています。私が正しく理解している場合でも、ルーターアクターはすでにそのルートの親として機能していますか? 質問: API アクターからワーカー アクターを分離する最善の方法は何ですか? 可能であれば
そうでない場合は、何らかの種類のワーカー アクターの回復ワークフローを実装する必要があると思いますか?
前もって感謝します