0

Ignite のロード バランサー (RoundRobinGlobalLoadBalancer など) は、N 個のクライアント ノードがあり、サーバー ノードが 1 つしかない場合、サーバー ノードのバウンスを処理しません。唯一のサーバー ノードの EVT_NODE_FAILED、EVT_NODE_JOINED、EVT_NODE_LEFT イベントをポスト/処理する他のサーバー ノードがないため、問題が存在します。したがって、以下のコード スニペットに示すように、一部のクライアント ノードがリモート プロキシを使用している場合

public <T> T locate(String serviceName, Class<T> serviceClass) { return ignite.services().serviceProxy(serviceName, serviceClass, false); }

サーバー ノードがバウンスされた後、プロキシを使用しようとすると失敗します。つまり、IgniteException "Task topology does not have alive nodes" です。

上記のトポロジ (サーバー ノードが 1 つ) でこの問題を解決するには、IgniteConfiguration でカスタムの「loadBalancingSpi」を指定する必要があります。これは RoundRobinGlobalLoadBalancer の固定バージョンを使用しています。固定バランサーのコードでは、クライアント ノードに送信される EVT_CLIENT_NODE_RECONNECTED にもサブスクライブしています。このようにして、ノードのスナップショットが、バウンスされているサーバー ノードの UUID で更新されるようにします。

これを解決する簡単な方法があるかどうか誰かが知っていますか?

4

1 に答える 1

0

サービス プロキシは、クロージャの実行前に特定のノードに手動でマッピングされるため、ロード バランサをまったく通過しないでください。これは master ブランチで既に修正されており、シナリオはそこで機能します。

ロード バランサーのノード スナップショットに関しては、問題があることは確かです。これに対するチケットは次のとおりです: https://issues.apache.org/jira/browse/IGNITE-2975

于 2016-04-11T23:14:05.840 に答える