Penyedia penyimpanan Fungsi yang Tahan Lama

Durable Functions adalah sekumpulan pemicu dan pengikatan Azure Functions yang didukung secara internal oleh Durable Task Framework (DTFx). DTFx mendukung berbagai penyedia penyimpanan backend, termasuk penyedia Azure Storage yang digunakan oleh Durable Functions. Mulai dari Durable Functions v2.5.0, pengguna dapat mengonfigurasi aplikasi fungsi mereka untuk menggunakan penyedia penyimpanan DTFx selain penyedia Azure Storage.

Catatan

Untuk banyak aplikasi fungsi, penyedia Azure Storage default untuk Durable Functions kemungkinan sudah cukup dan merupakan yang paling mudah digunakan karena tidak memerlukan konfigurasi tambahan. Namun, terdapat konsekuensi biaya, skalabilitas, dan manajemen data yang mungkin mendukung penggunaan penyedia penyimpanan alternatif.

Dua penyedia penyimpanan alternatif dikembangkan untuk digunakan dengan Durable Functions dan Durable Task Framework, yaitu penyedia penyimpanan Netherite dan penyedia penyimpanan Microsoft SQL Server (MSSQL). Artikel ini menjelaskan ketiga penyedia yang didukung, membandingkannya satu sama lain, dan menyediakan informasi dasar tentang cara mulai menggunakannya.

Catatan

Saat ini memigrasikan data dari satu penyedia penyimpanan ke penyedia penyimpanan lainnya tidak dimungkinkan. Jika Anda ingin menggunakan penyedia penyimpanan baru, Anda harus membuat aplikasi baru yang dikonfigurasi dengan penyedia penyimpanan baru.

Azure Storage

Azure Storage adalah penyedia penyimpanan default untuk Durable Functions. Ini menggunakan antrean, tabel, dan blob untuk mempertahankan status orkestrasi dan entitas. Ini juga menggunakan blob dan lease blob untuk mengelola partisi. Dalam banyak kasus, akun penyimpanan yang digunakan untuk menyimpan status runtime Durable Functions sama dengan akun penyimpanan default yang digunakan oleh Azure Functions (AzureWebJobsStorage). Namun, Anda juga dapat mengonfigurasi Durable Functions dengan akun penyimpanan terpisah. Penyedia Azure Storage disertakan dalam ekstensi Durable Functions dan tidak memiliki dependensi lain.

Keuntungan utama penyedia Azure Storage meliputi:

  • Tidak perlu penyiapan - Anda dapat menggunakan akun penyimpanan yang dibuat untuk Anda oleh pengalaman penyiapan aplikasi fungsi.
  • Model penagihan tanpa server berbiaya rendah - Azure Storage memiliki model harga berbasis konsumsi berdasarkan sepenuhnya pada penggunaan (informasi selengkapnya).
  • Dukungan alat terbaik - Azure Storage menawarkan emulasi lokal lintas platform dan terintegrasi dengan Visual Studio, Visual Studio Code, dan Alat Inti Azure Functions.
  • Paling matang - Azure Storage adalah backend penyimpanan asli dan paling teruji untuk Durable Functions.
  • Untuk menyambungkan ke penyedia penyimpanan, pratinjau dukungan untuk menggunakan identitas alih-alih menggunakan rahasia.

Kode sumber untuk komponen DTFx dari penyedia penyimpanan Azure Storage dapat ditemukan di repo GitHub Azure/durabletask.

Catatan

Akun Microsoft Azure Storage tujuan umum standar diperlukan saat menggunakan penyedia Microsoft Azure Storage. Semua jenis akun penyimpanan lainnya tidak didukung. Kami sangat merekomendasikan menggunakan akun penyimpanan tujuan umum v1 warisan karena akun penyimpanan v2 yang lebih baru dapat secara signifikan lebih mahal untuk beban kerja Durable Functions. Untuk mengetahui informasi selengkapnya tentang jenis akun Azure Storage, lihat dokumentasi gambaran umum akun Storage.

Netherite

Backend penyimpanan Netherite dirancang dan dikembangkan oleh Microsoft Research. Ini menggunakan Azure Event Hubsdan teknologi database FASTER di atas Azure Page Blobs. Desain Netherite memungkinkan pemrosesan orkestrasi dan entitas dengan throughput yang jauh lebih tinggi dibandingkan dengan penyedia lain. Dalam beberapa skenario tolok ukur, throughput terbukti meningkat lebih dari urutan besarnya jika dibandingkan dengan penyedia Azure Storage default.

Keuntungan utama penyedia penyimpanan Netherite meliputi:

  • Throughput yang jauh lebih tinggi dengan biaya yang lebih rendah dibandingkan dengan penyedia penyimpanan lainnya.
  • Mendukung pengoptimalan performa harga, memungkinkan Anda meningkatkan skala performa sesuai kebutuhan.
  • Mendukung hingga 32 partisi data dengan SKU Event Hubs Basic dan Standard.
  • Lebih hemat biaya daripada penyedia lain untuk beban kerja throughput tinggi.

Anda dapat mempelajari lebih lanjut tentang detail teknis penyedia penyimpanan Netherite, termasuk cara mulai menggunakannya, dalam dokumentasi Netherite. Kode sumber untuk penyedia penyimpanan Netherite dapat ditemukan di repo GitHub microsoft/durabletask-netherite. Evaluasi yang lebih mendalam dari penyedia penyimpanan Netherite juga tersedia di makalah penelitian berikut: Serverless Workflows with Durable Functions and Netherite.

Catatan

Nama Netherite berasal dari dunia Minecraft.

Microsoft SQL Server (MSSQL)

Penyedia penyimpanan Microsoft SQL Server (MSSQL) mempertahankan semua status ke dalam database Microsoft SQL Server. Hal ini kompatibel dengan penyebaran SQL Server yang dihosting secara lokal dan dihosting pada cloud, termasuk Azure SQL Database.

Keuntungan utama penyedia penyimpanan MSSQL meliputi:

  • Mendukung lingkungan yang terputus - tidak ada konektivitas Azure yang diperlukan saat menggunakan penginstalan SQL Server.
  • Portabel di beberapa lingkungan dan cloud, termasuk yang dihosting Azure dan lokal.
  • Konsistensi data yang kuat, memungkinkan pencadangan/pemulihan dan failover tanpa kehilangan data.
  • Dukungan asli untuk enkripsi data kustom (fitur SQL Server).
  • Integrasi dengan aplikasi database yang ada melalui prosedur bawaan yang disimpan.

Anda dapat mempelajari lebih lanjut tentang detail teknis penyedia penyimpanan MSSQL, termasuk cara mulai menggunakannya, dalam dokumentasi penyedia Microsoft SQL. Kode sumber untuk penyedia penyimpanan MSSQL dapat ditemukan di repo GitHub microsoft/durabletask-mssql.

Mengonfigurasi penyedia penyimpanan alternatif

Mengonfigurasi penyedia penyimpanan alternatif umumnya adalah proses dua langkah:

  1. Tambahkan paket NuGet yang sesuai ke aplikasi fungsi Anda (persyaratan ini bersifat sementara untuk aplikasi menggunakan bundel ekstensi).
  2. Perbarui file host.json untuk menentukan penyedia penyimpanan mana yang ingin Anda gunakan.

Jika tidak ada penyedia penyimpanan yang dikonfigurasi secara eksplisit di host.json, penyedia Azure Storage akan diaktifkan secara default.

Mengonfigurasi penyedia penyimpanan Azure

Penyedia Azure Storage adalah penyedia penyimpanan default dan tidak memerlukan konfigurasi eksplisit, referensi paket NuGet, atau referensi bundel ekstensi. Anda dapat menemukan sekumpulan lengkap opsi konfigurasi host.jsondi sini, di bawah jalur extensions/durableTask/storageProvider.

Koneksi

Properti dalam host.json connectionName adalah referensi untuk konfigurasi lingkungan yang menentukan bagaimana aplikasi seharusnya terhubung ke Microsoft Azure Storage. Ini mungkin menentukan:

Jika nilai yang dikonfigurasi adalah kecocokan persis untuk pengaturan tunggal dan kecocokan awalan untuk pengaturan lainnya, kecocokan persis akan digunakan. Jika dalam host.json tidak ada nilai yang ditentukan, nilai defaultnya adalah "AzureWebJobsStorage".

Koneksi berbasis identitas

Jika Anda menggunakan ekstensi versi 2.7.0 atau yang lebih tinggi dan penyedia penyimpanan Azure, alih-alih menggunakan string koneksi dengan rahasia, Anda dapat meminta aplikasi menggunakan identitas Microsoft Entra. Untuk melakukan ini, Anda harus menentukan pengaturan di bawah awalan umum yang memetakan ke properti connectionName dalam konfigurasi pemicu dan pengikatan.

Untuk menggunakan koneksi berbasis identitas untuk Durable Functions, konfigurasikan pengaturan aplikasi berikut:

Properti Templat variabel lingkungan Deskripsi Contoh nilai
URI Blob service <CONNECTION_NAME_PREFIX>__blobServiceUri URI data plane dari layanan blob akun penyimpanan, menggunakan skema HTTPS. https://<storage_account_name>.blob.core.windows.net
URI layanan Antrean <CONNECTION_NAME_PREFIX>__queueServiceUri URI data plane dari layanan antrean akun penyimpanan, menggunakan skema HTTPS. https://<storage_account_name>.queue.core.windows.net
URI layanan Tabel <CONNECTION_NAME_PREFIX>__tableServiceUri URI data plane dari layanan tabel akun penyimpanan, menggunakan skema HTTPS. https://<storage_account_name>.table.core.windows.net

Properti tambahan dapat diatur untuk menyesuaikan koneksi. Lihat Properti umum untuk koneksi berbasis identitas.

Saat dihosting di layanan Azure Functions, koneksi berbasis identitas menggunakan identitas terkelola. Identitas yang ditetapkan sistem digunakan secara default, meskipun identitas yang ditetapkan pengguna dapat ditentukan dengan credential dan clientID properti. Perhatikan bahwa mengonfigurasi identitas yang ditetapkan oleh pengguna dengan ID sumber daya tidak didukung. Saat dijalankan dalam konteks lain, seperti pengembangan lokal, identitas pengembang Anda digunakan sebagai gantinya, meskipun ini dapat dikustomisasi. Lihat Pengembangan lokal dengan koneksi berbasis identitas.

Memberikan izin kepada identitas

Identitas apa pun yang digunakan harus memiliki izin untuk melakukan tindakan yang dimaksudkan. Untuk sebagian besar layanan Azure, ini berarti Anda perlu menetapkan peran di Azure RBAC, menggunakan peran bawaan atau kustom yang menyediakan izin tersebut.

Penting

Beberapa izin mungkin diekspos oleh layanan target yang tidak diperlukan untuk semua konteks. Jika memungkinkan, patuhi prinsip hak istimewa paling rendah, dengan memberikan identitas hanya hak istimewa yang diperlukan. Misalnya, jika aplikasi hanya perlu dapat membaca dari sumber data, gunakan peran yang hanya memiliki izin untuk membaca. Tidak pantas untuk menetapkan peran yang juga memungkinkan menulis ke layanan itu, karena ini akan menjadi izin yang berlebihan untuk operasi baca. Demikian pula, Anda ingin memastikan penetapan peran hanya mencakup sumber daya yang perlu dibaca.

Anda akan perlu membuat penetapan peran yang menyediakan akses ke penyimpanan Azure saat runtime. Peran manajemen seperti Pemilik tidak cukup. Peran bawaan berikut direkomendasikan saat menggunakan ekstensi Durable Functions dalam operasi normal.

Aplikasi Anda mungkin memerlukan izin tambahan berdasarkan kode yang Anda tulis. Jika Anda menggunakan perilaku default atau secara eksplisit mengatur connectionName ke "AzureWebJobsStorage", lihat Menyambungkan ke penyimpanan host dengan identitas untuk pertimbangan izin lainnya.

Mengonfigurasi penyedia penyimpanan Netherite

Mengaktifkan penyedia penyimpanan Netherite memerlukan perubahan konfigurasi di Anda host.json. Untuk pengguna C#, ini juga memerlukan langkah penginstalan tambahan.

host.json Konfigurasi

Contoh host.json berikut menunjukkan konfigurasi minimum yang diperlukan untuk mengaktifkan penyedia penyimpanan Netherite.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "Netherite",
        "storageConnectionName": "AzureWebJobsStorage",
        "eventHubsConnectionName": "EventHubsConnection"
      }
    }
  }
}

Untuk petunjuk penyiapan yang lebih mendetail, lihat dokumentasi memulai Netherite.

Instal ekstensi Netherite (hanya.NET)

Catatan

Jika aplikasi Anda menggunakan Bundel Ekstensi, Anda harus mengabaikan bagian ini karena Bundel Ekstensi menghapus kebutuhan akan manajemen Ekstensi manual.

Anda harus menginstal versi terbaru Ekstensi Netherite di NuGet. Ini biasanya berarti menyertakan referensi ke dalam file Anda .csproj dan membangun proyek.

Paket Ekstensi untuk diinstal tergantung pada pekerja .NET yang Anda gunakan:

Mengonfigurasi penyedia penyimpanan MSSQL

Mengaktifkan penyedia penyimpanan MSSQL memerlukan perubahan konfigurasi di Anda host.json. Untuk pengguna C#, ini juga memerlukan langkah penginstalan tambahan.

host.json Konfigurasi

Contoh berikut menunjukkan konfigurasi minimum yang diperlukan untuk mengaktifkan penyedia penyimpanan MSSQL.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "mssql",
        "connectionStringName": "SQLDB_Connection"
      }
    }
  }
}

Untuk petunjuk penyiapan yang lebih mendetail, lihat dokumentasi memulai MSSQL.

Instal ekstensi Durable Task MSSQL (hanya.NET)

Catatan

Jika aplikasi Anda menggunakan Bundel Ekstensi, Anda harus mengabaikan bagian ini karena Bundel Ekstensi menghapus kebutuhan akan manajemen Ekstensi manual.

Anda harus menginstal versi terbaru Ekstensi penyedia penyimpanan MSSQL di NuGet. Ini biasanya berarti menyertakan referensi ke dalam file Anda .csproj dan membangun proyek.

Paket Ekstensi untuk diinstal tergantung pada pekerja .NET yang Anda gunakan:

Membandingkan penyedia penyimpanan

Ada banyak tradeoff yang signifikan antara berbagai penyedia penyimpanan yang didukung. Tabel berikut dapat digunakan untuk membantu Anda memahami tradeoff ini dan memutuskan penyedia penyimpanan mana yang terbaik untuk kebutuhan Anda.

Penyedia penyimpanan Azure Storage Netherite MSSQL
Status dukungan resmi ✅ Tersedia secara umum (GA) ✅ Tersedia secara umum (GA) ✅ Tersedia secara umum (GA)
Dependensi eksternal Akun Azure Storage (tujuan umum v1) Azure Event Hubs
Akun Azure Storage (tujuan umum)
Database SQL Server 2019 atau Azure SQL
Opsi pengembangan dan emulasi lokal Azurite v3.12+ (lintas platform) Mendukung emulasi dalam memori hub tugas (informasi selengkapnya) SQL Server Developer Edition (mendukung kontainer Windows, Linux, dan Docker)
Konfigurasi hub tugas Eksplisit Eksplisit Implisit secara default (informasi selengkapnya)
Throughput maksimum Sedang Sangat tinggi Sedang
Orkestrasi maksimum/penskalaan entitas (node) 16 32 T/A
Penskalaan aktivitas maksimum (node) T/A 32 T/A
Dukungan penskalaan KEDA 2.0
(informasi selengkapnya)
❌ Tidak didukung ❌ Tidak didukung ✅Didukung menggunakan scaler MSSQL (informasi selengkapnya)
Dukungan untuk bundel ekstensi (disarankan untuk aplikasi non-.NET) ✅ Didukung sepenuhnya ✅ Didukung sepenuhnya ✅ Didukung sepenuhnya
Performa harga dapat dikonfigurasi? ❌ Tidak ✅ Ya (TU dan CU Event Hubs) ✅ Ya (SQL vCPU)
Dukungan lingkungan terputus ❌ Konektivitas Azure diperlukan ❌ Konektivitas Azure diperlukan ✅ Didukung sepenuhnya
Koneksi berbasis identitas ✅ Didukung sepenuhnya ❌ Tidak didukung ⚠️ Memerlukan pemicu yang digerakkan oleh runtime

Langkah berikutnya