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:

  1. Dodaj odpowiedni pakiet NuGet do aplikacji funkcji (to wymaganie jest tymczasowe dla aplikacji korzystających z pakietów rozszerzeń).
  2. 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:

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:

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:

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 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

Następne kroki