Sdílet prostřednictvím


Sondy Service Fabric

Než budete pokračovat v tomto článku, seznamte se s aplikačním modelem Service Fabric a modelem hostování Service Fabric. Tento článek obsahuje přehled o tom, jak definovat test aktivity a připravenosti pomocí souborů manifestu.

Sonda živé aktivity

Od verze 7.1 podporuje Azure Service Fabric mechanismus sondy živosti pro kontejnerizované a nekontejnerizované aplikace. Sonda živosti pomáhá hlásit provozuschopnost balíčku s kódem, který se restartuje, pokud nereaguje rychle.

Sonda připravenosti

Od verze 8.2 se podporuje také sonda připravenosti. Sonda připravenosti se používá k rozhodnutí, jestli je balíček kódu připravený přijímat provoz. Například, pokud váš kontejner zpracovává požadavek příliš pomalu, nebo pokud je fronta požadavků plná, váš balíček kódu již nemůže přijmout žádný další provoz, a proto budou koncové body vedoucí k balíčku kódu odebrány.

Chování testu připravenosti je:

  1. Spustí se instance balíčku kontejneru nebo kódu.
  2. Koncové body se publikují okamžitě.
  3. Spustí se sonda připravenosti.
  4. Sonda připravenosti nakonec dosáhne prahové hodnoty selhání a koncový bod se odebere, aby byl nedostupný.
  5. Nakonec se instance připraví.
  6. Sonda připravenosti zjistí, že instance je připravená a znovu publikuje koncový bod.
  7. Požadavky jsou znovu směrovány a jsou úspěšné, protože bylo připraveno je obsloužit.

Poznámka:

V případě testu připravenosti se balíček kódu nerestartuje, pouze koncové body se nepublikují, aby nedošlo k ovlivnění repliky nebo oddílu.

Sémantika

Pro každý balíček kódu můžete zadat pouze jednu sondu živosti a jednu sondu připravenosti a pomocí těchto polí můžete řídit jeho chování.

  • type: Slouží k určení, zda je typ sondy Liveness nebo Readiness. Podporované hodnoty jsou Liveness nebo Readiness

  • initialDelaySeconds: Počáteční prodleva v sekundách ke spuštění sondy po spuštění kontejneru. Podporovaná hodnota je int. Výchozí hodnota je 0 a minimum je 0.

  • timeoutSeconds: Doba v sekundách, po které považujeme sondu za neúspěšnou, pokud se úspěšně nedokončila. Podporovaná hodnota je int. Výchozí hodnota je 1 a minimum je 1.

  • periodSeconds: Doba v sekundách určující frekvenci sondy. Podporovaná hodnota je int. Výchozí hodnota je 10 a minimální hodnota je 1.

  • failureThreshold: Po dosažení této hodnoty se kontejner restartuje. Podporovaná hodnota je int. Výchozí hodnota je 3 a minimum je 1.

  • successThreshold: I v případě selhání je pro to, aby byla sonda považována za úspěšnou, nutné, aby úspěšně proběhla v rámci tohoto parametru. Podporovaná hodnota je int. Výchozí hodnota je 1 a minimum je 1.

V každém okamžiku může existovat maximálně jedna sonda do jednoho kontejneru. Pokud se sonda nedokončí v čase nastaveném v timeoutSeconds, počkejte a připočítejte čas k failureThreshold.

Kromě toho Service Fabric vyvolá následující zdravotní zprávy o stavu pro DeployedServicePackage:

  • OK: Sonda je úspěšná pro hodnotu nastavenou v successThreshold.

  • Error: Chyba probefailureCountThreshold == před restartováním kontejneru.

  • Warning:

    • Sonda selže a failureCount<práh selhání. Tato zdravotní zpráva zůstane, dokud počet selhání nedosáhne hodnoty nastavené v failureThreshold nebo successThreshold.
    • Při úspěchu po selhání zůstane upozornění, ale s aktualizovanými po sobě jdoucími úspěchy.

Určení sondy

Sondu můžete zadat v souboru ApplicationManifest.xml v části ServiceManifestImport.

Sonda může být použita pro kteroukoliv z následujících:

  • HTTP
  • protokol TCP
  • Vykonavatel

Test protokolu HTTP

Pro sondu HTTP odešle Service Fabric požadavek HTTP na port a cestu, kterou zadáte. Návratový kód, který je větší nebo roven 200, a menší než 400 označuje úspěch.

Tady je příklad, jak zadat sondu liveness PROTOKOLU 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>

Sonda HTTP má další vlastnosti, které můžete nastavit:

  • path: Cesta, která se má použít v požadavku HTTP.

  • port: Port, který se má použít pro sondy. Tato vlastnost je povinná. Rozsah je 1 až 65535.

  • scheme: Schéma, které se má použít pro připojení k balíčku kódu. Pokud je tato vlastnost nastavená na HTTPS, ověření certifikátu se přeskočí. Výchozí nastavení je HTTP.

  • httpHeader: Hlavičky, které se mají nastavit v požadavku. Můžete zadat více hlaviček.

  • host: IP adresa hostitele, ke které se chcete připojit.

Poznámka:

Port není podporován pro nekotenerizované aplikace. V tomto scénáři použijte atribut EndpointRef="EndpointName" . Nahraďte "EndpointName" názvem z koncového bodu definovaného v ServiceManifest.xml.

Pokud používáte EndpointRef s koncovým bodem HTTP, atribut scheme je volitelný, protože HTTP je výchozí hodnotou. Pokud používáte EndpointRef s koncovým bodem HTTPS, musíte atribut explicitně nastavit scheme na https.

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

Poznámka:

Sondy HTTPS v Service Fabric nepodporují ověřování klientských certifikátů během TLS handshake. Podrobnosti o procesu handshake najdete v protokolu TLS Handshake Protocol.

Test protokolu TCP

Pro sondu TCP se Service Fabric pokusí otevřít soket v kontejneru pomocí zadaného portu. Pokud může navázat připojení, je sonda považována za úspěšnou. Tady je příklad, jak určit sondu, která používá soket 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>

Sonda Exec

Tato sonda vydá příkaz exec do kontejneru a počká na dokončení příkazu.

Poznámka:

Příkaz Exec přebírá řetězec oddělený čárkami. Příkaz v následujícím příkladu bude fungovat pro kontejner Linuxu. Pokud se pokoušíte testovat kontejner Windows, použijte příkaz 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>

Další kroky

Související informace najdete v následujícím článku: