Najlepsze rozwiązania i narzędzia diagnostyczne rozszerzenia Durable Functions
Ten artykuł zawiera szczegółowe informacje o najlepszych rozwiązaniach dotyczących korzystania z rozszerzenia Durable Functions. Opisano w nim również różne narzędzia ułatwiające diagnozowanie problemów podczas programowania, testowania i używania w środowisku produkcyjnym.
Najlepsze rozwiązania
Korzystanie z najnowszej wersji rozszerzenia Durable Functions i zestawu SDK
Istnieją dwa składniki używane przez aplikację funkcji do wykonywania rozszerzenia Durable Functions. Jednym z nich jest zestaw Durable Functions SDK , który umożliwia pisanie funkcji orkiestratora, działań i jednostek przy użyciu docelowego języka programowania. Drugim jest rozszerzenie Durable, czyli składnik środowiska uruchomieniowego, który faktycznie wykonuje kod. Z wyjątkiem aplikacji przetwarzania platformy .NET zestaw SDK i rozszerzenie są wersjonowane niezależnie.
Zapewnienie aktualności z najnowszym rozszerzeniem i zestawem SDK zapewnia, że aplikacja korzysta z najnowszych ulepszeń wydajności, funkcji i poprawek błędów. Uaktualnienie do najnowszych wersji gwarantuje również, że firma Microsoft może zebrać najnowsze dane telemetryczne diagnostyczne, aby przyspieszyć proces badania po otwarciu zgłoszenia do pomocy technicznej na platformie Azure.
- Aby uzyskać instrukcje dotyczące pobierania najnowszej wersji rozszerzenia, zobacz Uaktualnianie wersji rozszerzenia durable functions.
- Aby upewnić się, że używasz najnowszej wersji zestawu SDK, sprawdź menedżera pakietów używanego języka.
Przestrzeganie ograniczeń kodu rozszerzenia Durable Functions
Zachowanie odtwarzania kodu orkiestratora tworzy ograniczenia dotyczące typu kodu, który można napisać w funkcji orkiestratora. Przykładem ograniczenia jest to, że funkcja orkiestratora musi używać deterministycznych interfejsów API, aby za każdym razem, gdy jest odtwarzana, generuje ten sam wynik.
Uwaga
Durable Functions Roslyn Analyzer to analizator kodu na żywo, który prowadzi użytkowników języka C# do przestrzegania ograniczeń kodu specyficznych dla rozszerzenia Durable Functions. Aby uzyskać instrukcje dotyczące włączania go w programach Visual Studio i Visual Studio Code, zobacz Durable Functions Roslyn Analyzer .
Zapoznaj się z ustawieniami wydajności usługi Azure Functions w języku programowania
Korzystając z ustawień domyślnych, wybrane środowisko uruchomieniowe języka może nakładać ścisłe ograniczenia współbieżności na funkcje. Na przykład: zezwalanie na wykonywanie tylko 1 funkcji na danej maszynie wirtualnej. Te ograniczenia mogą być zwykle złagodzone przez precyzyjne dostrajanie ustawień współbieżności i wydajności języka. Jeśli chcesz zoptymalizować wydajność aplikacji Durable Functions, musisz zapoznać się z tymi ustawieniami.
Poniżej znajduje się niewyczerpująca lista niektórych języków, które często korzystają z precyzyjnego dostrajania ich wydajności i ustawień współbieżności oraz ich wytycznych dotyczących tego.
Gwarancja unikatowych nazw centrum zadań na aplikację
Wiele aplikacji durable function może współużytkować to samo konto magazynu. Domyślnie nazwa aplikacji jest używana jako nazwa centrum zadań, co gwarantuje, że przypadkowe udostępnianie centrów zadań nie nastąpi. Jeśli musisz jawnie skonfigurować nazwy centrum zadań dla aplikacji w host.json, upewnij się, że nazwy są unikatowe. W przeciwnym razie wiele aplikacji będzie konkurować o komunikaty, co może spowodować niezdefiniowane zachowanie, w tym nieoczekiwanie "zablokowane" w stanie Oczekiwanie lub Uruchomione.
Jedynym wyjątkiem jest wdrożenie kopii tej samej aplikacji w wielu regionach. W tym przypadku można użyć tego samego centrum zadań dla kopii.
Postępuj zgodnie ze wskazówkami dotyczącymi wdrażania zmian kodu w uruchomionych orkiestratorach
Nieuniknione jest, że funkcje zostaną dodane, usunięte i zmienione w okresie istnienia aplikacji. Przykłady typowych zmian powodujących niezgodność obejmują zmienianie sygnatur działania lub funkcji jednostki oraz zmienianie logiki orkiestratora. Te zmiany są problemem, gdy mają wpływ na aranżacje, które są nadal uruchomione. W przypadku nieprawidłowego wdrożenia zmiany kodu mogą prowadzić do niepowodzenia aranżacji z błędem niedeterministycznym, zablokowaniem na czas nieokreślony, obniżeniem wydajności itp. Zapoznaj się z zalecanymi strategiami ograniczania ryzyka podczas wprowadzania zmian w kodzie, które mogą mieć wpływ na uruchamianie aranżacji.
Utrzymywanie możliwie najmniejszych danych wejściowych i wyjściowych funkcji
Problemy z pamięcią można napotkać, jeśli udostępniasz duże dane wejściowe i wyjściowe do i z interfejsów API rozszerzenia Durable Functions.
Dane wejściowe i wyjściowe interfejsów API funkcji Durable Functions są serializowane w historii aranżacji. Oznacza to, że duże dane wejściowe i wyjściowe mogą wraz z upływem czasu znacznie przyczynić się do rosnącej niezwiązanej historii orkiestratora, co może powodować wyjątki pamięci podczas odtwarzania.
Aby zminimalizować wpływ dużych danych wejściowych i wyjściowych na interfejsy API, możesz delegować niektóre prace do podaranżatorów. Pomaga to zrównoważyć obciążenie pamięcią historii od jednego orkiestratora do wielu, dzięki czemu ilość pamięci poszczególnych historii jest niewielka.
Powiedział, że najlepszym rozwiązaniem do radzenia sobie z dużymi danymi jest przechowywanie ich w magazynie zewnętrznym i materializowanie tylko tych danych wewnątrz działań, w razie potrzeby. Korzystając z tego podejścia, zamiast komunikować się z danymi wejściowymi i/lub wyjściowymi interfejsów API usługi Durable Functions, możesz przekazać lekki identyfikator, który umożliwia pobieranie tych danych z magazynu zewnętrznego w razie potrzeby w działaniach.
Zachowaj małe dane jednostki
Podobnie jak w przypadku danych wejściowych i wyjściowych do interfejsów API usługi Durable Functions, jeśli stan jawny jednostki jest zbyt duży, mogą wystąpić problemy z pamięcią. W szczególności stan jednostki musi być serializowany i zserializowany z magazynu na dowolnym żądaniu, więc duże stany dodają opóźnienie serializacji do każdego wywołania. W związku z tym, jeśli jednostka musi śledzić duże dane, zaleca się odciążenie danych do magazynu zewnętrznego i śledzenie lekkiego identyfikatora w jednostce, która umożliwia zmaterializowanie danych z magazynu w razie potrzeby.
Dostrajanie ustawień współbieżności usługi Durable Functions
Jedno wystąpienie procesu roboczego może jednocześnie wykonywać wiele elementów roboczych w celu zwiększenia wydajności. Przetwarzanie zbyt wielu elementów roboczych jednocześnie wiąże się z wyczerpaniem zasobów, takich jak pojemność procesora CPU, połączenia sieciowe itp. W wielu przypadkach nie powinno to być problemem, ponieważ skalowanie i ograniczanie elementów roboczych jest obsługiwane automatycznie. Oznacza to, że jeśli występują problemy z wydajnością (takie jak zbyt długie zakończenie działania orkiestratorów, są zablokowane w oczekiwaniu itp.) lub przeprowadzają testy wydajnościowe, możesz skonfigurować limity współbieżności w pliku host.json.
Uwaga
Nie jest to zamiennik dostrajania wydajności i ustawień współbieżności środowiska uruchomieniowego języka w usłudze Azure Functions. Ustawienia współbieżności rozszerzenia Durable Functions określają tylko, ile pracy można przypisać do danej maszyny wirtualnej naraz, ale nie określa stopnia równoległości przetwarzania, które działają wewnątrz maszyny wirtualnej. Ten ostatni wymaga precyzyjnego dostrajania ustawień wydajności środowiska uruchomieniowego języka.
Używanie unikatowych nazw zdarzeń zewnętrznych
Podobnie jak w przypadku funkcji działania, zdarzenia zewnętrzne mają co najmniej jednokrotną gwarancję dostarczania. Oznacza to, że w pewnych rzadkich warunkach (które mogą wystąpić podczas ponownego uruchamiania, skalowania, awarii itp.), aplikacja może odbierać duplikaty tego samego zdarzenia zewnętrznego. W związku z tym zalecamy, aby zdarzenia zewnętrzne zawierały identyfikator, który umożliwia ich ręczne deduplikowanie w orkiestratorach.
Uwaga
Dostawca magazynu MSSQL korzysta z zdarzeń zewnętrznych i aktualizuje stan orkiestratora transakcyjnie, więc w tym zapleczu nie powinno istnieć ryzyko zduplikowanych zdarzeń, w przeciwieństwie do domyślnego dostawcy magazynu usługi Azure Storage. Mimo to nadal zaleca się, aby zdarzenia zewnętrzne miały unikatowe nazwy, dzięki czemu kod jest przenośny w zapleczach.
Zainwestuj w testy obciążeniowe
Podobnie jak w przypadku wszystkich elementów związanych z wydajnością, idealne ustawienia współbieżności i architechture aplikacji ostatecznie zależą od obciążenia aplikacji. W związku z tym zaleca się, aby użytkownicy zainwestowali w wykorzystanie testów wydajnościowych, które symulują oczekiwane obciążenie i używają go do uruchamiania eksperymentów wydajności i niezawodności aplikacji.
Unikaj poufnych danych w danych wejściowych, wyjściowych i wyjątkach
Dane wejściowe i wyjściowe (w tym wyjątki) do i z interfejsów API usługi Durable Functions są trwale utrwalane u wybranego dostawcy magazynu. Jeśli te dane wejściowe, wyjściowe lub wyjątki zawierają poufne dane (takie jak wpisy tajne, parametry połączenia, dane osobowe itp.), każda osoba mająca dostęp do odczytu do zasobów dostawcy magazynu będzie mogła je uzyskać. Aby bezpiecznie radzić sobie z danymi poufnymi, zaleca się użytkownikom pobieranie tych danych w ramach funkcji działań z usługi Azure Key Vault lub zmiennych środowiskowych i nigdy nie komunikować się z tymi danymi bezpośrednio do orkiestratorów lub jednostek. Powinno to pomóc zapobiec wyciekowi poufnych danych do zasobów magazynu.
Uwaga
Te wskazówki dotyczą również interfejsu CallHttp
API orkiestratora, który również utrwala ładunki żądań i odpowiedzi w magazynie. Jeśli docelowe punkty końcowe HTTP wymagają uwierzytelniania, co może być poufne, zaleca się, aby użytkownicy implementowali wywołanie HTTP samodzielnie wewnątrz działania lub korzystać z wbudowanej obsługi tożsamości zarządzanej oferowanej przez CallHttp
usługę , która nie utrzymuje żadnych poświadczeń w magazynie.
Napiwek
Podobnie należy unikać rejestrowania danych zawierających wpisy tajne, ponieważ każdy, kto ma dostęp do odczytu do dzienników (na przykład w usłudze Application Insights), będzie mógł uzyskać te wpisy tajne.
Narzędzia diagnostyczne
Dostępnych jest kilka narzędzi, które ułatwiają diagnozowanie problemów.
Trwałe funkcje i trwałe dzienniki struktury zadań
Rozszerzenie Durable Functions
Rozszerzenie Durable emituje zdarzenia śledzenia, które umożliwiają śledzenie kompleksowego wykonywania aranżacji. Te zdarzenia śledzenia można znaleźć i wykonywać zapytania za pomocą narzędzia analizy usługi Application Insights w witrynie Azure Portal. Szczegółowość emitowanych danych śledzenia można skonfigurować w logger
sekcji (Functions 1.x) lub logging
(Functions 2.0) w pliku host.json. Zobacz szczegóły konfiguracji.
Trwała struktura zadań
Począwszy od wersji 2.3.0 rozszerzenia Durable, dzienniki emitowane przez podstawową platformę Durable Task Framework (DTFx) są również dostępne dla kolekcji. Zobacz szczegółowe informacje na temat włączania tych dzienników.
Azure Portal
Diagnozowanie i rozwiązywanie problemów
Diagnostyka aplikacji funkcji platformy Azure to przydatny zasób w witrynie Azure Portal do monitorowania i diagnozowania potencjalnych problemów w aplikacji. Zawiera również sugestie ułatwiające rozwiązywanie problemów na podstawie diagnozy. Zobacz Diagnostyka aplikacji funkcji platformy Azure.
Ślady orkiestracji rozszerzenia Durable Functions
Witryna Azure Portal zawiera szczegóły śledzenia aranżacji, które ułatwiają zrozumienie stanu każdego wystąpienia orkiestracji i śledzenie kompleksowego wykonywania. Po zapoznaniu się z listą funkcji w aplikacji usługi Azure Functions zobaczysz kolumnę Monitor zawierającą linki do śladów. Aby uzyskać te informacje, musisz mieć włączoną usługę Application Insights.
Rozszerzenie rozszerzenia Durable Functions Monitor
Jest to rozszerzenie programu Visual Studio Code, które udostępnia interfejs użytkownika do monitorowania wystąpień aranżacji, zarządzania nimi i debugowania.
Analizator Roslyn
Durable Functions Roslyn Analyzer to analizator kodu na żywo, który prowadzi użytkowników języka C# do przestrzegania ograniczeń kodu specyficznych dla rozszerzenia Durable Functions. Aby uzyskać instrukcje dotyczące włączania go w programach Visual Studio i Visual Studio Code, zobacz Durable Functions Roslyn Analyzer .
Pomoc techniczna
W przypadku pytań i pomocy technicznej możesz otworzyć problem w jednym z poniższych repozytoriów GitHub. Podczas raportowania usterki na platformie Azure, w tym informacji, takich jak identyfikatory wystąpień, zakresy czasu w formacie UTC pokazujące problem, nazwa aplikacji (jeśli to możliwe) i region wdrażania znacznie przyspieszy badania.