2016-06-30 6 views
0

これは明らかな質問のように感じますが、答えは私に言います。クラスタ内のすべてのノードでステートフルなサービスのインスタンスを使用するように指定するにはどうすればよいですか。ステートレスサービスでは、インスタンスカウントに-1を使用するのと同じくらい簡単ですが、それはステートフルではサポートされていません。すべてのクラスタノード上のステートフルサービス

私は既存のステートレスWebAPIサービスをステートフルに移行し、Redisキャッシュの使用方法を信頼性の高い辞書に置き換えることができます。これは外部から見ることができ、空白のロードバランサの前で見るサービスなので、すべてのインスタンスでサービスを実行する必要があります。

私には何が欠けていますか?

答えて

1

ステートレスインスタンスは、ステートに影響を与えずに作成および破棄できるため、-1を持つことができます。

ステートフルサービスのパーティション数は動的ではありません。ノード間でデータがどのように分割されるかを決定します。一度Xパーティションを選択すると、自分自身の状態への影響を処理することなく、その番号を変更することはできません。

代替アプローチ:

あなたは、(ゲートウェイとして)ステートレスサービスを追加するすべてのノードでこれを実行し、それらからステートフルサービスのパーティションを呼び出すことができます。

ステートフルサービスを分割するとスケーラビリティが向上します。たとえば、ユーザーグループ/テナント/サブスクリプションレベルなどでパーティション分割することができます。

1

ステートフルなので、1つのノード/ VMにクラスタ内のプライマリと2つのセカンダリレプリカのみが割り当てられます。プライマリは、信頼できる辞書/キューへの読み書きを維持し、レプリカ(トランザクション)を更新します。これがデータの信頼性、可用性、耐久性を維持する方法です。ステートフルサービスから、ステートレスサービスを呼び出してそれらのデータを処理することができます。そして、すべてのstatelesサービス(クラスタ内のすべてのノード/ VMにデプロイされている)がそれらのデータを実行/処理できるようにすることができます。

+0

OK、ここにデザインのシードが表示されます。私はあなたの考えを裏返すと、それがうまくいくと思います。つまり、私は自分のステートレスサービスをそのまま継続し、本質的に私のデータストアである新しいステートフルサービスを作成します。私は私のステートレスサービスから、ローカルで永続化/共有したいデータを読み書きすることを呼びます。ステートレスなサービスにデータを提供するためだけに存在するステートフルなサービスで、信頼できる辞書読み書き呼び出しをラップするだけで済むようになるので、私には過剰な使い方があるように思えますが、動作し、ステートレスなWebApiをすべてのノード。 – BrettRobi

関連する問題