Service Fabric 探查
繼續本文之前,建議您先熟悉 Service Fabric 應用程式模型和 Service Fabric 主控模型。 本文概述如何使用資訊清單檔案來定義活躍度及整備度探查。
活躍度探查
自版本 7.1 起,Azure Service Fabric 支援容器化及非容器化應用程式的活躍度探查機制。 活躍度探查有助於報告程式碼封裝的活躍度,若未快速回應,將會重新啟動。
整備度探查
自 8.2 起,系統也支援整備度探查。 整備度探查可用於決定程式碼封裝是否已準備好接受流量。 例如,若容器處理要求的時間較長或要求佇列已滿,程式碼封裝便無法再接受流量,因此取得程式碼封裝的端點將會移除。
整備度探查的行為如下:
- 容器/程式碼封裝執行個體啟動
- 端點會立即發佈
- 整備度探查開始執行
- 整備度探查最終達到失敗閾值,並移除端點使其無法使用
- 執行個體最終轉為就緒
- 整備度探查通知執行個體已就緒,並再次發佈端點
- 要求已準備好服務要求,因此再次路由傳送且成功
注意
若為整備度探查,程式碼封裝不會重新啟動,而只會解除發佈端點,因此不會影響複本/分割集。
語意
各程式碼封裝僅可指定一個活躍度及一個整備度探查,並可使用這些欄位來控制行為:
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 達到 failureThreshold 或 successThreshold 中的設定值為止。
- 當失敗後再成功,警告將保留,但會連續性更新成功訊息。
指定探查
您可在 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>
下一步
請參閱下列文章,取得相關資訊: