Gambaran umum model pemrograman

Durable Functions adalah ekstensi Azure Functions yang menambahkan kemampuan orkestrasi stateful ke aplikasi fungsi Anda. Aplikasi Durable Functions terdiri dari berbagai fungsi Azure, masing-masing memainkan peran tertentu: orkestrator, aktivitas, entitas, atau klien. Peran ini sesuai dengan jenis trigger dan pengikatan khusus yang disediakan oleh ekstensi Durable Functions.

Durable Task SDK memungkinkan Anda membangun aplikasi yang stateful dan toleran terhadap kesalahan pada platform komputasi apa pun. Aplikasi Anda mendefinisikan orkestrator, aktivitas, dan entitas sebagai kelas atau fungsi yang Anda daftarkan dengan pekerja. API klien terpisah memungkinkan Anda memulai dan mengelola instans orkestrasi.

Tabel berikut ini meringkas komponen pemrograman inti dan perannya:

Komponen Peranan Ditentukan oleh
Orkestrator Mengkoordinasikan logika alur kerja Pemicu orkestrasi
Aktivitas Menjalankan satu unit pekerjaan Pemicu aktivitas
Entitas Mengelola bagian kecil keadaan Pemicu entitas
Client Memulai dan mengelola orkestrasi dan entitas Pengikatan klien yang tahan lama
Komponen Peranan Ditentukan oleh
Orkestrator Mengkoordinasikan logika alur kerja Kelas atau fungsi yang terdaftar di pekerja
Aktivitas Menjalankan satu unit pekerjaan Kelas atau fungsi yang terdaftar di pekerja
Entitas Mengelola bagian kecil keadaan Kelas yang terdaftar dengan pekerja
Client Memulai dan mengelola orkestrasi dan entitas DurableTaskClient Antarmuka Pemrograman Aplikasi (API)

Orkestrator

Orkestrator menentukan alur kerja: tindakan apa yang harus diambil, dalam urutan apa, dan cara menangani hasilnya. Anda menulis logika orkestrator sebagai kode biasa menggunakan konstruksi aliran kontrol standar seperti perulangan, kondisional, dan blok coba/tangkap.

Orkestrator dapat menjadwalkan beberapa jenis tugas:

Orkestrator juga dapat berinteraksi dengan entitas.

Dalam Durable Functions, Anda menentukan orkestrator dengan menggunakan pengikatan pemicu orkestrasi. Pemicu menyediakan objek konteks yang Anda gunakan untuk menjadwalkan tugas dan menerima hasil.

Dalam SDK Durable Task, Anda menentukan orkestrator dengan menerapkan kelas atau fungsi dan mendaftarkannya dengan worker Durable Task. Orkestrator menerima objek konteks yang Anda gunakan untuk menjadwalkan tugas dan menerima hasil.

Penting

Kode orkestrator harus deterministik. Runtime Tugas Tahan Lama menggunakan sumber peristiwa dan pemutaran ulang untuk membangun kembali status orkestrator, sehingga kode nondeterministik dapat menyebabkan kegagalan atau kebuntuan. Untuk panduan terperinci, lihat Batasan kode orkestrator.

Untuk gambaran umum lengkap perilaku orkestrator, termasuk pemutaran ulang, identitas instans, dan penanganan kesalahan, lihat Orkestrasi tahan lama.

Aktivitas

Aktivitas adalah unit dasar pekerjaan dalam orkestrasi berketahanan tinggi. Setiap aktivitas biasanya mewakili satu tugas, seperti memanggil API web, menulis ke database, atau menghitung hasil. Orkestrator memanggil aktivitas untuk melaksanakan pekerjaan inti mereka.

Aktivitas berbeda dari orkestrator dalam beberapa cara utama:

  • Tidak ada batasan kode. Orkestrator harus deterministik, tetapi aktivitas dapat menjalankan kode apa pun, termasuk operasi yang tidak deterministik atau berjalan lama.
  • Setidaknya sekali eksekusi. Runtime menjamin bahwa setiap aktivitas dijalankan setidaknya sekali selama orkestrasi. Jika kegagalan terjadi setelah aktivitas selesai tetapi sebelum hasilnya direkam, runtime mungkin menjalankannya kembali.
  • Tanggung jawab tunggal. Setiap aktivitas menerima satu input dan mengembalikan satu output. Untuk meneruskan beberapa nilai, gunakan jenis kompleks atau kumpulan.

Anda menentukan fungsi aktivitas dengan menggunakan pengikatan pemicu aktivitas. Pemicu menyediakan input yang diteruskan orkestrator saat menjadwalkan aktivitas.

Anda menentukan aktivitas dengan mengimplementasikan kelas atau fungsi dan mendaftarkannya dengan pekerja Durable Task. Aktivitas menerima input yang diteruskan orkestrator saat menjadwalkannya.

Nota

Karena aktivitas hanya menjamin eksekusi minimal sekali, buat logika aktivitas Anda idempoten jika memungkinkan. Misalnya, gunakan "upserts" alih-alih "inserts", atau periksa hasil yang ada sebelum membuat resource baru.

Aktivitas dapat berjalan secara serial, paralel, atau dalam kombinasi keduanya.

Entities

Entitas mengelola bagian-bagian status yang kecil dan tahan lama. Setiap entitas memiliki identitas unik dan sekumpulan operasi bernama yang dapat membaca atau memperbarui status internalnya. Entitas berbeda dari orkestrator karena mereka mengelola status secara eksplisit melalui operasi alih-alih secara implisit melalui alur kontrol. Mereka juga berbeda dari orkestrator karena mereka tidak memiliki pembatasan kode yang sama - operasi entitas dapat menjalankan kode apa pun, termasuk operasi yang tidakdeterministik atau berjalan lama.

Penggunaan umum untuk entitas meliputi:

  • Menggabungkan data dari beberapa sumber
  • Menerapkan kunci terdistribusi atau semafor
  • Memodelkan objek yang menyimpan status seperti keranjang belanja atau sesi permainan

Entitas menjalankan operasi secara serial: hanya satu operasi yang berjalan pada satu waktu untuk instans entitas tertentu. Eksekusi serial ini mencegah konflik keserentakan tanpa memerlukan penguncian eksplisit.

Anda menentukan fungsi entitas dengan menggunakan pengikatan pemicu entitas.

Nota

Fungsi entitas didukung di .NET, JavaScript/TypeScript, Python, dan Java, tetapi tidak di PowerShell.

Anda menentukan entitas dengan menerapkan kelas dan mendaftarkannya dengan pekerja Tugas Tahan Lama.

Nota

Dukungan entitas tersedia di SDK .NET, JavaScript/TypeScript, dan Python. SDK Java saat ini tidak mendukung entitas.

Untuk panduan lengkap untuk menentukan, memanggil, dan mengelola entitas, lihat Entitas tahan lama.

Client

Komponen klien adalah cara Anda berinteraksi dengan orkestrasi dan entitas dari luar orkestrasi. Operasi klien umum meliputi:

  • Menjadwalkan instans orkestrasi baru
  • Memeriksa status orkestrasi yang sedang berjalan atau yang telah selesai
  • Memicu peristiwa ke orkestrasi yang sedang menunggu
  • Menangguhkan dan melanjutkan instans orkestrasi
  • Mengakhiri instance orkestrasi
  • Memberi sinyal operasi entitas dan membaca status entitas

Fungsi non-orkestrator apa pun dapat bertindak sebagai fungsi klien. Apa yang menjadikannya klien adalah penggunaan pengikatan output klien yang tahan lama. Misalnya, Anda dapat memulai orkestrasi dari fungsi yang dipicu oleh HTTP, fungsi yang dipicu oleh antrian, atau fungsi yang dipicu oleh timer.

Pengikatan klien yang tahan lama juga menyediakan API untuk berinteraksi dengan entitas, termasuk memberi sinyal operasi entitas dan membaca status entitas. Untuk informasi selengkapnya, lihat pengikatan klien entitas.

Dalam Durable Task SDK, Anda berinteraksi dengan orkestrasi dan entitas melalui kelas DurableTaskClient. Anda membuat instans klien dalam kode aplikasi dan memanggil metodenya untuk memulai, melakukan kueri, atau mengelola orkestrasi dan instans entitas. Klien dapat digunakan dari bagian mana pun dari aplikasi Anda — titik akhir HTTP, layanan latar belakang, aplikasi konsol, atau kode lainnya.

Untuk informasi terperinci tentang semua operasi manajemen instans, termasuk sampel kode untuk setiap bahasa, lihat Mengelola instans orkestrasi.

Langkah berikutnya

Mulailah dengan membuat aplikasi Durable Function pertama Anda: