Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Runtime Durable Functions secara otomatis menyimpan parameter fungsi, nilai yang ditampilkan, dan status lainnya ke hub tugas guna memberikan eksekusi yang andal. Namun, jumlah dan frekuensi data yang bertahan hingga penyimpanan yang tahan lama dapat berdampak pada performa aplikasi dan biaya transaksi penyimpanan. Bergantung pada jenis data yang disimpan aplikasi, retensi data, dan kebijakan privasi Anda mungkin juga perlu dipertimbangkan.
Isi Hub Tugas
Hub tugas menyimpan status instans saat ini dan pesan apa pun yang tertunda:
- Status instans menyimpan status dan riwayat instans saat ini. Untuk instans orkestrasi, status ini mencakup status runtime, riwayat orkestrasi, input, output, dan status kustom. Untuk instans entitas, ini termasuk status entitas.
- Pesan menyimpan input atau output fungsi, payload peristiwa, dan metadata yang digunakan untuk tujuan internal, seperti perutean dan korelasi end-to-end.
Pesan dihapus setelah diproses, tetapi status instans tetap ada kecuali pesan dihapus secara eksplisit oleh aplikasi atau operator. Secara khusus, riwayat orkestrasi tetap berada di penyimpanan bahkan setelah orkestrasi selesai.
Untuk contoh bagaimana status dan pesan mewakili kemajuan orkestrasi, lihat contoh eksekusi hub tugas.
Di mana dan bagaimana status juga pesan direpresentasikan dalam penyimpanan bergantung pada penyedia penyimpanan. Penyedia default Durable Functions adalah Azure Storage, yang menyimpan data ke antrean, tabel, dan blob di akun Azure Storage yang Anda tentukan.
Jenis data yang diserialisasikan dan dipertahankan
Daftar berikut menunjukkan berbagai jenis data yang akan diserialisasikan dan dipertahankan saat menggunakan fitur Durable Functions:
- Semua input dan output fungsi orkestrator, aktivitas, dan entitas, termasuk ID dan pengecualian yang tidak tertangani
- Nama fungsi orkestrator, aktivitas, dan entitas
- Nama acara dan payload eksternal
- Payload status orkestrasi kustom
- Pesan penghentian orkestrasi
- Payload timer yang tahan lama
- URL respons dan permintaan HTTP yang tahan lama, header, dan payload
- Payload panggilan dan sinyal entitas
- Payload negara entitas
Bekerja dengan data sensitif
Saat menggunakan penyedia Azure Storage, semua data secara otomatis dienkripsi saat tidak aktif. Namun, siapa pun yang memiliki akses ke akun penyimpanan dapat membaca data dalam bentuk yang tidak terenkripsi. Jika Anda memerlukan perlindungan yang lebih kuat untuk data sensitif, pertimbangkan untuk mengenkripsi data terlebih dahulu menggunakan kunci enkripsi Anda sendiri sehingga data dipertahankan dalam bentuk pra-enkripsinya.
Atau, pengguna .NET memiliki opsi untuk menerapkan penyedia serialisasi kustom yang menyediakan enkripsi otomatis. Contoh serialisasi kustom dengan enkripsi dapat ditemukan dalam sampel GitHub ini.
Catatan
Jika Anda memutuskan untuk menerapkan enkripsi tingkat aplikasi, ketahuilah bahwa orkestrasi dan entitas dapat ada untuk waktu yang tidak terbatas. Ini penting ketika tiba saatnya untuk memutar kunci enkripsi Anda karena orkestrasi atau entitas dapat berjalan lebih lama daripada kebijakan rotasi kunci Anda. Jika rotasi kunci terjadi, kunci yang digunakan untuk mengenkripsi data Anda mungkin tidak lagi tersedia untuk mendekripsinya saat orkestrasi atau entitas Anda dijalankan. Oleh karena itu enkripsi pelanggan direkomendasikan hanya ketika orkestrasi dan entitas diharapkan berjalan untuk jangka waktu yang relatif singkat.
Menyesuaikan serialisasi dan deserialisasi
Logika serialisasi default
Durable Functions untuk .NET dalam proses secara internal menggunakan Json.NET untuk membuat serial orkestrasi dan data entitas ke JSON. Pengaturan Json.NET default yang digunakan adalah:
Input, Output, dan Status:
JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.None,
DateParseHandling = DateParseHandling.None,
}
Pengecualian:
JsonSerializerSettings
{
ContractResolver = new ExceptionResolver(),
TypeNameHandling = TypeNameHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
}
Baca dokumentasi lebih rinci tentang di JsonSerializerSettingssini.
Menyesuaikan serialisasi dengan atribut .NET
Selama serialisasi, Json.NET mencari berbagai atribut pada kelas dan properti yang mengontrol bagaimana data diserialisasikan dan dideserialisasi dari JSON. Jika Anda memiliki kode sumber untuk jenis data yang diteruskan ke Durable Functions API, pertimbangkan untuk menambahkan atribut ini ke jenis untuk menyesuaikan serialisasi dan deserialisasi.
Menyesuaikan serialisasi dengan Injeksi Dependensi
Aplikasi fungsi yang menargetkan .NET dan berjalan pada runtime Functions V3 dapat menggunakan Injeksi Dependensi (DI) untuk menyesuaikan bagaimana data dan pengecualian diserialisasikan. Kode sampel berikut menunjukkan cara menggunakan DI untuk mengambil alih pengaturan serialisasi Json.NET default menggunakan implementasi IMessageSerializerSettingsFactory kustom antarmuka layanan dan IErrorSerializerSettingsFactory .
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
}
}
}
}