Adatmegőrzés és szerializálás a Durable Functionsben (Azure Functions)
A Durable Functions futtatókörnyezete automatikusan megőrzi a függvényparamétereket, visszaadja az értékeket és az egyéb állapotokat a feladatközpontban a megbízható végrehajtás érdekében. A tartós tárolásban tárolt adatok mennyisége és gyakorisága azonban hatással lehet az alkalmazások teljesítményére és a tárolási tranzakciók költségeire. Az alkalmazás által tárolt adatok típusától függően az adatmegőrzési és adatvédelmi szabályzatokat is figyelembe kell venni.
Tevékenységközpont tartalma
A feladatközpontok a példányok aktuális állapotát és a függőben lévő üzeneteket tárolják:
- A példányállapotok egy példány aktuális állapotát és előzményeit tárolják. Vezénylési példányok esetén ez az állapot magában foglalja a futtatókörnyezet állapotát, a vezénylési előzményeket, a bemeneteket, a kimeneteket és az egyéni állapotot. Az entitáspéldányok esetében tartalmazza az entitás állapotát.
- Az üzenetek belső célokra használt függvénybemeneteket vagy kimeneteket, esemény-hasznos adatokat és metaadatokat tárolnak, például útválasztást és végpontok közötti korrelációt.
Az üzenetek a feldolgozás után törlődnek, de a példányállapotok megmaradnak, kivéve, ha az alkalmazás vagy egy operátor kifejezetten törli őket. A vezénylési előzmények különösen a vezénylés befejezése után is tárolóban maradnak.
Az állapotok és üzenetek a vezénylés előrehaladását szemléltetik, lásd a feladatközpont végrehajtási példáját.
A társzolgáltatótól függ, hogy hol és hogyan jelennek meg az állapotok és az üzenetek a tárolóban. A Durable Functions alapértelmezett szolgáltatója az Azure Storage, amely egy Ön által megadott Azure Storage-fiók üzenetsoraiban, tábláiban és blobjaiban tárolja az adatokat.
Szerializált és megőrzött adattípusok
Az alábbi lista a Durable Functions funkcióinak használatakor szerializálni és megmaradni kívánt adatok különböző típusait mutatja be:
- A vezénylői, tevékenységi és entitásfüggvények összes bemenete és kimenete, beleértve az azonosítókat és a kezeletlen kivételeket is
- Vezénylő, tevékenység és entitásfüggvények neve
- Külső eseménynevek és hasznos adatok
- Egyéni vezénylési állapot hasznos adatai
- Vezénylési megszüntetési üzenetek
- Tartós időzítő hasznos adatai
- Tartós HTTP-kérés- és válasz URL-címek, fejlécek és hasznos adatok
- Entitáshívások és -jelek hasznos adatai
- Entitásállapot hasznos adatai
Bizalmas adatok használata
Az Azure Storage-szolgáltató használatakor a rendszer minden adatot automatikusan titkosít inaktív állapotban. A tárfiókhoz hozzáféréssel rendelkezők azonban titkosítatlan formában olvashatják az adatokat. Ha erősebb védelemre van szüksége a bizalmas adatokhoz, fontolja meg először az adatok titkosítását saját titkosítási kulcsokkal, hogy az adatok előre titkosított formában megmaradnak.
Alternatív megoldásként a .NET-felhasználók egyéni szerializálási szolgáltatókat is alkalmazhatnak, amelyek automatikus titkosítást biztosítanak. Ebben a GitHub-példában a titkosítással történő egyéni szerializálásra találhat példát.
Feljegyzés
Ha alkalmazásszintű titkosítás implementálása mellett dönt, vegye figyelembe, hogy a vezénylések és entitások határozatlan ideig létezhetnek. Ez akkor számít, amikor el kell forgatni a titkosítási kulcsokat, mert a vezénylés vagy entitások hosszabb ideig futnak, mint a kulcsforgatási szabályzat. Kulcsváltás esetén előfordulhat, hogy az adatok titkosításához használt kulcs már nem lesz elérhető a visszafejtéshez a vezénylés vagy entitás következő végrehajtásakor. Ezért az ügyféltitkosítás csak akkor ajánlott, ha a vezénylések és entitások várhatóan viszonylag rövid ideig futnak.
Szerializálás és deszerializálás testreszabása
Alapértelmezett szerializálási logika
A folyamatban lévő .NET-hez készült Durable Functions belsőleg a Json.NET használatával szerializálja a vezénylési és entitásadatokat a JSON-ba. A használt alapértelmezett Json.NET beállítások a következők:
Bemenetek, kimenetek és állapot:
JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.None,
DateParseHandling = DateParseHandling.None,
}
Kivételek:
JsonSerializerSettings
{
ContractResolver = new ExceptionResolver(),
TypeNameHandling = TypeNameHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
}
További részletes dokumentációt JsonSerializerSettings
itt talál.
Szerializálás testreszabása .NET-attribútumokkal
A szerializálás során Json.NET különböző attribútumokat keres az osztályokon és tulajdonságokon, amelyek szabályozzák az adatok szerializálását és deszerializálását A JSON-ból. Ha a Durable Functions API-knak átadott adattípus forráskódjának tulajdonosa, érdemes lehet ezeket az attribútumokat hozzáadni a típushoz a szerializálás és a deszerializálás testreszabásához.
Szerializálás testreszabása függőséginjektálással
A .NET-et célzó és a Functions V3-futtatókörnyezetben futó függvényalkalmazások a Függőséginjektálás (DI) használatával testre szabhatják az adatok és kivételek szerializálásának módját. Az alábbi mintakód bemutatja, hogyan lehet a DI használatával felülbírálni az alapértelmezett Json.NET szerializálási beállításokat az egyéni implementációk és IErrorSerializerSettingsFactory
a IMessageSerializerSettingsFactory
szolgáltatási felületek használatával.
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Collections.Generic;
[assembly: FunctionsStartup(typeof(MyApplication.Startup))]
namespace MyApplication
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IMessageSerializerSettingsFactory, CustomMessageSerializerSettingsFactory>();
builder.Services.AddSingleton<IErrorSerializerSettingsFactory, CustomErrorSerializerSettingsFactory>();
}
/// <summary>
/// A factory that provides the serialization for all inputs and outputs for activities and
/// orchestrations, as well as entity state.
/// </summary>
internal class CustomMessageSerializerSettingsFactory : IMessageSerializerSettingsFactory
{
public JsonSerializerSettings CreateJsonSerializerSettings()
{
// Return your custom JsonSerializerSettings here
}
}
/// <summary>
/// A factory that provides the serialization for all exceptions thrown by activities
/// and orchestrations
/// </summary>
internal class CustomErrorSerializerSettingsFactory : IErrorSerializerSettingsFactory
{
public JsonSerializerSettings CreateJsonSerializerSettings()
{
// Return your custom JsonSerializerSettings here
}
}
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: