共用方式為


Service Fabric 探查

繼續本文之前,建議您先熟悉 Service Fabric 應用程式模型Service Fabric 主控模型。 本文概述如何使用資訊清單檔案來定義活躍度及整備度探查。

活躍度探查

自版本 7.1 起,Azure Service Fabric 支援容器化及非容器化應用程式的活躍度探查機制。 活躍度探查有助於報告程式碼封裝的活躍度,若未快速回應,將會重新啟動。

整備度探查

自 8.2 起,系統也支援整備度探查。 整備度探查可用於決定程式碼封裝是否已準備好接受流量。 例如,若容器處理要求的時間較長或要求佇列已滿,程式碼封裝便無法再接受流量,因此取得程式碼封裝的端點將會移除。

整備度探查的行為如下:

  1. 容器/程式碼封裝執行個體啟動
  2. 端點會立即發佈
  3. 整備度探查開始執行
  4. 整備度探查最終達到失敗閾值,並移除端點使其無法使用
  5. 執行個體最終轉為就緒
  6. 整備度探查通知執行個體已就緒,並再次發佈端點
  7. 要求已準備好服務要求,因此再次路由傳送且成功

注意

若為整備度探查,程式碼封裝不會重新啟動,而只會解除發佈端點,因此不會影響複本/分割集。

語意

各程式碼封裝僅可指定一個活躍度及一個整備度探查,並可使用這些欄位來控制行為:

  • type:用於將探查類型指定為活躍度或整備度。 支援的值為活躍度整備度

  • initialDelaySeconds:容器啟動後開始執行探查的初始延遲 (以秒為單位)。 支援的值為 int。預設值為 0,最小值為 0。

  • timeoutSeconds:當探查未順利完成,將其視為失敗前的期間 (以秒為單位)。 支援的值為 int。預設值為 1,最小值為 1。

  • periodSeconds:指定探查頻率的期間 (以秒為單位)。 支援的值為 int。預設值為 10,最小值為 1。

  • failureThreshold:達到此值時容器將重新啟動。 支援的值為 int。預設值為 3,最小值為 1。

  • successThreshold:探查失敗時,若要將視為成功則須成功執行此值。 支援的值為 int。預設值為 1,最小值為 1。

最多一律可針對一個容器進行一項探查。 若探查未在 timeoutSeconds 中設定的時間內完成,請等待並計算 failureThreshold 的時間。

此外,Service Fabric 也會於 DeployedServicePackage 提出下列探查健全狀態報告

  • OK:若為 successThreshold 中設定的值,探查便會成功。

  • Error:容器重新啟動前的探查failureCount == failureThreshold

  • Warning

    • 探查失敗且 failureCount<failureThreshold。 此健全狀態報告會保留至 failureCount 達到 failureThresholdsuccessThreshold 中的設定值為止。
    • 當失敗後再成功,警告將保留,但會連續性更新成功訊息。

指定探查

您可在 ServiceManifestImport下的 ApplicationManifest.xml 檔案中指定探查。

探查可為下列其中一項:

  • HTTP
  • TCP
  • Exec

HTTP 探查

若為 HTTP 探查,Service Fabric 會將 HTTP 要求傳送至指定的連接埠和路徑。 若傳回碼大於等於 200 且小於 400,則表示成功。

以下範例示範如何指定 HTTP 活躍度探查:

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <HttpGet Path="/" Port="8081" Scheme="http">
              <HttpHeader Name="Foo" Value="Val"/>
              <HttpHeader Name="Bar" Value="val1"/>
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

HTTP 探查有其他可設定的屬性:

  • path:用於 HTTP 要求的路徑。

  • port:用於探查的連接埠。 這項內容是強制的。 範圍是 1 到 65535。

  • scheme:用於連線至程式碼封裝的配置。 若將此屬性設為 HTTPS,則會略過憑證驗證。 預設設定為 HTTP。

  • httpHeader:要設定的要求標頭。 您可指定多個標頭。

  • host:要連接的主機 IP 位址。

注意

非容器化應用程式不支援埠和配置。 在此案例中,請使用 EndpointRef=“EndpointName” 屬性。 將 『EndpointName』 取代為 ServiceManifest.xml中所定義端點的名稱。

TCP 探查

若為 TCP 探查,Service Fabric 將嘗試使用指定連接埠在容器上開啟通訊端。 若可建立連線,探查便會視為成功。 以下範例示範如何指定使用 TCP 通訊端的探查:

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <TcpSocket Port="8081"/>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Exec 探查

此探查會將 exec 命令發送至容器,並等待命令完成。

注意

Exec 命令接受以逗號分隔的字串。 下列範例中的命令可適用於 Linux 容器。 若要嘗試探查 Windows 容器,請使用 cmd

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <Exec>
              <Command>ping,-c,2,localhost</Command>
            </Exec>
          </Probe>        
       </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

下一步

請參閱下列文章,取得相關資訊: