Azureのサービスファブリッククラスタ(インスタンス数-1)のすべてのノードでホストされるステートレスOwin WebAPIを公開しています。 WebAPIは公共の消費を目的としており、内部サービスやWebAPI自体のアップグレードにもかかわらず、高い可用性を備えている必要があります。クラスタの前にAzureロードバランサ(LB)があり、どのノードがhttpトラフィックを受信できるかを判断するために、5秒ごとにTCPプローブを使用してポート80上のクラスタをプローブします。高可用性サービスファブリックWebApiがAzureでホストされています
WebAPIをアップグレードする際に問題が発生しています。つまり、LBはアップグレード中であるが、まだプローブによってオフラインとして登録されていないノードに向いています。サービスファブリックはアップグレードプロセスをLBと調整しないため、アップグレード中にノードをローテーションから外す可能性はありません(Azure LBにAPIはありません)。
Azureのサービスファブリックで高可用性のHTTPサービスをどのように達成しているのだろうか。誰かが彼らの一般的なアプローチについてコメントしたいと思っています。
私たちはこれについて考えていました。プロセスに送られたCtrl-Cをキャプチャし、プロセスを完全にシャットダウンするのに安全であると判断するのに十分なLBプローブがヘルスエンドポイントに達するのを待つことなど、アップグレード時にシャットダウンプロセスを遅らせる必要があります。また、シャットダウンへの応答が遅いため、プロセスがアプリケーションを警告/エラーにしないように、アップグレードに十分なタイムアウトを設定する必要があります。 –