Service Fabric-Tests

Bevor Sie mit diesem Artikel fortfahren, sollten Sie sich mit dem Service Fabric-Anwendungsmodell und dem Service Fabric-Hostingmodell vertraut machen. Dieser Artikel bietet eine Übersicht über das Definieren eines Livetests und Bereitschaftstests über Manifestdateien.

Livetest

Ab Version 7.1 unterstützt Azure Service Fabric einen Livetestmechanismus für containerisierte und nicht containerisierte Anwendungen. Mit einem Livetest können Sie die Reaktionsfähigkeit eines Codepakets melden, das neu gestartet wird, wenn es nicht schnell antwortet.

Bereitschaftstest

Ab Version 8.2 wird auch der Bereitschaftstest unterstützt. Ein Bereitschaftstest wird verwendet, um zu entscheiden, ob ein Codepaket bereit ist, Datenverkehr zu akzeptieren. Wenn Ihr Container z. B. viel Zeit in Anspruch nimmt, um eine Anfrage zu bearbeiten, oder die Anforderungswarteschlange voll ist, kann Ihr Codepaket keinen Datenverkehr mehr akzeptieren, und daher werden die Endpunkte, um das Codepaket zu erreichen, entfernt.

Der Bereitschaftstest verhält sich folgendermaßen:

  1. Die Container-/Codepaketinstanz wird gestartet.
  2. Endpunkte werden sofort veröffentlicht.
  3. Die Ausführung des Bereitschaftstests wird gestartet.
  4. Der Bereitschaftstest erreicht schließlich den Fehlerschwellenwert, und der Endpunkt wird entfernt, sodass er nicht mehr verfügbar ist.
  5. Die Instanz erreicht schließlich Bereitschaft.
  6. Der Bereitschaftstest erkennt, dass die Instanz bereit ist und veröffentlicht den Endpunkt erneut.
  7. Anforderungen werden erneut weitergeleitet und sind erfolgreich, da die Instanz zum Erfüllen von Anforderungen bereit war.

Hinweis

Beim Bereitschaftstest wird das Codepaket nicht neu gestartet, nur die Veröffentlichung der Endpunkte wird aufgehoben, so dass das Replikat bzw. der festgelegte Partitionssatz nicht beeinträchtigt wird.

Semantik

Sie können nur einen Livetest und einen Bereitschaftstest pro Codepaket angeben und das Verhalten mit den folgenden Feldern steuern:

  • type: Wird verwendet, um anzugeben, ob der Testtyp ein Livetest oder ein Bereitschaftstest ist. Unterstützte Werte sind Liveness (Livetest) und Readiness (Bereitschaftstest).

  • initialDelaySeconds: Anfängliche Verzögerung (in Sekunden) bis zum Starten der Ausführung des Tests, nachdem der Container gestartet wurde. Der unterstützte Wert ist int. Der Standardwert ist 0 und das Minimum ist 0.

  • timeoutSeconds: Zeitraum in Sekunden, nach dem der Test als fehlerhaft betrachtet wird, wenn er nicht erfolgreich abgeschlossen wurde. Der unterstützte Wert ist int. Der Standardwert ist 1 und das Minimum ist 1.

  • periodSeconds: Zeitraum in Sekunden zur Angabe der Häufigkeit des Tests. Der unterstützte Wert ist int. Der Standardwert ist 10 und das Minimum ist 1.

  • failureThreshold: Beim Erreichen dieses Werts wird der Container neu gestartet. Der unterstützte Wert ist int. Der Standardwert ist 3, der Minimalwert ist 1.

  • successThreshold: Bei einem Fehler muss der Test für diesen Wert erfolgreich ausgeführt werden, damit er als erfolgreich angesehen wird. Der unterstützte Wert ist int. Der Standardwert ist 1 und das Minimum ist 1.

Es kann jeweils höchstens ein Test zu einem Container vorhanden sein. Wenn der Test nicht in dem in timeoutSeconds festgelegten Zeitraum abgeschlossen wird, warten Sie, und zählen Sie die Zeit bis failureThreshold.

Außerdem stellt Service Fabric die folgenden Integritätsberichte für DeployedServicePackage für den Test bereit:

  • OK: Der Test ist erfolgreich für den in successThreshold festgelegten Wert.

  • Error: Der Test failureCount == failureThreshold vor dem Neustart des Containers.

  • Warning:

    • Beim Test tritt ein Fehler auf und failureCount<failureThreshold. Dieser Integritätsbericht bleibt so lange bestehen, bis failureCount den in failureThreshold oder successThreshold festgelegten Wert erreicht.
    • Bei erfolgreicher Ausführung nach einem Fehler wird die Warnung beibehalten, jedoch mit aktualisierten aufeinanderfolgenden Erfolgen.

Festlegen eines Tests

Sie können den Test in der Datei „ApplicationManifest.xml“ unter ServiceManifestImport angeben.

Der Test kann für jede der folgenden Möglichkeiten erfolgen:

  • HTTP
  • TCP
  • Exec

HTTP-Test

Für den HTTP-Test sendet Service Fabric eine HTTP-Anforderung an den angegebenen Port und Pfad. Ein Rückgabecode, der größer oder gleich 200 ist und kleiner als 400 ist, gibt den Erfolg an.

Hier ist ein Beispiel für die Angabe eines HTTP-Liveness-Prüfpunkts:

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

Der HTTP-Test weist zusätzliche Eigenschaften auf, die Sie festlegen können:

  • path: Pfad für die HTTP-Anforderung.

  • port: Port für Tests. Diese Eigenschaft ist obligatorisch. Der Bereich liegt zwischen 1 und 65535.

  • scheme: Schema zum Herstellen einer Verbindung mit dem Codepaket. Wenn diese Eigenschaft auf „HTTPS“ festgelegt ist, wird die Zertifikatüberprüfung übersprungen. Die Standardeinstellung ist „HTTP“.

  • httpHeader: Header, die in der Anforderung festgelegt werden sollen. Sie können mehrere Header angeben.

  • host: Host-IP-Adresse für die Verbindung.

Hinweis

Port wird für nicht containerisierte Anwendungen nicht unterstützt. Verwenden Sie für dieses Szenario das Attribut "EndpointRef="EndpointName" . Ersetzen Sie „EndpointName“ durch den Namen des in ServiceManifest.xml definierten Endpunkts.

Wenn Sie EndpointRef mit einem HTTP-Endpunkt verwenden, ist das Attribut scheme optional, da HTTP der Standard ist. Wenn Sie EndpointRef mit einem HTTPS-Endpunkt verwenden, müssen Sie das Attribut scheme explizit auf "https" festlegen.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Readiness" FailureThreshold="10" SuccessThreshold="2" InitialDelaySeconds="600" PeriodSeconds="60" TimeoutSeconds="20">
            <HttpGet Path="/" EndpointRef="ServiceEndpoint" Scheme="https">
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Hinweis

Service Fabric HTTPS-Überprüfungen unterstützen die Authentifizierung mit Clientzertifikaten während des TLS-Handshakes nicht. Ausführliche Informationen zum Handshake-Prozess finden Sie im TLS Handshake-Protokoll.

TCP-Test

Bei TCP-Tests versucht Service Fabric, einen Socket für den Container über den angegebenen Port zu öffnen. Wenn eine Verbindung hergestellt werden kann, wird der Test als erfolgreich betrachtet. Hier ist ein Beispiel für die Angabe eines Tests, der einen TCP-Socket verwendet:

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

Bei diesem Test wird ein exec-Befehl in den Container ausgegeben und auf den Abschluss des Befehls gewartet.

Hinweis

Der exec-Befehl nimmt eine durch Kommas getrennte Zeichenfolge entgegen. Der Befehl im folgenden Beispiel funktioniert mit einem Linux-Container. Wenn Sie Windows-Container testen möchten, verwenden Sie 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>

Nächste Schritte

Verwandte Informationen finden Sie im folgenden Artikel: