Service Fabric 探测

继续阅读本文之前,请熟悉 Service Fabric 应用程序模型Service Fabric 托管模型。 本文概述了如何使用清单文件定义运行情况探测和就绪情况探测。

运行情况探测

从版本 7.1 开始,Azure Service Fabric 支持容器化和非容器化应用程序的运行状态探测机制。 运行情况探测可帮助报告代码包的运行情况,如果代码包未快速响应,将重启。

就绪情况探测

从 8.2 开始,还支持就绪情况探测。 就绪情况探测用于确定代码包是否已准备好接受流量。 例如,如果容器需要很长时间来处理请求,或者请求队列已满,则代码包将无法再接受流量,因此将删除访问代码包的终结点。

就绪情况探测的行为如下:

  1. 容器/代码包实例启动
  2. 立即发布终结点
  3. 就绪情况探测开始运行
  4. 就绪情况探测最终达到失败阈值,并删除终结点使其不可用
  5. 实例最终准备就绪
  6. 就绪情况探测通知实例已准备就绪,并再次发布终结点
  7. 请求再次路由并成功,因为实例已准备好处理请求

注意

对于就绪情况探测,不会重启代码包,只是不发布终结点,因此副本/分区设置不受影响。

语义

只能为每个代码包指定一个运行情况探测和一个就绪情况探测,并可以使用以下字段控制其行为:

  • type:用于指定探测类型是“运行情况”还是“就绪情况”。 支持的值为“Liveness”或“Readiness”

  • initialDelaySeconds:容器启动后开始执行探测的初始延迟秒数。 支持的值为整数。默认值为 0,最小值为 0。

  • timeoutSeconds:一个时间段(秒),在此时间之后,如果探测未成功完成,则会将其视为失败。 支持的值为整数。默认值为 1,最小值为 1。

  • periodSeconds:用于指定探测频率的时间段(秒)。 支持的值为整数。默认值为 10,最小值为 1。

  • failureThreshold:当达到此值时,容器将重启。 支持的值为整数。默认值为 3,最小值为 1。

  • successThreshold:失败后,若要将探测视为成功,则必须成功运行此值。 支持的值为整数。默认值为 1,最小值为 1。

在任何时刻,最多只能有对一个容器的一个探测。 如果探测未在“timeoutSeconds”中设置的时间内完成,请等待并计算到达“failureThreshold”的时间 。

此外,Service Fabric 还会引发有关“DeployedServicePackage”的以下探测运行状况报告

  • OK:对于“successThreshold”中设置的值,探测成功。

  • Error:容器重启之前,探测“failureCount” == “failureThreshold” 。

  • Warning设置用户帐户 :

    • 探测失败,“failureCount”<“failureThreshold” 。 此运行状况报告会一直进行下去,直至“failureCount”达到在“failureThreshold”或“successThreshold”中设置的值 。
    • 如果失败后成功,警告仍然存在,但会包含更新的续成功。

指定探测

可以在 ApplicationManifest.xml 文件中的“ServiceManifestImport”下指定探测。

探测可用于以下任一情况:

  • 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>

后续步骤

请参阅以下文章,了解相关信息: