2017-03-01 10 views
4

私はオンプレミスでサービスファブリックをテストします。私は多くの失敗シナリオをテストしましたが、そのうちの1つは検証できません。ノードがうまくいくが、アプリケーションがクラッシュしたときのSFの動作例えば、私はステートレスなWeb APIを持っていますし、1回のリクエストの後には失敗しシャットダウンします(ほとんど不可能ですが、それは唯一の仮定です)。 SFはそれについて知らなければならないと、アプリケーションが再起動されなくなるまで同じノードに次の要求では、他のノードでホストされている同じアプリケーションの種類の要求をリダイレクトする必要がありますか?私は正しい?ステートフルでは同じことを行うべきですが、他のノードにリダイレクトするのではなく、レプリカを使用する必要がありますか?サービスファブリックアプリケーション障害時の動作

私は再起動-ServiceFabricDeployedCodePackageを使用してこの例をシミュレートしてみてください、それはおそらく、あまりにも速く再起動だと私は私の仮定を検証することはできません - 私はタイムアウトを取得します。あなたが使用している場合を除き

答えて

2

サービスファブリックサービスへの要求をリダイレクトするという仮定は、一般的に真実ではありません内蔵のリバースプロキシ(あなたが要求URL特定を構築する必要がありますので、あなたがそれを使用している場合、あなたが知っていますよ方法)。ポートエンドポイント:あなたは、あなたのサービスが接続し、IP上で相互に直接通信、内蔵のリバースプロキシを使用していないと仮定すると、

。サービスファブリックは要求パスにありません。サービスファブリックはサービスディスカバリのみを提供します。

SFは、プロセスがクラッシュを検出しました。サービスコードから障害を報告することもできます。このような場合、SFは障害を報告したクラッシュまたはレプリカのプロセスを再開します。別のノードで再起動される可能性があります。ステートフルサービスレプリカは、ほとんどの場合、アクティブなセカンダリをプライマリに昇格できる別のノードにフェールオーバーします。サービスがステートレスであれば、クライアントは新しいサービスエンドポイントを解決するか、別のインスタンスに切り替える責任があります。

+0

あなたの答えてくれてありがとう。これは、高可用性の構成を複雑にします。以前は、ちょうど私がHAProxy(ロードバランサ)をポート19000でノードヘルスチェックを行い、そのノードが生存しているだけでなくSFサービスを実行していることを確認すると考えています。アプリの障害やアップグレードで他のノードにリダイレクトするようなものは、SFによって解決されると思った。 SFでロードバランサのみを使用することは、クライアントにとっては非常に明確です(それらの側のロジック、リバースプロキシ)。私は真夜中にアプリケーションを配備できますが、アプリケーションが失敗したときには小さな作業穴を受け入れる必要があります。 – tom