Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Wdrażanie bez przestojów dla rozszerzenia Durable Functions

Niezawodny model wykonywania rozszerzenia Durable Functions wymaga, aby aranżacje były deterministyczne, co stanowi dodatkowe wyzwanie, które należy wziąć pod uwagę podczas wdrażania aktualizacji. Jeśli wdrożenie zawiera zmiany w sygnaturach funkcji działania lub logice orkiestratora, wystąpienia orkiestracji w locie kończą się niepowodzeniem. Ta sytuacja jest szczególnie problemem w przypadku wystąpień długotrwałych aranżacji, które mogą reprezentować godziny lub dni pracy.

Aby zapobiec wystąpieniu tych błędów, dostępne są dwie opcje:

  • Opóźnij wdrożenie do momentu ukończenia wszystkich uruchomionych wystąpień aranżacji.
  • Upewnij się, że wszystkie uruchomione wystąpienia orkiestracji używają istniejących wersji funkcji.

Poniższy wykres porównuje trzy główne strategie, aby osiągnąć wdrożenie bez przestojów dla rozszerzenia Durable Functions:

Strategia Kiedy używać Plusy Minusy
Przechowywanie wersji Aplikacje, które nie doświadczają częstych zmian powodujących niezgodność. Proste do zaimplementowania. Zwiększono rozmiar aplikacji funkcji w pamięci i liczbie funkcji.
Duplikowanie kodu.
Sprawdzanie stanu z miejscem System, który nie ma długotrwałych aranżacji trwających dłużej niż 24 godziny lub często nakładających się aranżacji. Prosta baza kodu.
Nie wymaga dodatkowego zarządzania aplikacjami funkcji.
Wymaga dodatkowego konta magazynu lub zarządzania centrum zadań.
Wymaga okresów czasu, gdy nie są uruchomione żadne aranżacje.
Routing aplikacji System, który nie ma okresów czasu, gdy aranżacje nie są uruchomione, takie jak te okresy z aranżacjami, które trwają dłużej niż 24 godziny lub często nakładające się aranżacje. Obsługuje nowe wersje systemów z ciągłym uruchamianiem aranżacji, które mają zmiany powodujące niezgodność. Wymaga inteligentnego routera aplikacji.
Może maksymalnie użyć liczby aplikacji funkcji dozwolonych przez subskrypcję. Ustawieniem domyślnym jest 100.

W pozostałej części tego dokumentu opisano te strategie bardziej szczegółowo.

Uwaga

Opisy tych strategii wdrażania bez przestojów zakładają, że używasz domyślnego dostawcy usługi Azure Storage dla rozszerzenia Durable Functions. Wskazówki mogą nie być odpowiednie, jeśli używasz dostawcy magazynu innego niż domyślny dostawca usługi Azure Storage. Aby uzyskać więcej informacji na temat różnych opcji dostawcy magazynu i ich porównywania, zobacz dokumentację dostawców magazynu Durable Functions.

Wersje

Zdefiniuj nowe wersje funkcji i pozostaw stare wersje w aplikacji funkcji. Jak widać na diagramie, wersja funkcji staje się częścią jej nazwy. Ponieważ poprzednie wersje funkcji są zachowywane, wystąpienia orkiestracji w locie mogą nadal się do nich odwoływać. Tymczasem żądania dotyczące nowych wystąpień aranżacji wywołają najnowszą wersję, do której może odwoływać się funkcja klienta aranżacji z ustawienia aplikacji.

Strategia przechowywania wersji

W tej strategii należy skopiować każdą funkcję, a jej odwołania do innych funkcji muszą zostać zaktualizowane. Możesz ułatwić pisanie skryptu. Oto przykładowy projekt ze skryptem migracji.

Uwaga

Ta strategia używa miejsc wdrożenia, aby uniknąć przestojów podczas wdrażania. Aby uzyskać bardziej szczegółowe informacje na temat tworzenia i używania nowych miejsc wdrożenia, zobacz Miejsca wdrożenia usługi Azure Functions.

Sprawdzanie stanu z miejscem

Gdy bieżąca wersja aplikacji funkcji jest uruchomiona w miejscu produkcyjnym, wdróż nową wersję aplikacji funkcji w miejscu przejściowym. Przed zamianą miejsc produkcyjnych i przejściowych sprawdź, czy istnieją uruchomione wystąpienia orkiestracji. Po zakończeniu wszystkich wystąpień aranżacji możesz wykonać zamianę. Ta strategia działa w przypadku przewidywalnych okresów, gdy nie są w locie żadne wystąpienia orkiestracji. Jest to najlepsze podejście, gdy aranżacje nie są długotrwałe, a wykonywanie aranżacji nie nakłada się często.

Konfiguracja aplikacji funkcji

Aby skonfigurować ten scenariusz, wykonaj poniższą procedurę.

  1. Dodaj miejsca wdrożenia do aplikacji funkcji na potrzeby przemieszczania i produkcji.

  2. Dla każdego miejsca ustaw ustawienie aplikacji AzureWebJobsStorage na połączenie udostępnionego konta magazynu. To połączenie konta magazynu jest używane przez środowisko uruchomieniowe usługi Azure Functions do bezpiecznego przechowywania kluczy dostępu funkcji. W przypadku najwyższego poziomu zabezpieczeń należy użyć połączenia tożsamości zarządzanej z kontem magazynu.

  3. Dla każdego miejsca utwórz nowe ustawienie aplikacji, na przykład DurableManagementStorage. Ustaw jej wartość na parametry połączenia różnych kont magazynu. Te konta magazynu są używane przez rozszerzenie Durable Functions do niezawodnego wykonywania. Użyj oddzielnego konta magazynu dla każdego miejsca. Nie oznaczaj tego ustawienia jako ustawienia miejsca wdrożenia. Ponownie połączenia oparte na tożsamościach zarządzanych są najbezpieczniejsze.

  4. W sekcji durableTask pliku host.json aplikacji funkcji określ connectionStringName (Durable 2.x) lub azureStorageConnectionStringName (Durable 1.x) jako nazwę ustawienia aplikacji utworzonego w kroku 3.

Na poniższym diagramie przedstawiono opisaną konfigurację miejsc wdrożenia i kont magazynu. W tym potencjalnym scenariuszu wdrażania wstępnego wersja 2 aplikacji funkcji jest uruchomiona w miejscu produkcyjnym, a wersja 1 pozostaje w miejscu przejściowym.

Miejsca wdrożenia i konta magazynu

przykłady host.json

Poniższe fragmenty JSON to przykłady ustawienia parametry połączenia w pliku host.json.

Functions 2.0

{
  "version": 2.0,
  "extensions": {
    "durableTask": {
      "hubName": "MyTaskHub",
      "storageProvider": {
        "connectionStringName": "DurableManagementStorage"
      }
    }
  }
}

Functions w wersji 1.x

{
  "durableTask": {
    "azureStorageConnectionStringName": "DurableManagementStorage"
  }
}

Konfiguracja potoku ciągłej integracji/ciągłego wdrażania

Skonfiguruj potok ciągłej integracji/ciągłego wdrażania, aby był wdrażany tylko wtedy, gdy aplikacja funkcji nie ma oczekujących lub uruchomionych wystąpień aranżacji. W przypadku korzystania z usługi Azure Pipelines możesz utworzyć funkcję sprawdzającą te warunki, jak w poniższym przykładzie:

[FunctionName("StatusCheck")]
public static async Task<IActionResult> StatusCheck(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestMessage req,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    var runtimeStatus = new List<OrchestrationRuntimeStatus>();

    runtimeStatus.Add(OrchestrationRuntimeStatus.Pending);
    runtimeStatus.Add(OrchestrationRuntimeStatus.Running);

    var result = await client.ListInstancesAsync(new OrchestrationStatusQueryCondition() { RuntimeStatus = runtimeStatus }, CancellationToken.None);
    return (ActionResult)new OkObjectResult(new { HasRunning = result.DurableOrchestrationState.Any() });
}

Następnie skonfiguruj bramę przemieszczania tak, aby czekała, aż nie będą uruchomione żadne aranżacje. Aby uzyskać więcej informacji, zobacz Release deployment control using gates (Kontrola wdrażania wydania przy użyciu bram)

Brama wdrożenia

Usługa Azure Pipelines sprawdza aplikację funkcji pod kątem uruchamiania wystąpień orkiestracji przed rozpoczęciem wdrażania.

Brama wdrożenia (uruchomiona)

Teraz nowa wersja aplikacji funkcji powinna zostać wdrożona w miejscu przejściowym.

Miejsce przejściowe

Na koniec zamień miejsca.

Ustawienia aplikacji, które nie są oznaczone jako ustawienia miejsca wdrożenia, są również zamieniane, więc aplikacja w wersji 2 przechowuje odwołanie do konta magazynu A. Ponieważ stan aranżacji jest śledzony na koncie magazynu, wszystkie aranżacje uruchomione w aplikacji w wersji 2 będą nadal działać w nowym miejscu bez przerwy.

Miejsce wdrożenia

Aby użyć tego samego konta magazynu dla obu miejsc, możesz zmienić nazwy centrów zadań. W takim przypadku musisz zarządzać stanem miejsc i ustawienia HubName aplikacji. Aby dowiedzieć się więcej, zobacz Centra zadań w usłudze Durable Functions.

Marszruta zgłoszenia

Ta strategia jest najbardziej złożona. Można go jednak używać w przypadku aplikacji funkcji, które nie mają czasu między uruchamianiem aranżacji.

W przypadku tej strategii należy utworzyć router aplikacji przed usługą Durable Functions. Ten router można zaimplementować za pomocą rozszerzenia Durable Functions. Router ponosi odpowiedzialność za:

  • Wdróż aplikację funkcji.
  • Zarządzanie wersją rozszerzenia Durable Functions.
  • Kierowanie żądań orkiestracji do aplikacji funkcji.

Przy pierwszym odebraniu żądania orkiestracji router wykonuje następujące zadania:

  1. Tworzy nową aplikację funkcji na platformie Azure.
  2. Wdraża kod aplikacji funkcji w nowej aplikacji funkcji na platformie Azure.
  3. Przekazuje żądanie orkiestracji do nowej aplikacji.

Router zarządza stanem, w którym wersja kodu aplikacji jest wdrażana na platformie Azure.

Routing aplikacji (po raz pierwszy)

Router kieruje żądania wdrożenia i aranżacji do odpowiedniej aplikacji funkcji na podstawie wersji wysłanej z żądaniem. Ignoruje wersję poprawki.

Podczas wdrażania nowej wersji aplikacji bez zmiany powodującej niezgodność można zwiększać wersję poprawki. Router wdraża w istniejącej aplikacji funkcji i wysyła żądania dotyczące starych i nowych wersji kodu, które są kierowane do tej samej aplikacji funkcji.

Routing aplikacji (brak zmian powodujących niezgodność)

Podczas wdrażania nowej wersji aplikacji ze zmianą powodującą niezgodność można zwiększać wersję główną lub pomocniczą. Następnie router aplikacji tworzy nową aplikację funkcji na platformie Azure, wdraża ją i kieruje do niej żądania nowej wersji aplikacji. Na poniższym diagramie uruchomiono aranżacje w wersji 1.0.1 aplikacji, ale żądania dotyczące wersji 1.1.0 są kierowane do nowej aplikacji funkcji.

Routing aplikacji (zmiana powodująca niezgodność)

Router monitoruje stan aranżacji w wersji 1.0.1 i usuwa aplikacje po zakończeniu wszystkich aranżacji.

Ustawienia magazynu śledzenia

Każda aplikacja funkcji powinna używać oddzielnych kolejek planowania, na przykład na oddzielnych kontach magazynu. Jeśli chcesz wykonywać zapytania dotyczące wszystkich wystąpień aranżacji we wszystkich wersjach aplikacji, możesz udostępniać tabele wystąpień i historii w aplikacjach funkcji. Tabele można udostępniać, konfigurując trackingStoreConnectionStringName ustawienia i trackingStoreNamePrefix w pliku ustawień host.json, aby wszystkie używały tych samych wartości.

Aby uzyskać więcej informacji, zobacz Manage instances in Durable Functions in Azure (Zarządzanie wystąpieniami w usłudze Durable Functions na platformie Azure).

Ustawienia magazynu śledzenia

Następne kroki