Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas hostowania aplikacji za pomocą usługi Azure Functions w planie Flex Consumption możesz kontrolować sposób wdrażania aktualizacji w uruchomionych wystąpieniach. Aktualizacja witryny odbywa się za każdym razem, gdy wdrażasz kod, modyfikujesz ustawienia aplikacji lub zmieniasz inne właściwości konfiguracji. Plan Flex Consumption udostępnia ustawienie konfiguracji witryny (SiteUpdateStrategy), którego można użyć do kontrolowania, czy aplikacja funkcji doświadcza przestoju podczas tych aktualizacji oraz sposób obsługi zadań w toku.
Plan Flex Consumption obecnie obsługuje następujące strategie aktualizacji:
- Ponowne uruchomienie: Funkcja uruchamia ponownie wszystkie działające instancje po zastąpieniu kodu najnowszą wersją. Takie podejście może spowodować krótkotrwałe przestoje podczas recyklingu wystąpień, zachowując przy tym domyślne działanie stosowane w innych planach hostingu usługi Azure Functions.
- Aktualizacja ciągła (wersja zapoznawcza): zapewnia wdrożenia bez przestojów poprzez sekwencyjne opróżnianie i zastępowanie instancji. Aktualnie wykonywane procesy przebiegają naturalnie bez przymusowego zakończenia.
Ważne
Strategia aktualizacji stopniowej jest obecnie dostępna w wersji zapoznawczej i nie jest zalecana w przypadku aplikacji produkcyjnych. Przed włączeniem tej strategii w dowolnej aplikacji produkcyjnej zapoznaj się z bieżącymi ograniczeniami i zagadnieniami .
Porównanie strategii
W tej tabeli porównaliśmy dwie strategie aktualizacji witryny:
| Kwestie wymagające rozważenia | Odtworzyć | Aktualizacja krocząca |
|---|---|---|
| Przestój | Krótki przestój podczas uruchamiania aplikacji od zera po ponownym uruchomieniu | Brak okresu przestoju |
| Wykonywanie w toku | Wymuszone zakończenie | Można ukończyć w ciągu 60-minutowego okresu tolerancji skalowania (funkcje HTTP mają ograniczenie do 230 sekund) |
| Szybkość | Szybciej — instancje zostają natychmiast uruchomione ponownie | Wolniejsze: wystąpienia są aktualizowane w pakietach w regularnych odstępach czasu |
| Zgodność z poprzednimi wersjami | Nie jest konieczne, ponieważ jedna wersja jest uruchamiana naraz | Zmiany muszą być wstecznie zgodne, zwłaszcza w przypadku obciążeń stanowych lub zmian powodujących niezgodność działania. |
| Jak ustawić | Domyślne zachowanie zgodne z innymi planami hostingu | Konfiguracja oparta na zgodzie |
| Użyj, gdy... | ✔ Potrzebne są szybkie wdrożenia. ✔ Krótki przestój jest akceptowalny. ✔ Wdrażasz zmiany powodujące niekompatybilność i potrzebujesz czystego ponownego uruchomienia. ✔ Twoje funkcje są bezstanowe i mogą obsługiwać zakłócenia. |
✔ Wymagane są wdrożenia bez przestojów. ✔ Masz długotrwałe lub krytyczne funkcje, których nie można przerwać. ✔ Zmiany są zgodne z poprzednimi wersjami. ✔ Należy zachować bieżące wykonania. |
Zachowania strategii aktualizacji
W tej tabeli porównaliśmy proces aktualizacji dwóch strategii:
Utwórz ponownie strategię:
Strategia aktualizacji stopniowej:
- Aktualizacja witryny (zmiany kodu lub konfiguracji) jest wdrażana do aplikacji funkcjonalnej.
- Strategia ponownego tworzenia jest wyzwalana w celu zaktualizowania uruchomionych wystąpień przy użyciu nowych zmian.
- Platforma wymusza ponowne uruchomienie wszystkich uruchomionych i wygaszanych wystąpień.
- System skalowania natychmiast rozpoczyna udostępnianie nowych wystąpień w zaktualizowanej wersji (oryginalne wystąpienia mogą być nadal wycofywane w tle).
- Aktualizacja witryny (zmiany kodu lub konfiguracji) jest wdrażana do aplikacji funkcjonalnej.
- Strategia aktualizacji stopniowej jest wyzwalana w celu zaktualizowania uruchomionych wystąpień przy użyciu nowych zmian.
- Platforma przypisuje wszystkie wystąpienia na żywo do partii.
- W regularnych odstępach czasu platforma opróżnia jedną partię wystąpień. Odciążanie blokuje wystąpieniom możliwość przyjmowania nowych zdarzeń, pozwalając jednocześnie na dokończenie trwających zadań (do maksymalnego czasu jednej godziny).
- Jednocześnie platforma skalowania aprowizuje nowe wystąpienia z wersją zaktualizowaną, aby zastąpić wycofywaną pojemność.
- Proces ten będzie kontynuowany, aż wszystkie instancje na żywo będą uruchomione w zaktualizowanej wersji.
W tej tabeli porównaliśmy kluczowe cechy dwóch strategii:
Utwórz ponownie strategię:
Strategia aktualizacji stopniowej:
- Krótki przestój: Aplikacja jest niedostępna podczas ponownego uruchamiania instancji i skalowania poziomego.
- Przerwanie wykonywania: bieżące operacje są natychmiast przerywane
- Brak sygnału ukończenia: Monitoruj dzienniki instancji, aby śledzić, kiedy oryginalne instancje przestają emitować dzienniki
- Bez przestojów: wdrożenia są wykonywane w partiach, dzięki czemu procesy kończą się bez przerywania działania.
- Operacje asynchroniczne: Opróżnianie i skalowanie poziome odbywają się jednocześnie bez oczekiwania na zakończenie. Skalowanie w poziomie nie jest gwarantowane przed następnym okresem opróżniania.
- Nakładające się aktualizacje: możesz zainicjować dodatkowe aktualizacje ciągłe, gdy jedna jest w toku. Wszystkie wystąpienia, które nie są najnowsze, są wyłączane, a tylko najnowsza wersja jest rozszerzana w poziomie.
- Skalowanie dynamiczne: platforma dostosowuje liczbę wystąpień na podstawie bieżącego zapotrzebowania podczas aktualizacji.
- Pojemność zarządzana platformy: Gdy zapotrzebowanie rośnie, platforma udostępnia więcej wystąpień, niż redukuje. Gdy zapotrzebowanie spada, tworzy tylko wystąpienia niezbędne do spełnienia bieżących potrzeb. Takie podejście zapewnia ciągłą dostępność podczas optymalizowania użycia zasobów.
Zagadnienia dotyczące strategii aktualizacji stopniowej
Podczas korzystania ze strategii aktualizacji stopniowej należy pamiętać o tych bieżących zachowaniach i ograniczeniach. Ta lista jest utrzymywana w okresie obowiązywania wersji zapoznawczej i może ulec zmianie, ponieważ funkcja zbliża się do ogólnej dostępności.
- Parametry zarządzane przez platformę: platforma kontroluje parametry (takie jak liczba partii, instancje na partię, liczba cykli oraz interwały opróżniania), które określają zachowania aktualizacji stopniowej. Te parametry mogą się zmienić przed ich ogólną dostępnością, aby zoptymalizować wydajność i niezawodność.
- Brak monitorowania w czasie rzeczywistym: obecnie nie ma wglądu w liczbę wystąpień opróżniania, liczbę partii lub bieżące wartości procentowe postępu.
- Brak sygnału ukończenia: można jednak monitorować dzienniki wystąpień, aby oszacować, kiedy aktualizacja zostanie ukończona.
- Scenariusze z pojedynczym wystąpieniem: aplikacje działające w jednym wystąpieniu doświadczają krótkiego przestoju podobnego do ponownego uruchomienia, choć trwające działania są kontynuowane.
- Durable Functions: ponieważ mieszanie wersji podczas aktualizacji może spowodować nieoczekiwane zachowanie w aranżacji Durable, należy użyć jawnej strategii dopasowania wersji aranżacji.
- Infrastruktura jako kod: wdrażanie kodu i zmian konfiguracji razem wyzwala wiele aktualizacji cyklicznych, które mogą się nakładać.
- Zgodność z poprzednimi wersjami: upewnij się, że zmiany działają z poprzednią wersją w okresie przejściowym aktualizacji stopniowej.
Konfigurowanie strategii aktualizacji
Strategię aktualizacji dla aplikacji można ustawić przy użyciu SiteUpdateStrategy ustawienia witryny, które jest elementem podrzędnym functionAppConfig. Domyślnie SiteUpdateStrategy.type jest ustawiona na wartość Recreate. Obecnie tylko szablony Bicep i ARM z wersją 2023-12-01 interfejsu API lub nowszą obsługują zmianę tej właściwości.
functionAppConfig: {
...
siteUpdateStrategy: {
type: 'RollingUpdate'
}
...
}
Zmiany strategii aktualizacji witryny zostaną zastosowane przy następnej aktualizacji witryny. Na przykład zmiana type z Recreate na RollingUpdate wykorzystuje strategię ponownego tworzenia dla tej aktualizacji. Wszystkie kolejne aktualizacje witryny używają aktualizacji przetaczających się.
Monitorowanie aktualizacji strony
W czasie publicznej wersji zapoznawczej nie ma wbudowanego unikalnego sygnału ukończenia zaplanowanej aktualizacji witryny. Można używać zapytań KQL w usłudze Application Insights jako metody szacowania z najwyższym możliwym przybliżeniem postępu aktualizacji ciągłych.
Monitorowanie postępu aktualizacji przebiegającej etapowo
Te zapytania KQL zapewniają w miarę dokładne oszacowanie postępu aktualizacji stopniowej przez śledzenie zmian wystąpień w logach Application Insights. Takie podejście ma znaczące ograniczenia i nie należy polegać na automatyzacji produkcji:
// Rolling update completion check
let deploymentStart = datetime('2025-10-30T19:00:00Z'); // Set to your deployment start time
let checkInterval = 10s; // How often you run this query
let buffer = 30s; // Safety buffer for instance detection
//
// Get original instances (active before deployment)
let originalInstances =
traces
| where timestamp between ((deploymentStart - buffer) .. deploymentStart)
| where cloud_RoleInstance != ""
| summarize by InstanceId = cloud_RoleInstance;
//
// Get currently active instances
let currentInstances =
traces
| where timestamp >= now() - checkInterval
| where cloud_RoleInstance != ""
| summarize by InstanceId = cloud_RoleInstance;
//
// Check completion status
currentInstances
| join kind=leftouter (originalInstances | extend IsOriginal = true) on InstanceId
| extend IsOriginal = isnotnull(IsOriginal)
| summarize
OriginalStillActiveInstances = make_set_if(InstanceId, IsOriginal),
NewInstances = make_set_if(InstanceId, not(IsOriginal)),
OriginalStillActiveCount = countif(IsOriginal),
NewCount = countif(not(IsOriginal)),
TotalOriginal = toscalar(originalInstances | count)
| extend
RollingUpdateComplete = iff(OriginalStillActiveCount == 0, "YES", "NO"),
PercentComplete = round(100.0 * (1.0 - todouble(OriginalStillActiveCount) / todouble(TotalOriginal)), 1)
| project RollingUpdateComplete, PercentComplete, OriginalStillActiveCount, NewCount
Jak użyć tego zapytania do szacowania:
- Wklej to zapytanie w bloku Dzienniki zasobu usługi Application Insights skojarzonego z aplikacją funkcji.
- Ustaw
deploymentStartna znacznik czasu, w którym aktualizacja witryny zakończy się sukcesem. - Okresowo uruchamiaj zapytanie, aby oszacować postęp. Ustaw interwał sondowania na wartość co najmniej tak długo, jak średni czas wykonywania funkcji, i upewnij się, że zmienna
checkIntervalw zapytaniu jest zgodna z tą częstotliwością sondowania. - Zapytanie zwraca przybliżone wartości:
-
RollingUpdateComplete: Najlepsze oszacowanie, czy wszystkie oryginalne wystąpienia są zastępowane -
PercentComplete: Szacowany procent oryginalnych wystąpień, które są zastępowane -
OriginalStillActiveCount: Szacowana liczba oryginalnych wystąpień nadal uruchomionych -
NewCount: Liczba aktualnie aktywnych nowych wystąpień
-
Podczas korzystania z tych zapytań należy pamiętać o następujących ograniczeniach:
Luka czasowa:
deploymentStartczas oznacza, kiedy aktualizacja witryny osiągnie sukces, ale rzeczywista aktualizacja ciągła niekoniecznie uruchomi się natychmiast. Podczas tej przerwy wszystkie zdarzenia zwiększenia skali udostępniają wystąpienia uruchamiające oryginalną wersję. Ponieważ zapytanie śledzi tylko wystąpienia aktywne wdeploymentStart, nie monitoruje tych nowych instancji oryginalnej wersji, co potencjalnie powoduje fałszywe sygnały ukończenia.Wykrywanie oparte na dzienniku: takie podejście opiera się na dziennikach aplikacji w celu wnioskowania stanu wystąpienia, a nie bezpośredniego wykonywania zapytań dotyczących stanu wystąpienia. Wystąpienia mogą być uruchomione, ale nie są aktywnie rejestrowane, co prowadzi do fałszywych sygnałów ukończenia, gdy oryginalne wystąpienia są nadal aktywne, ale nie emitują dzienników w
checkIntervaloknie.
Zalecenie dotyczące środowiska produkcyjnego: użyj aktualizacji rotacyjnych, gdy wdrożenia bez przestojów są kluczowe. Upewnij się, że w potokach wdrażania nie ma konieczności oczekiwania na ukończenie aktualizacji przed przejściem do kolejnych kroków. Użyj odtworzenia, gdy potrzebujesz szybszego i bardziej przewidywalnego czasu aktualizacji oraz możesz tolerować krótki przestój.
Często zadawane pytania
Jestem przyzwyczajony do slotów wdrożeniowych dla wdrożeń bez przestojów. Jak aktualizacje stopniowe różnią się?
- W przeciwieństwie do miejsc wdrożenia aktualizacje stopniowe nie wymagają dodatkowej infrastruktury. Ustaw
siteUpdateStrategy.typewartość na"RollingUpdate"dla wdrożeń bez przestojów. - Aktualizacje bez przestojów zachowują bieżące wykonanie, a sloty wdrożeniowe kończą je podczas zamian. Niektórych właściwości witryny i ustawień trwałych nie można zamienić i wymagają bezpośredniej modyfikacji wolumenu produkcji.
- W przeciwieństwie do miejsc wdrożenia, aktualizacje etapowe nie zapewniają oddzielnego środowiska do testowania zmian kanarkowych ani przekierowania części ruchu na żywo. Jeśli potrzebujesz tych funkcji, użyj planu obsługującego miejsca wdrożenia, takiego jak Elastic Premium, lub zarządzaj oddzielnymi aplikacjami Flex Consumption za pomocą usługi Traffic Manager.
Jak wycofać aktualizację witryny?
- Obecnie nie ma funkcji wycofywania aktualizacji witryny. Jeśli konieczne jest wycofanie, zainicjuj inną aktualizację witryny przy użyciu poprzedniego stanu kodu lub konfiguracji.
Jak obsługiwane są wyzwalacze czasomierza?
- Wyzwalacze czasomierza utrzymują swój pojedynczy charakter. Po oznaczeniu aplikacji funkcji wyzwalanej zegarem do opróżniania nowe funkcje są uruchamiane w najnowszej wersji.
Występują błędy środowiska uruchomieniowego podczas aktualizacji stopniowej... co poszło nie tak?
- Jeśli nie można uruchomić nowych wystąpień lub napotkać błędy środowiska uruchomieniowego, problem prawdopodobnie występuje w kodzie aplikacji, zależnościach, ustawieniach konfiguracji lub zmodyfikowanych zmiennych środowiskowych.
- Aby rozwiązać ten problem, ponownie wdróż ostatnią znaną wersję w dobrej kondycji, aby przywrócić środowisko uruchomieniowe. Następnie przetestuj proponowane zmiany w środowisku deweloperskim lub testowym przed ponowną próbą. Przejrzyj dzienniki błędów, aby zidentyfikować konkretną zmianę, która spowodowała problem.