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 aktivity pro kontejnerizaci a nekotenerizované aplikace. Sonda živé aktivity pomáhá hlásit liveness balíčku kódu, 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. Pokud například zpracování požadavku trvá příliš dlouho nebo pokud je fronta požadavků plná, balíček kódu už nemůže přijmout provoz a koncové body, které se dostanou k balíčku kódu, se odeberou.

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. Instance se nakonec stane připravenou.
  6. Sonda připravenosti zjistí, že instance je připravená a znovu publikuje koncový bod.
  7. Požadavky se znovu směrují a uspěly, protože byly připravené k obsluhě požadavků.

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 živou hodnotu a jednu sondu připravenosti a pomocí těchto polí můžete řídit její 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: Při selhání se sonda považuje za úspěšnou, musí pro tuto hodnotu proběhnout úspěšně. 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 časové sadě v časových limitechSeconds, počkejte a spočítejte čas směrem k chyběThreshold.

Kromě toho Service Fabric vyvolá následující sestavy stavu sondy v DeployedServicePackage:

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

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

  • Warning:

    • Sonda selže a chyba failureCountThreshold<. Tato sestava stavu 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 pro některou z následujících možností:

  • HTTP
  • 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 a schéma nejsou podporovány 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.

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: