Udostępnij za pośrednictwem


Sondy usługi Service Fabric

Zanim przejdziesz do tego artykułu, zapoznaj się z modelem aplikacji usługi Service Fabric i modelem hostingu usługi Service Fabric. Ten artykuł zawiera omówienie sposobu definiowania sondy gotowości i aktualności przy użyciu plików manifestu.

Sonda liveness

Począwszy od wersji 7.1, usługa Azure Service Fabric obsługuje mechanizm sondy na żywo dla konteneryzowania i niekontenerowanych aplikacji. Sonda aktualności pomaga zgłosić żywość pakietu kodu, który zostanie uruchomiony ponownie, jeśli nie odpowie szybko.

Sonda gotowości

Począwszy od wersji 8.2, sonda gotowości jest również obsługiwana. Sonda gotowości służy do decydowania, czy pakiet kodu jest gotowy do akceptowania ruchu. Jeśli na przykład przetwarzanie żądania przez kontener trwa długo lub jeśli kolejka żądań jest pełna, pakiet kodu nie może już akceptować ruchu, a tym samym punkty końcowe, które mają uzyskać dostęp do pakietu kodu, zostaną usunięte.

Zachowanie sondy gotowości jest następujące:

  1. Uruchamia się wystąpienie pakietu kontenera/kodu
  2. Punkty końcowe są natychmiast publikowane
  3. Sonda gotowości uruchamia się
  4. Sonda gotowości ostatecznie osiągnie próg niepowodzenia, a punkt końcowy zostanie usunięty, co czyni go niedostępnym
  5. Wystąpienie ostatecznie stanie się gotowe
  6. Sonda gotowości zauważa, że wystąpienie jest gotowe i ponownie publikuje punkt końcowy
  7. Żądania są ponownie kierowane i kończą się powodzeniem, ponieważ było gotowe do obsługi żądań

Uwaga

W przypadku sondy gotowości pakiet kodu nie jest ponownie uruchamiany, tylko punkty końcowe są nieopublikowane, więc zestaw repliki/partycji nie ma wpływu.

semantyka

Można określić tylko jedną akcję i jedną sondę gotowości na pakiet kodu i kontrolować jego zachowanie przy użyciu następujących pól:

  • type: służy do określania, czy typ sondy to Liveness czy Readiness. Obsługiwane wartości to Liveness lub Readiness

  • initialDelaySeconds: początkowe opóźnienie w sekundach rozpoczęcia wykonywania sondy po uruchomieniu kontenera. Obsługiwana wartość to int. Wartość domyślna to 0, a wartość minimalna to 0.

  • timeoutSeconds: okres w sekundach, po którym rozważamy sondę jako nieudaną, jeśli nie zakończyła się pomyślnie. Obsługiwana wartość to int. Wartość domyślna to 1, a wartość minimalna to 1.

  • periodSeconds: okres w sekundach określający częstotliwość sondy. Obsługiwana wartość to int. Wartość domyślna to 10, a wartość minimalna to 1.

  • failureThreshold: Po osiągnięciu tej wartości kontener zostanie uruchomiony ponownie. Obsługiwana wartość to int. Wartość domyślna to 3, a wartość minimalna to 1.

  • successThreshold: W przypadku niepowodzenia, aby sonda została uznana za pomyślną, musi zostać pomyślnie uruchomiona dla tej wartości. Obsługiwana wartość to int. Wartość domyślna to 1, a wartość minimalna to 1.

W każdej chwili może istnieć co najwyżej jedna sonda do jednego kontenera. Jeśli sonda nie zakończy się w czasie ustawionym w limitach czasuSeconds, zaczekaj i zlicz czas w kierunku błęduThreshold.

Ponadto usługa Service Fabric zgłosi następujące raporty kondycji sondy w temacie DeployedServicePackage:

  • OK: Sonda powiedzie się dla wartości ustawionej w elemecie successThreshold.

  • Error: Błąd sondyWykonanie == błęduThreshold przed ponownym uruchomieniem kontenera.

  • Warning:

    • Sonda kończy się niepowodzeniem i niepowodzenieMłoKonta<awariiThreshold. Ten raport kondycji pozostaje do momentu osiągnięcia wartości ustawionej w parametrze failureThreshold lub successThreshold.
    • W przypadku powodzenia po niepowodzeniu ostrzeżenie pozostaje, ale z zaktualizowanymi kolejnymi sukcesami.

Określanie sondy

Sondę można określić w pliku ApplicationManifest.xml w obszarze ServiceManifestImport.

Sonda może być dla dowolnego z następujących elementów:

  • HTTP
  • TCP
  • Exec

Sonda HTTP

W przypadku sondy HTTP usługa Service Fabric wyśle żądanie HTTP do określonego portu i ścieżki. Zwracany kod, który jest większy lub równy 200 i mniejszy niż 400, wskazuje powodzenie.

Oto przykład sposobu określania sondy liveness PROTOKOŁU 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 ma dodatkowe właściwości, które można ustawić:

  • path: ścieżka do użycia w żądaniu HTTP.

  • port: port do użycia dla sond. Ta właściwość jest obowiązkowa. Zakres wynosi od 1 do 65535.

  • scheme: schemat używany do nawiązywania połączenia z pakietem kodu. Jeśli ta właściwość ma wartość HTTPS, weryfikacja certyfikatu zostanie pominięta. Ustawieniem domyślnym jest HTTP.

  • httpHeader: nagłówki do ustawienia w żądaniu. Można określić wiele nagłówków.

  • host: adres IP hosta do nawiązania połączenia.

Uwaga

Port i schemat nie są obsługiwane w przypadku aplikacji niekontenerowanych. W tym scenariuszu użyj atrybutu EndpointRef="EndpointName". Zastąp ciąg "EndpointName" nazwą z punktu końcowego zdefiniowanego w ServiceManifest.xml.

Sonda TCP

W przypadku sondy TCP usługa Service Fabric spróbuje otworzyć gniazdo w kontenerze przy użyciu określonego portu. Jeśli może nawiązać połączenie, sonda zostanie uznana za pomyślną. Oto przykład sposobu określania sondy korzystającej z gniazda 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

Ta sonda wyda polecenie exec do kontenera i zaczeka na zakończenie polecenia.

Uwaga

Polecenie Exec przyjmuje ciąg rozdzielony przecinkami. Polecenie w poniższym przykładzie będzie działać dla kontenera systemu Linux. Jeśli próbujesz sondować kontener systemu Windows, użyj polecenia 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>

Następne kroki

Aby uzyskać powiązane informacje, zobacz następujący artykuł: