Delen via


Service Fabric-tests

Voordat u verdergaat met dit artikel, moet u vertrouwd raken met het Service Fabric-toepassingsmodel en het Service Fabric-hostingmodel. Dit artikel bevat een overzicht van het definiëren van een liveness- en gereedheidstest met behulp van manifestbestanden.

Livenesstest

Vanaf versie 7.1 biedt Azure Service Fabric ondersteuning voor een livenesstestmechanisme voor containertoepassingen en niet-containertoepassingen. Een livenesstest helpt bij het rapporteren van de liveness van een codepakket, dat opnieuw wordt opgestart als het niet snel reageert.

Gereedheidstest

Vanaf 8.2 wordt de gereedheidstest ook ondersteund. Er wordt een gereedheidstest gebruikt om te bepalen of een codepakket gereed is om verkeer te accepteren. Als het bijvoorbeeld lang duurt voordat uw container de aanvraag verwerkt of als de aanvraagwachtrij vol is, kan uw codepakket geen verkeer meer accepteren en worden de eindpunten om het codepakket te bereiken verwijderd.

Het gedrag van de gereedheidstest is:

  1. Het container-/codepakketexemplaren wordt gestart
  2. Eindpunten worden onmiddellijk gepubliceerd
  3. Gereedheidstest wordt uitgevoerd
  4. De gereedheidstest bereikt uiteindelijk de drempelwaarde voor fouten en het eindpunt wordt verwijderd, waardoor deze niet beschikbaar is
  5. Exemplaar wordt uiteindelijk gereed
  6. Gereedheidstest ziet dat het exemplaar gereed is en het eindpunt opnieuw publiceert
  7. Aanvragen worden opnieuw gerouteerd en geslaagd omdat deze gereed waren om aanvragen te verwerken

Notitie

Voor de gereedheidstest wordt het codepakket niet opnieuw opgestart, maar alleen de eindpunten worden niet gepubliceerd, zodat de replica/partitie die is ingesteld, niet wordt beïnvloed.

Semantiek

U kunt slechts één levensduur en één gereedheidstest per codepakket opgeven en het gedrag ervan beheren met behulp van deze velden:

  • type: Wordt gebruikt om op te geven of het testtype liveness of gereedheid is. Ondersteunde waarden zijn liveness of gereedheid

  • initialDelaySeconds: De initiële vertraging in seconden om de test uit te voeren nadat de container is gestart. De ondersteunde waarde is int. De standaardwaarde is 0 en het minimum is 0.

  • timeoutSeconds: De periode in seconden waarna we de test beschouwen als mislukt, als deze niet is voltooid. De ondersteunde waarde is int. De standaardwaarde is 1 en het minimum is 1.

  • periodSeconds: De periode in seconden om de frequentie van de test op te geven. De ondersteunde waarde is int. De standaardwaarde is 10 en het minimum is 1.

  • failureThreshold: Wanneer deze waarde wordt bereikt, wordt de container opnieuw opgestart. De ondersteunde waarde is int. De standaardwaarde is 3 en het minimum is 1.

  • successThreshold: Bij een fout moet de test worden uitgevoerd voor deze waarde om als geslaagd te worden beschouwd. De ondersteunde waarde is int. De standaardwaarde is 1 en het minimum is 1.

Er kan op elk moment één test naar één container zijn. Als de test niet is voltooid in de tijd die is ingesteld in time-outSeconds, wacht u en telt u de tijd voor de failureThreshold.

Daarnaast genereert Service Fabric de volgende teststatusrapporten over DeployedServicePackage:

  • OK: De test slaagt voor de waarde die is ingesteld in successThreshold.

  • Error: De foutCount-testfoutThreshold == , voordat de container opnieuw wordt opgestart.

  • Warning:

    • De test mislukt en failureCount<failureThreshold. Dit statusrapport blijft behouden tot failureCount de waarde bereikt die is ingesteld in failureThreshold of successThreshold.
    • Bij succes na mislukking blijft de waarschuwing behouden, maar met bijgewerkte opeenvolgende successen.

Een test opgeven

U kunt een test opgeven in het ApplicationManifest.xml-bestand onder ServiceManifestImport.

De test kan voor een van de volgende zaken zijn:

  • HTTP
  • TCP
  • Exec

HTTP-test

Voor een HTTP-test verzendt Service Fabric een HTTP-aanvraag naar de poort en het pad dat u opgeeft. Een retourcode die groter is dan of gelijk is aan 200 en kleiner dan 400, geeft aan dat de code is geslaagd.

Hier volgt een voorbeeld van het opgeven van een HTTP-livenesstest:

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

De HTTP-test heeft aanvullende eigenschappen die u kunt instellen:

  • path: het pad dat moet worden gebruikt in de HTTP-aanvraag.

  • port: De poort die moet worden gebruikt voor tests. Deze eigenschap is verplicht. Het bereik is 1 tot 65535.

  • scheme: Het schema dat moet worden gebruikt om verbinding te maken met het codepakket. Als deze eigenschap is ingesteld op HTTPS, wordt de certificaatverificatie overgeslagen. De standaardinstelling is HTTP.

  • httpHeader: De headers die moeten worden ingesteld in de aanvraag. U kunt meerdere headers opgeven.

  • host: het IP-adres van de host waarmee verbinding moet worden gemaakt.

Notitie

Poort en schema worden niet ondersteund voor niet-containertoepassingen. Gebruik voor dit scenario het kenmerk EndpointRef="EndpointName" . Vervang EndpointName door de naam van het eindpunt dat is gedefinieerd in ServiceManifest.xml.

TPC-test

Voor een TCP-test probeert Service Fabric een socket op de container te openen met behulp van de opgegeven poort. Als deze verbinding tot stand kan brengen, wordt de test beschouwd als geslaagd. Hier volgt een voorbeeld van het opgeven van een test die gebruikmaakt van een TCP-socket:

  <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

Met deze test wordt een exec-opdracht in de container uitgevoerd en wordt gewacht totdat de opdracht is voltooid.

Notitie

De exec-opdracht maakt een door komma's gescheiden tekenreeks. De opdracht in het volgende voorbeeld werkt voor een Linux-container. Als u een Windows-container wilt testen, gebruikt u 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>

Volgende stappen

Zie het volgende artikel voor verwante informatie: