Dostawcy magazynu rozszerzenia Durable Functions
Durable Functions to zestaw wyzwalaczy i powiązań usługi Azure Functions, które są wewnętrznie obsługiwane przez platformę Durable Task Framework (DTFx). Rozwiązanie DTFx obsługuje różnych dostawców magazynu zaplecza, w tym dostawcę usługi Azure Storage używanego przez rozszerzenie Durable Functions. Począwszy od rozszerzenia Durable Functions w wersji 2.5.0, użytkownicy mogą skonfigurować aplikacje funkcji tak, aby korzystały z dostawców magazynu DTFx innych niż dostawca usługi Azure Storage.
Uwaga
W przypadku wielu aplikacji funkcji domyślny dostawca usługi Azure Storage dla rozszerzenia Durable Functions może być wystarczający i jest najłatwiejszy do użycia, ponieważ nie wymaga dodatkowej konfiguracji. Istnieją jednak kompromisy w zakresie kosztów, skalowalności i zarządzania danymi, które mogą sprzyjać użyciu alternatywnego dostawcy magazynu.
Dwóch alternatywnych dostawców magazynu zostało opracowanych do użytku z rozszerzeniami Durable Functions i platformą Durable Task Framework, czyli dostawcą magazynu Netherite i dostawcą magazynu programu Microsoft SQL Server (MSSQL). W tym artykule opisano wszystkich trzech obsługiwanych dostawców, porównuje ich ze sobą i przedstawiono podstawowe informacje na temat rozpoczynania korzystania z nich.
Uwaga
Obecnie nie można migrować danych z jednego dostawcy magazynu do innego. Jeśli chcesz użyć nowego dostawcy magazynu, utwórz nową aplikację skonfigurowaną przy użyciu nowego dostawcy magazynu.
Azure Storage
Usługa Azure Storage jest domyślnym dostawcą magazynu dla rozszerzenia Durable Functions. Używa kolejek, tabel i obiektów blob do utrwalania aranżacji i stanu jednostki. Używa również obiektów blob i dzierżaw obiektów blob do zarządzania partycjami. W wielu przypadkach konto magazynu używane do przechowywania stanu środowiska uruchomieniowego rozszerzenia Durable Functions jest takie samo jak domyślne konto magazynu używane przez usługę Azure Functions (AzureWebJobsStorage
). Istnieje jednak również możliwość skonfigurowania rozszerzenia Durable Functions przy użyciu oddzielnego konta magazynu. Dostawca usługi Azure Storage jest wbudowany w rozszerzenie Durable Functions i nie ma żadnych innych zależności.
Najważniejsze zalety dostawcy usługi Azure Storage obejmują:
- Nie jest wymagana konfiguracja — możesz użyć konta magazynu utworzonego dla Ciebie przez środowisko konfiguracji aplikacji funkcji.
- Model rozliczeń bezserwerowych o najniższych kosztach — usługa Azure Storage ma oparty na użyciu model cen oparty całkowicie na użyciu (więcej informacji).
- Najlepsza obsługa narzędzi — usługa Azure Storage oferuje międzyplatformową lokalną emulację i integruje się z programem Visual Studio, programem Visual Studio Code i narzędziami Azure Functions Core Tools.
- Najbardziej dojrzałe — usługa Azure Storage była oryginalnym i najbardziej przetestowanym zapleczem magazynu dla rozszerzenia Durable Functions.
- Obsługa używania tożsamości zamiast wpisów tajnych do nawiązywania połączenia z dostawcą magazynu.
Kod źródłowy składników DTFx dostawcy magazynu usługi Azure Storage można znaleźć w repozytorium GitHub platformy Azure/durabletask .
Uwaga
Konta usługi Azure Storage ogólnego przeznaczenia w warstwie Standardowa są wymagane w przypadku korzystania z dostawcy usługi Azure Storage. Wszystkie inne typy kont magazynu nie są obsługiwane. Zdecydowanie zalecamy używanie starszych kont magazynu ogólnego przeznaczenia w wersji 1, ponieważ nowsze konta magazynu w wersji 2 mogą być znacznie droższe w przypadku obciążeń durable functions. Aby uzyskać więcej informacji na temat typów kont usługi Azure Storage, zobacz dokumentację przeglądu konta magazynu.
Netherite
Zaplecze magazynu Netherite zostało zaprojektowane i opracowane przez firmę Microsoft Research. Korzysta z usługi Azure Event Hubs i technologii szybszej bazy danych w oparciu o stronicowe obiekty blob platformy Azure. Projekt Netherite umożliwia znacznie wyższe przepływność przetwarzania aranżacji i jednostek w porównaniu z innymi dostawcami. W niektórych scenariuszach porównawczych przepływność została pokazana, aby zwiększyć się o więcej niż kolejność wielkości w porównaniu z domyślnym dostawcą usługi Azure Storage.
Najważniejsze zalety dostawcy magazynu Netherite obejmują:
- Znacznie wyższa przepływność przy niższych kosztach w porównaniu z innymi dostawcami magazynu.
- Obsługuje optymalizację wydajności cen, umożliwiając skalowanie w górę wydajności zgodnie z potrzebami.
- Obsługuje maksymalnie 32 partycje danych z jednostkami SKU usługi Event Hubs w warstwie Podstawowa i Standardowa.
- Bardziej opłacalne niż inni dostawcy dla obciążeń o wysokiej przepływności.
Więcej informacji na temat szczegółów technicznych dostawcy magazynu Netherite, w tym o sposobie rozpoczynania korzystania z niego, można znaleźć w dokumentacji netherite. Kod źródłowy dostawcy magazynu Netherite można znaleźć w repozytorium GitHub microsoft/durabletask-netherite . Bardziej szczegółowa ocena dostawcy magazynu Netherite jest również dostępna w następującym dokumencie badawczym: Bezserwerowe przepływy pracy z rozszerzeniami Durable Functions i Netherite.
Uwaga
Nazwa Netherite pochodzi ze świata Minecraft.
Microsoft SQL Server (MSSQL)
Dostawca magazynu programu Microsoft SQL Server (MSSQL) utrzymuje cały stan w bazie danych programu Microsoft SQL Server. Jest ona zgodna zarówno z wdrożeniami lokalnymi, jak i hostowanymi w chmurze programu SQL Server, w tym z usługą Azure SQL Database.
Najważniejsze zalety dostawcy magazynu MSSQL obejmują:
- Obsługuje odłączone środowiska — w przypadku korzystania z instalacji programu SQL Server nie jest wymagana żadna łączność platformy Azure.
- Przenośny w wielu środowiskach i chmurach, w tym hostowanych na platformie Azure i w środowisku lokalnym.
- Silna spójność danych, włączanie tworzenia kopii zapasowych/przywracania i przechodzenia w tryb failover bez utraty danych.
- Natywna obsługa niestandardowego szyfrowania danych (funkcja programu SQL Server).
- Integruje się z istniejącymi aplikacjami bazy danych za pomocą wbudowanych procedur składowanych.
Więcej informacji na temat szczegółów technicznych dostawcy magazynu MSSQL, w tym sposobu rozpoczynania korzystania z niego, można znaleźć w dokumentacji dostawcy usługi Microsoft SQL. Kod źródłowy dostawcy magazynu MSSQL można znaleźć w repozytorium microsoft/durabletask-mssql GitHub.
Konfigurowanie alternatywnych dostawców magazynu
Konfigurowanie alternatywnych dostawców magazynu jest zazwyczaj procesem dwuetapowym:
- Dodaj odpowiedni pakiet NuGet do aplikacji funkcji (to wymaganie jest tymczasowe dla aplikacji korzystających z pakietów rozszerzeń).
- Zaktualizuj plik host.json, aby określić dostawcę magazynu, którego chcesz użyć.
Jeśli żaden dostawca magazynu nie jest jawnie skonfigurowany w host.json, dostawca usługi Azure Storage zostanie domyślnie włączony.
Konfigurowanie dostawcy usługi Azure Storage
Dostawca usługi Azure Storage jest domyślnym dostawcą magazynu i nie wymaga żadnych jawnych odwołań do konfiguracji, odwołań do pakietów NuGet ani odwołań do pakietów rozszerzeń. Pełny zestaw opcji konfiguracji host.json można znaleźć tutaj w ścieżce extensions/durableTask/storageProvider
.
Połączenia
Właściwość connectionName
w host.json jest odwołaniem do konfiguracji środowiska, która określa sposób łączenia aplikacji z usługą Azure Storage. Może to określać:
- Nazwa ustawienia aplikacji zawierającego parametry połączenia. Aby uzyskać parametry połączenia, wykonaj kroki opisane w temacie Zarządzanie kluczami dostępu do konta magazynu.
- Nazwa udostępnionego prefiksu dla wielu ustawień aplikacji, definiująca połączenie oparte na tożsamościach.
Jeśli skonfigurowana wartość jest dokładnie zgodna z pojedynczym ustawieniem i dopasowaniem prefiksu dla innych ustawień, zostanie użyte dokładne dopasowanie. Jeśli w host.json nie określono żadnej wartości, wartość domyślna to "AzureWebJobsStorage".
Połączenia oparte na tożsamościach
Jeśli używasz rozszerzenia w wersji 2.7.0 lub nowszej oraz dostawcy usługi Azure Storage, zamiast używać parametry połączenia z wpisem tajnym, możesz mieć aplikację korzystającą z tożsamości Microsoft Entra. W tym celu należy zdefiniować ustawienia w ramach wspólnego prefiksu, który mapuje na connectionName
właściwość w konfiguracji wyzwalacza i powiązania.
Aby użyć połączenia opartego na tożsamości dla rozszerzenia Durable Functions, skonfiguruj następujące ustawienia aplikacji:
Właściwości | Szablon zmiennej środowiskowej | opis | Przykładowa wartość |
---|---|---|---|
Blob service URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
Identyfikator URI płaszczyzny danych usługi obiektów blob konta magazynu przy użyciu schematu HTTPS. | <https:// storage_account_name.blob.core.windows.net> |
Identyfikator URI usługi kolejki | <CONNECTION_NAME_PREFIX>__queueServiceUri |
Identyfikator URI płaszczyzny danych usługi kolejki konta magazynu przy użyciu schematu HTTPS. | <https:// storage_account_name.queue.core.windows.net> |
Table service URI | <CONNECTION_NAME_PREFIX>__tableServiceUri |
Identyfikator URI płaszczyzny danych usługi tabeli konta magazynu przy użyciu schematu HTTPS. | <https:// storage_account_name.table.core.windows.net> |
Aby dostosować połączenie, można ustawić dodatkowe właściwości. Zobacz Typowe właściwości połączeń opartych na tożsamościach.
W przypadku hostowania w usłudze Azure Functions połączenia oparte na tożsamościach używają tożsamości zarządzanej. Tożsamość przypisana przez system jest używana domyślnie, chociaż tożsamości przypisanej przez użytkownika można określić za credential
pomocą właściwości i clientID
. Należy pamiętać, że konfigurowanie tożsamości przypisanej przez użytkownika przy użyciu identyfikatora zasobu nie jest obsługiwane. W przypadku uruchamiania w innych kontekstach, takich jak programowanie lokalne, tożsamość dewelopera jest używana, chociaż można to dostosować. Zobacz Programowanie lokalne z połączeniami opartymi na tożsamościach.
Udzielanie uprawnień tożsamości
Niezależnie od używanej tożsamości musi mieć uprawnienia do wykonywania zamierzonych akcji. W przypadku większości usług platformy Azure oznacza to, że musisz przypisać rolę w kontroli dostępu opartej na rolach platformy Azure przy użyciu wbudowanych lub niestandardowych ról, które zapewniają te uprawnienia.
Ważne
Niektóre uprawnienia mogą być uwidocznione przez usługę docelową, które nie są niezbędne dla wszystkich kontekstów. Jeśli to możliwe, przestrzegaj zasady najniższych uprawnień, udzielając tożsamości tylko wymaganych uprawnień. Jeśli na przykład aplikacja musi mieć możliwość odczytu tylko ze źródła danych, użyj roli, która ma uprawnienia tylko do odczytu. Niewłaściwe byłoby przypisanie roli, która umożliwia również zapisywanie w tej usłudze, ponieważ byłoby to nadmierne uprawnienie do operacji odczytu. Podobnie należy upewnić się, że przypisanie roli jest ograniczone tylko do zasobów, które należy odczytać.
Musisz utworzyć przypisanie roli, które zapewnia dostęp do usługi Azure Storage w czasie wykonywania. Role zarządzania, takie jak Właściciel , nie są wystarczające. Podczas korzystania z rozszerzenia Durable Functions w normalnej pracy zalecane są następujące wbudowane role:
- Współautor danych w usłudze Blob Storage
- Współautor danych kolejki usługi Storage
- Współautor danych tabeli usługi Storage
Aplikacja może wymagać większej liczby uprawnień na podstawie zapisanego kodu. Jeśli używasz domyślnego zachowania lub jawnego ustawienia connectionName
"AzureWebJobsStorage", zobacz Łączenie z magazynem hostów przy użyciu tożsamości , aby uzyskać inne zagadnienia dotyczące uprawnień.
Konfigurowanie dostawcy magazynu Netherite
Włączenie dostawcy magazynu Netherite wymaga zmiany konfiguracji w pliku host.json
. W przypadku użytkowników języka C# wymaga to również dodatkowego kroku instalacji.
Konfiguracja host.json
W poniższym przykładzie host.json przedstawiono minimalną konfigurację wymaganą do włączenia dostawcy magazynu Netherite.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "Netherite",
"storageConnectionName": "AzureWebJobsStorage",
"eventHubsConnectionName": "EventHubsConnection"
}
}
}
}
Aby uzyskać bardziej szczegółowe instrukcje dotyczące konfiguracji, zobacz dokumentację wprowadzenie do witryny Netherite.
Instalowanie rozszerzenia Netherite (tylko platforma.NET)
Uwaga
Jeśli aplikacja używa pakietów rozszerzeń, należy zignorować tę sekcję, ponieważ pakiety rozszerzeń usuwają potrzebę ręcznego zarządzania rozszerzeniami.
Musisz zainstalować najnowszą wersję rozszerzenia Netherite w programie NuGet. Zwykle oznacza to uwzględnienie odwołania do niego w .csproj
pliku i utworzenie projektu.
Pakiet rozszerzenia do zainstalowania zależy od używanego procesu roboczego platformy .NET:
- W przypadku procesu roboczego platformy .NET zainstaluj program
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
. - W przypadku izolowanego procesu roboczego platformy .NET zainstaluj program
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
.
Konfigurowanie dostawcy magazynu MSSQL
Włączenie dostawcy magazynu MSSQL wymaga zmiany konfiguracji w pliku host.json
. W przypadku użytkowników języka C# wymaga to również dodatkowego kroku instalacji.
Konfiguracja host.json
W poniższym przykładzie przedstawiono minimalną konfigurację wymaganą do włączenia dostawcy magazynu MSSQL.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "mssql",
"connectionStringName": "SQLDB_Connection"
}
}
}
}
Aby uzyskać bardziej szczegółowe instrukcje dotyczące konfiguracji, zobacz dokumentację wprowadzającą dostawcy MSSQL.
Instalowanie rozszerzenia MSSQL rozszerzenia Durable Task (tylko platforma.NET)
Uwaga
Jeśli aplikacja używa pakietów rozszerzeń, należy zignorować tę sekcję, ponieważ pakiety rozszerzeń usuwają potrzebę ręcznego zarządzania rozszerzeniami.
Musisz zainstalować najnowszą wersję rozszerzenia dostawcy magazynu MSSQL w programie NuGet. Zwykle oznacza to uwzględnienie odwołania do niego w .csproj
pliku i utworzenie projektu.
Pakiet rozszerzenia do zainstalowania zależy od używanego procesu roboczego platformy .NET:
- W przypadku procesu roboczego platformy .NET zainstaluj program
Microsoft.DurableTask.SqlServer.AzureFunctions
. - W przypadku izolowanego procesu roboczego platformy .NET zainstaluj program
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
.
Porównywanie dostawców magazynu
Istnieje wiele znaczących kompromisów między różnymi obsługiwanymi dostawcami magazynu. Poniższa tabela może pomóc zrozumieć te kompromisy i zdecydować, który dostawca magazynu jest najlepszy dla Twoich potrzeb.
Dostawca magazynu | Azure Storage | Netherite | MSSQL |
---|---|---|---|
Oficjalny stan pomocy technicznej | ✅ Ogólnie dostępna (ogólna dostępność) | ✅ Ogólnie dostępna (ogólna dostępność) | ✅ Ogólnie dostępna (ogólna dostępność) |
Zależności zewnętrzne | Konto usługi Azure Storage (ogólnego przeznaczenia, wersja 1) | Azure Event Hubs Konto usługi Azure Storage (ogólnego przeznaczenia) |
SQL Server 2019 lub Azure SQL Database |
Opcje programowania lokalnego i emulacji | Azurite v3.12+ (międzyplatformowa) | Obsługuje emulację w pamięci centrów zadań (więcej informacji) | SQL Server Developer Edition (obsługuje kontenery systemów Windows, Linux i Docker) |
Konfiguracja centrum zadań | Jawnie | Jawnie | Domyślnie niejawne (więcej informacji) |
Maksymalna przepływność | Umiarkowane | Bardzo wysoko | Umiarkowane |
Maksymalna aranżacja/skalowanie jednostek w poziomie (węzły) | 16 | 32 | Nie dotyczy |
Maksymalne skalowanie działań w poziomie (węzły) | Nie dotyczy | 32 | Nie dotyczy |
Obsługa jednostek trwałych | ✅ W pełni obsługiwane | ✅ W pełni obsługiwane | ⚠✔ Obsługiwane z wyjątkiem przypadków korzystania z platformy .NET Isolated |
Obsługa skalowania KEDA 2.0 (więcej informacji) |
❌ Nieobsługiwane | ❌ Nieobsługiwane | ✅Obsługiwane przy użyciu narzędzia skalowania MSSQL (więcej informacji) |
Obsługa pakietów rozszerzeń (zalecana w przypadku aplikacji non-.NET) | ✅ W pełni obsługiwane | ✅ W pełni obsługiwane | ✅ W pełni obsługiwane |
Można skonfigurować wydajność cenową? | ❌ Nie | ✅ Tak (jednostki TU i jednostki CU usługi Event Hubs) | ✅ Tak (procesory wirtualne SQL) |
Rozłączone wsparcie środowiska | ❌ Wymagana łączność platformy Azure | ❌ Wymagana łączność platformy Azure | ✅ W pełni obsługiwane |
Połączenia oparte na tożsamościach | ✅ W pełni obsługiwane | ❌ Nieobsługiwane | ⚠✔ Wymaga skalowania opartego na środowisku uruchomieniowym |
Plan Flex Consumption | ✅ W pełni obsługiwane (zobacz uwagi) | ❌ Nieobsługiwane | ❌ Nieobsługiwane |