Rekomendasi untuk mengembangkan pekerjaan latar belakang

Berlaku untuk rekomendasi daftar periksa Keandalan Azure Well-Architected Framework ini:

RE:07 Memperkuat ketahanan dan pemulihan beban kerja Anda dengan menerapkan langkah-langkah pelestarian diri dan penyembuhan diri. Bangun kemampuan ke dalam solusi dengan menggunakan pola keandalan berbasis infrastruktur dan pola desain berbasis perangkat lunak untuk menangani kegagalan komponen dan kesalahan sementara. Bangun kemampuan ke dalam sistem untuk mendeteksi kegagalan komponen solusi dan secara otomatis memulai tindakan korektif sementara beban kerja terus beroperasi pada fungsionalitas penuh atau berkurang.

Panduan terkait:Kesalahan | sementaraPelestarian mandiri

Panduan ini menjelaskan rekomendasi untuk mengembangkan pekerjaan latar belakang. Pekerjaan latar belakang berjalan secara otomatis tanpa perlu interaksi pengguna. Banyak aplikasi memerlukan pekerjaan latar belakang yang berjalan independen dari UI.

Beberapa contoh pekerjaan latar belakang termasuk pekerjaan batch, tugas pemrosesan intensif, dan proses yang berjalan lama, seperti alur kerja. Aplikasi memulai pekerjaan dan memproses permintaan interaktif dari pengguna. Misalnya, jika aplikasi perlu menghasilkan gambar mini gambar yang diunggah pengguna, pekerjaan latar belakang dapat dilakukan untuk menghasilkan gambar mini dan menyimpannya ke penyimpanan. Pengguna tidak perlu menunggu proses selesai. Sebagai contoh lain, pelanggan menempatkan pesanan, yang memulai alur kerja latar belakang yang memproses pesanan. Pelanggan terus menelusuri aplikasi web saat pekerjaan latar belakang berjalan. Setelah pekerjaan latar belakang selesai, ia memperbarui data pesanan yang disimpan dan mengirim email ke pelanggan untuk mengonfirmasi pesanan.

Pekerjaan latar belakang membantu meminimalkan beban pada UI aplikasi, yang meningkatkan ketersediaan dan mengurangi waktu respons interaktif.

Strategi desain utama

Untuk memilih tugas mana yang akan ditetapkan sebagai pekerjaan latar belakang, pertimbangkan apakah tugas berjalan tanpa interaksi pengguna dan apakah UI perlu menunggu tugas selesai. Tugas yang mengharuskan pengguna atau UI menunggu saat dijalankan biasanya merupakan pekerjaan latar belakang yang tidak sesuai.

Jenis pekerjaan latar belakang

Beberapa contoh pekerjaan latar belakang adalah:

  • Pekerjaan intensif CPU, seperti perhitungan matematis atau analisis model struktural.

  • Pekerjaan intensif I/O, seperti menjalankan serangkaian transaksi penyimpanan atau mengindeks file.

  • Pekerjaan batch, seperti pembaruan data setiap malam atau pemrosesan terjadwal.

  • Alur kerja yang berjalan lama, seperti pemenuhan pesanan atau layanan dan sistem provisi.

  • Pemrosesan data sensitif yang mentransfer tugas ke lokasi yang lebih aman untuk diproses. Misalnya, Anda mungkin tidak ingin memproses data sensitif dalam aplikasi web. Sebagai gantinya, Anda dapat menggunakan pola seperti pola Gatekeeper untuk mentransfer data ke proses latar belakang terisolasi yang memiliki akses ke penyimpanan yang dilindungi.

Pemicu

Mulai pekerjaan latar belakang dengan:

  • Pemicu berbasis peristiwa: Peristiwa, biasanya tindakan pengguna atau langkah dalam alur kerja, memicu tugas.

  • Pemicu berbasis jadwal: Jadwal yang didasarkan pada timer memanggil tugas. Pekerjaan dapat dijadwalkan secara berulang atau untuk satu eksekusi.

Pemicu berdasarkan peristiwa

Tindakan memicu pemanggilan berbasis peristiwa yang memulai tugas latar belakang. Contoh pemicu berbasis peristiwa meliputi:

  • UI atau pekerjaan yang berbeda menempatkan pesan dalam antrean, seperti yang dijelaskan dalam gaya arsitektur Web-Queue-Worker. Pesan berisi data tentang tindakan yang dilakukan sebelumnya, seperti pelanggan yang melakukan pesanan. Pekerjaan latar belakang memantau antrean ini dan mendeteksi kedatangan pesan baru. Ini membaca pesan dan menggunakan data pesan sebagai input untuk pekerjaan latar belakang. Pola ini disebut komunikasi berbasis pesan asinkron.

  • UI atau pekerjaan yang berbeda menyimpan atau memperbarui nilai yang ada di penyimpanan. Pekerjaan latar belakang memantau penyimpanan dan mendeteksi perubahan. Ini membaca data dan menggunakannya sebagai input untuk pekerjaan latar belakang.

  • UI atau pekerjaan yang berbeda membuat permintaan ke titik akhir, seperti URI HTTPS atau API yang diekspos sebagai layanan web. Sebagai bagian dari permintaan, UI atau pekerjaan mentransfer data yang diperlukan tugas latar belakang. Titik akhir atau layanan web memanggil proses di latar belakang, yang menggunakan data sebagai inputnya.

Contoh tugas lain yang cocok untuk pemanggilan berbasis peristiwa termasuk pemrosesan gambar, alur kerja, mengirim informasi ke layanan jarak jauh, mengirim pesan email, dan memprovisikan pengguna baru dalam aplikasi multipenyewa.

Pemicu berdasarkan jadwal

Timer memicu pemanggilan berbasis jadwal yang memulai tugas latar belakang. Contoh pemicu berbasis jadwal meliputi:

  • Timer yang berjalan secara lokal dalam aplikasi atau sebagai bagian dari sistem operasi aplikasi secara teratur memanggil tugas latar belakang.

  • Timer yang berjalan di aplikasi lain, seperti Azure Logic Apps, secara teratur mengirim permintaan ke API atau layanan web. API atau layanan web memanggil proses di latar belakang.

  • Proses atau aplikasi terpisah memulai timer yang memanggil tugas latar belakang setelah penundaan waktu atau pada waktu tertentu.

Contoh tugas lain yang cocok untuk pemanggilan berbasis jadwal termasuk rutinitas pemrosesan batch (seperti memperbarui daftar produk terkait untuk pelanggan berdasarkan perilaku mereka baru-baru ini), tugas pemrosesan data rutin (seperti memperbarui indeks atau menghasilkan hasil akumulasi), analisis data untuk laporan harian, pembersihan retensi data, dan pemeriksaan konsistensi data.

Jika Anda menggunakan tugas berbasis jadwal yang harus berjalan sebagai satu instans, tinjau pertimbangan berikut:

  • Jika instans komputasi yang menjalankan penjadwal, seperti komputer virtual (VM) yang menggunakan tugas terjadwal Windows, diskalakan, maka Anda menjalankan beberapa instans penjadwal. Beberapa instans penjadwal dapat memulai beberapa instans tugas. Untuk informasi selengkapnya, lihat Apa arti idempotensi dalam sistem perangkat lunak?

  • Jika tugas berjalan lebih lama dari periode antara peristiwa penjadwal, penjadwal mungkin memulai instans tugas lain saat tugas sebelumnya berjalan.

Mengembalikan hasil

Pekerjaan latar belakang berjalan secara asinkron dalam proses terpisah, atau bahkan di lokasi terpisah, dari UI atau proses yang memanggil pekerjaan latar belakang. Idealnya, pekerjaan latar belakang adalah operasi kebakaran dan lupakan . Kemajuan runtime mereka tidak berpengaruh pada UI atau proses panggilan, yang berarti bahwa proses panggilan tidak menunggu tugas selesai. UI dan proses panggilan tidak dapat mendeteksi kapan tugas berakhir.

Jika Anda memerlukan tugas latar belakang untuk berkomunikasi dengan tugas panggilan untuk menunjukkan kemajuan atau penyelesaian, Anda harus menerapkan mekanisme. Beberapa contohnya adalah:

  • Tulis nilai indikator status ke penyimpanan yang dapat diakses oleh UI atau tugas pemanggil, yang dapat memantau atau memeriksa nilai ini. Data lain yang dikembalikan tugas latar belakang ke pemanggil dapat ditempatkan di penyimpanan yang sama.

  • Buat antrean balasan yang dipantau UI atau pemanggil. Tugas latar belakang dapat mengirim pesan ke antrean yang menunjukkan status. Data yang dikembalikan tugas latar belakang ke pemanggil dapat ditempatkan dalam pesan. Untuk Azure Service Bus, gunakan ReplyTo properti dan CorrelationId untuk menerapkan kemampuan ini.

  • Mengekspos API atau titik akhir dari proses di latar belakang yang dapat diakses oleh antarmuka pengguna atau pemanggil untuk mendapatkan informasi status. Respons dapat menyertakan data yang dikembalikan tugas latar belakang ke pemanggil.

  • Konfigurasikan tugas latar belakang untuk memanggil kembali ke UI atau pemanggil melalui API untuk menunjukkan status pada titik yang telah ditentukan sebelumnya atau setelah selesai. Anda dapat menggunakan peristiwa yang diangkat secara lokal atau mekanisme terbitkan dan berlangganan. Permintaan atau payload peristiwa dapat menyertakan data yang dikembalikan tugas latar belakang ke pemanggil.

Pekerjaan latar belakang partisi

Jika Anda menyertakan pekerjaan latar belakang dalam instans komputasi yang ada, pertimbangkan bagaimana perubahan ini memengaruhi atribut kualitas instans komputasi dan pekerjaan latar belakang. Pertimbangkan faktor-faktor ini untuk memutuskan apakah akan menempatkan tugas dengan instans komputasi yang ada atau memisahkannya menjadi instans komputasi yang berbeda:

  • Ketersediaan: Tugas latar belakang mungkin tidak memerlukan tingkat ketersediaan yang sama dengan bagian lain dari aplikasi, khususnya UI dan bagian yang secara langsung melibatkan interaksi pengguna. Tugas latar belakang mungkin memiliki toleransi yang lebih tinggi untuk latensi, kegagalan koneksi yang dicoba kembali, dan faktor lain yang memengaruhi ketersediaan karena operasi dapat diantrekan. Namun, harus ada kapasitas yang cukup untuk mencegah permintaan yang dicadangkan yang dapat memblokir antrean dan memengaruhi seluruh aplikasi.

  • Skalabilitas: Tugas latar belakang kemungkinan memiliki persyaratan skalabilitas yang berbeda dibandingkan dengan UI dan bagian interaktif aplikasi. Anda mungkin perlu menskalakan UI untuk memenuhi puncak permintaan. Tugas latar belakang yang luar biasa dapat berjalan selama waktu yang lebih sibuk dan dengan lebih sedikit instans komputasi.

  • Ketahanan: Jika instans komputasi yang hanya menghosting tugas latar belakang gagal, itu mungkin tidak mempengaruhi seluruh aplikasi secara fatal. Permintaan untuk tugas-tugas ini dapat diantrekan atau ditunda hingga tugas tersedia. Jika instans komputasi atau tugas dapat dimulai ulang dalam interval yang sesuai, itu mungkin tidak memengaruhi pengguna aplikasi.

  • Keamanan: Tugas latar belakang mungkin memiliki persyaratan atau batasan keamanan yang berbeda dibandingkan dengan UI atau bagian lain dari aplikasi. Gunakan instans komputasi terpisah untuk menentukan lingkungan keamanan yang berbeda untuk tugas tersebut. Untuk memaksimalkan keamanan dan pemisahan, Anda juga dapat menggunakan pola seperti Gatekeeper untuk mengisolasi instans komputasi latar belakang dari UI.

  • Performa: Pilih jenis instans komputasi untuk tugas latar belakang yang secara khusus cocok dengan persyaratan performa tugas. Anda mungkin menggunakan opsi komputasi yang lebih murah jika tugas tidak memerlukan kemampuan pemrosesan yang sama dengan UI. Atau Anda mungkin menggunakan instans yang lebih besar jika tugas memerlukan lebih banyak kapasitas dan sumber daya.

  • Pengelolaan: Tugas latar belakang mungkin memiliki ritme pengembangan dan penyebaran yang berbeda dibandingkan dengan kode aplikasi utama atau UI. Untuk menyederhanakan pembaruan dan penerapan versi, sebarkan tugas latar belakang ke instans komputasi terpisah.

  • Biaya: Jika Anda menambahkan instans komputasi untuk menjalankan tugas latar belakang, biaya hosting akan meningkat. Pertimbangkan dengan cermat tradeoff antara lebih banyak kapasitas dan biaya tambahan.

Untuk informasi selengkapnya, lihat pola Pemilihan Pemimpin dan pola Konsumen Yang Bersaing.

Konflik

Jika Anda memiliki beberapa instans pekerjaan latar belakang, mereka mungkin bersaing untuk akses ke sumber daya dan layanan, seperti database dan penyimpanan. Akses bersamaan ini dapat mengakibatkan ketidakcocokan sumber daya, yang dapat menyebabkan konflik ketersediaan layanan dan membahayakan integritas data yang ada di penyimpanan. Atasi ketidakcocokan sumber daya dengan menggunakan pendekatan penguncian pesimis. Pendekatan ini mencegah instans tugas yang bersaing mengakses layanan atau data yang rusak secara bersamaan.

Pendekatan lain untuk mengatasi konflik adalah menentukan tugas latar belakang sebagai database tunggal, sehingga hanya satu instans yang berjalan. Namun, pendekatan ini menghilangkan manfaat keandalan dan performa yang disediakan konfigurasi beberapa instans. Kerugian ini terutama berlaku jika UI memasok pekerjaan yang cukup untuk menjaga lebih dari satu tugas latar belakang sibuk.

Pastikan bahwa tugas latar belakang dapat dimulai ulang secara otomatis dan memiliki kapasitas yang cukup untuk menangani puncak permintaan. Alokasikan instans komputasi dengan sumber daya yang memadai, terapkan mekanisme antrean yang menyimpan permintaan untuk dijalankan ketika permintaan menurun, atau gunakan kombinasi teknik ini.

Koordinasi

Tugas latar belakang bisa rumit dan memerlukan beberapa tugas untuk dijalankan. Dalam skenario ini, adalah umum untuk membagi tugas menjadi langkah-langkah diskrit atau subtugas yang lebih kecil yang dapat dijalankan oleh beberapa konsumen. Pekerjaan multistep lebih efisien dan lebih fleksibel karena langkah individual sering digunakan kembali dalam beberapa pekerjaan. Juga mudah untuk menambahkan, menghapus, atau memodifikasi urutan langkah-langkah.

Ini bisa menjadi tantangan untuk mengoordinasikan beberapa tugas dan langkah-langkah, tetapi ada tiga pola umum untuk memandu solusi Anda:

  • Menguraikan tugas menjadi beberapa langkah yang dapat digunakan kembali. Aplikasi mungkin diperlukan untuk melakukan berbagai tugas dengan kompleksitas yang berbeda pada informasi yang diprosesnya. Pendekatan yang mudah tetapi tidak fleksibel untuk menerapkan aplikasi seperti itu adalah dengan melakukan pemrosesan ini sebagai modul monolitik. Tetapi pendekatan ini kemungkinan akan mengurangi peluang untuk merefaktor kode, mengoptimalkannya, atau menggunakannya kembali jika aplikasi memerlukan bagian dari pemrosesan yang sama di tempat lain. Untuk informasi selengkapnya, lihat Pola Pipa dan Filter.

  • Mengelola orkestrasi langkah-langkah untuk tugas. Aplikasi mungkin melakukan tugas yang terdiri dari banyak langkah, beberapa di antaranya mungkin memanggil layanan jarak jauh atau mengakses sumber daya jarak jauh. Terkadang langkah-langkah individu independen satu sama lain, tetapi mereka diatur oleh logika aplikasi yang mengimplementasikan tugas. Untuk informasi selengkapnya, lihat Pola Scheduler Agent Supervisor.

  • Kelola pemulihan untuk langkah-langkah tugas yang gagal. Jika satu atau beberapa langkah gagal, aplikasi mungkin perlu membatalkan pekerjaan yang dilakukan serangkaian langkah, yang bersama-sama menentukan operasi yang akhirnya konsisten. Untuk informasi selengkapnya, lihat Pola transaksi kompensasi.

Pertimbangan ketahanan

Buat tugas latar belakang yang tangguh untuk menyediakan layanan yang andal untuk aplikasi. Saat Anda merencanakan dan mendesain tugas latar belakang, pertimbangkan poin-poin berikut:

  • Tugas latar belakang perlu menangani hidupkan ulang dengan anggun tanpa merusak data atau memperkenalkan inkonsistensi ke dalam aplikasi. Untuk tugas jangka panjang atau multistep, pertimbangkan untuk menggunakan titik pemeriksaan. Gunakan titik pemeriksaan untuk menyimpan status pekerjaan di penyimpanan persisten atau sebagai pesan dalam antrean. Misalnya, Anda dapat menyimpan informasi status dalam pesan yang berada dalam antrean dan memperbarui informasi status ini secara bertahap dengan kemajuan tugas. Tugas dapat diproses dari titik pemeriksaan terakhir yang diketahui alih-alih memulai ulang dari awal.

    Untuk antrean Azure Service Bus, gunakan sesi pesan untuk tujuan ini. Dengan sesi pesan, simpan dan ambil status pemrosesan aplikasi dengan menggunakan metode SetState dan GetState . Untuk informasi selengkapnya tentang merancang proses dan alur kerja multistep yang andal, lihat Pola Pengawas Agen Penjadwal.

  • Saat Anda menggunakan antrean untuk berkomunikasi dengan proses di latar belakang, antrean dapat bertindak sebagai buffer untuk menyimpan permintaan yang dikirim ke tugas saat aplikasi berada di bawah beban yang lebih tinggi dari biasanya. Tugas dapat mengejar UI selama periode yang kurang sibuk, dan menghidupkan ulang tidak memblokir UI. Untuk informasi lebih lanjut, lihat Pola Pemerataan Beban Berbasis Antrean. Jika beberapa tugas lebih penting daripada yang lain, pertimbangkan untuk menerapkan pola Antrean Prioritas untuk memastikan bahwa tugas-tugas ini berjalan terlebih dahulu.

Pesan

Konfigurasikan tugas latar belakang yang dimulai oleh pesan atau yang memproses pesan untuk menangani inkonsistensi, seperti pesan yang tiba di luar urutan, pesan yang berulang kali menyebabkan kesalahan (pesan racun), dan pesan yang dikirimkan lebih dari sekali. Pertimbangkan rekomendasi berikut:

  • Terkadang Anda memerlukan pesan untuk diproses dalam urutan tertentu, seperti pesan yang mengubah data berdasarkan nilai data yang ada, misalnya menambahkan nilai ke nilai yang ada. Pesan tidak selalu tiba sesuai urutan pengirimannya. Selain itu, instans yang berbeda dari tugas latar belakang mungkin memproses pesan dalam urutan yang berbeda karena berbagai beban pada setiap instans.

    Untuk pesan yang harus diproses dalam urutan tertentu, sertakan nomor urut, kunci, atau indikator lain yang dapat digunakan tugas latar belakang untuk memproses pesan dalam urutan yang benar. Untuk Azure Service Bus, gunakan sesi pesan untuk menjamin urutan pengiriman yang benar. Lebih efisien untuk merancang proses sehingga urutan pesan tidak penting. Untuk informasi selengkapnya, lihat urutan pesan dan tanda waktu.

  • Biasanya, tugas latar belakang mengintip pesan dalam antrean, yang sementara menyembunyikannya dari konsumen pesan lain. Setelah tugas berhasil memproses pesan, tugas akan menghapus pesan. Jika tugas latar belakang gagal saat memproses pesan, pesan tersebut muncul kembali dalam antrean setelah batas waktu cuplikan kedaluwarsa. Instans tugas yang berbeda memproses pesan, atau siklus pemrosesan berikutnya dari instans asli memproses pesan.

    Jika pesan secara konsisten menyebabkan kesalahan pada konsumen, pesan memblokir tugas, antrean, dan akhirnya aplikasi itu sendiri ketika antrean menjadi penuh. Sangat penting untuk mendeteksi dan menghapus pesan racun dari antrean. Jika Anda menggunakan Bus Layanan, pindahkan pesan racun secara otomatis atau manual ke antrean surat mati terkait.

  • Antrean adalah mekanisme pengiriman setidaknya sekali , tetapi mungkin mengirimkan pesan yang sama lebih dari sekali. Jika tugas latar belakang gagal setelah memproses pesan tetapi sebelum menghapusnya dari antrean, pesan tersedia untuk diproses lagi.

    Tugas latar belakang harus idempotensi, yang berarti bahwa ketika tugas memproses pesan yang sama lebih dari sekali, itu tidak menyebabkan kesalahan atau ketidakkonsistensian dalam data aplikasi. Beberapa operasi secara alami idempotensi, misalnya jika nilai tersimpan diatur ke nilai baru tertentu. Namun, beberapa operasi menyebabkan inkonsistensi, misalnya jika nilai ditambahkan ke nilai tersimpan yang ada tanpa memverifikasi bahwa nilai yang disimpan masih sama seperti ketika pesan awalnya dikirim. Konfigurasikan antrean Azure Service Bus untuk menghapus pesan duplikat secara otomatis. Untuk informasi selengkapnya, lihat Pemrosesan pesan idempotensi.

  • Beberapa sistem olahpesan, seperti antrean Azure Storage dan antrean Azure Service Bus, mendukung properti jumlah dequeue yang menunjukkan berapa kali pesan dari antrean dibaca. Data ini berguna untuk menangani pesan berulang dan pesan racun. Untuk informasi selengkapnya, lihat Pola primer olahpesan asinkron dan Idempotency.

Pertimbangan penyekalaan dan performa

Tugas latar belakang harus menawarkan performa yang memadai untuk memastikan bahwa mereka tidak memblokir aplikasi atau operasi penundaan ketika sistem sedang dimuat. Biasanya, performa meningkat saat Anda menskalakan instans komputasi yang menghosting tugas latar belakang. Saat Anda merencanakan dan mendesain tugas latar belakang, pertimbangkan poin berikut yang terkait dengan skalabilitas dan performa:

  • Azure Virtual Machines dan fitur Web Apps Azure App Service dapat menghosting penyebaran. Mereka mendukung penskalakan otomatis, baik penskalakan keluar maupun penskalakan masuk. Penskalan otomatis ditentukan oleh permintaan dan beban atau jadwal yang telah ditentukan sebelumnya. Gunakan penskalaan otomatis untuk membantu memastikan bahwa aplikasi memiliki kemampuan performa yang memadai sambil meminimalkan biaya runtime.

  • Beberapa tugas latar belakang memiliki kemampuan performa yang berbeda dibandingkan dengan bagian lain dari aplikasi, misalnya UI atau komponen, seperti lapisan akses data. Dalam skenario itu, host tugas latar belakang bersama-sama dalam layanan komputasi terpisah sehingga UI dan tugas latar belakang dapat menskalakan secara independen untuk mengelola beban. Jika beberapa tugas latar belakang memiliki kemampuan performa yang berbeda secara signifikan, bagilah dan skalakan setiap jenis secara independen. Teknik ini dapat meningkatkan biaya runtime.

  • Untuk mencegah hilangnya performa di bawah beban, Anda mungkin juga perlu menskalakan antrean penyimpanan dan sumber daya lainnya sehingga satu titik rantai pemrosesan tidak menyebabkan penyempitan. Pertimbangkan batasan lain, seperti throughput maksimum penyimpanan dan layanan lain yang diandalkan aplikasi dan tugas latar belakang.

  • Mendesain tugas latar belakang untuk penskalaan. Misalnya, tugas latar belakang harus secara dinamis mendeteksi jumlah antrean penyimpanan yang digunakan untuk memantau pesan atau mengirim pesan ke antrean yang sesuai.

  • Secara default, WebJobs menskalakan dengan instans Web Apps terkait. Namun, jika Anda ingin WebJobs berjalan hanya sebagai satu instans, Anda dapat membuat file Settings.job yang berisi data { "is_singleton": true }JSON . Metode ini memaksa Azure untuk hanya menjalankan satu instans WebJobs, bahkan jika ada beberapa instans aplikasi web terkait. Teknik ini berguna untuk pekerjaan terjadwal yang harus berjalan hanya sebagai satu instans.

  • Pekerjaan latar belakang dapat menciptakan tantangan untuk sinkronisasi data dan koordinasi proses, terutama jika tugas latar belakang bergantung satu sama lain atau pada sumber data lainnya. Misalnya, pekerjaan latar belakang mungkin menangani masalah konsistensi data, kondisi balapan, kebuntuan, atau batas waktu.

  • Pekerjaan latar belakang dapat memengaruhi pengalaman pengguna jika hasil tugas latar belakang disajikan kepada pengguna. Misalnya, pekerjaan latar belakang mungkin mengharuskan pengguna untuk menunggu pemberitahuan, merefresh halaman, atau memeriksa status tugas secara manual. Perilaku ini dapat meningkatkan kompleksitas interaksi pengguna dan berdampak negatif pada pengalaman pengguna.

Tradeoff: Pekerjaan latar belakang memperkenalkan lebih banyak komponen dan dependensi ke sistem, yang dapat meningkatkan kompleksitas dan biaya pemeliharaan solusi. Misalnya, pekerjaan latar belakang mungkin memerlukan layanan antrean terpisah, layanan pekerja, layanan pemantauan, dan mekanisme coba lagi.

Fasilitasi Azure

Bagian berikut ini menjelaskan layanan Azure yang bisa Anda gunakan untuk menghosting, menjalankan, mengonfigurasi, dan mengelola pekerjaan latar belakang.

Lingkungan host

Ada beberapa layanan platform Azure yang dapat menghosting tugas latar belakang:

  • Web Apps dan WebJobs: Gunakan fitur WebJobs App Service untuk menjalankan pekerjaan kustom yang didasarkan pada skrip atau program berbeda yang dapat Anda jalankan di aplikasi web.

  • Azure Functions: Gunakan aplikasi fungsi untuk pekerjaan latar belakang yang tidak berjalan untuk waktu yang lama. Anda juga dapat menggunakan aplikasi fungsi jika menghosting beban kerja pada paket App Service yang kurang digunakan.

  • Virtual Machines: Jika Anda memiliki layanan Windows atau ingin menggunakan Windows Task Scheduler, host tugas latar belakang Anda di VM khusus.

  • Azure Batch: Batch adalah layanan platform yang dapat Anda gunakan untuk menjadwalkan pekerjaan intensif komputasi untuk dijalankan pada kumpulan VM terkelola. Ini dapat secara otomatis menskalakan sumber daya komputasi.

  • Azure Kubernetes Service (AKS): AKS menyediakan lingkungan hosting terkelola untuk Kubernetes di Azure.

  • Azure Container Apps: Dengan Container Apps, Anda dapat membangun layanan mikro tanpa server yang didasarkan pada kontainer.

Bagian berikut memberikan pertimbangan untuk setiap opsi ini untuk membantu Anda memilih opsi terbaik untuk Anda.

Web Apps dan WebJobs

Anda dapat menggunakan fitur WebJobs untuk menjalankan pekerjaan kustom sebagai pekerjaan latar belakang di aplikasi web. WebJob berjalan sebagai proses berkelanjutan dalam konteks aplikasi web Anda. WebJob juga dapat berjalan sebagai respons terhadap peristiwa pemicu dari Logic Apps atau faktor eksternal, seperti perubahan pada blob penyimpanan atau antrean pesan. WebJobs dapat dimulai dan dihentikan sesuai permintaan, dan dimatikan dengan lancar. Jika WebJob yang terus berjalan gagal, WebJob akan dimulai ulang secara otomatis. Anda dapat mengonfigurasi tindakan coba lagi dan kesalahan.

Saat Anda mengonfigurasi WebJob:

  • Jika Anda ingin pekerjaan merespons pemicu berbasis peristiwa, konfigurasikan untuk Berjalan terus menerus. Skrip atau program disimpan di folder yang bernama site/wwwroot/app_data/jobs/continuous.

  • Jika Anda ingin pekerjaan merespons pemicu berbasis jadwal, konfigurasikan agar Berjalan sesuai jadwal. Skrip atau program disimpan dalam folder bernama site/wwwroot/app_data/jobs/triggered.

  • Jika Anda memilih opsi Jalankan sesuai permintaan saat Anda mengonfigurasi pekerjaan, opsi Jalankan sesuai permintaan akan menjalankan kode yang sama dengan opsi Jalankan sesuai jadwal saat Anda memulai pekerjaan.

WebJob berjalan di kotak pasir aplikasi web. Ini memiliki akses ke variabel lingkungan dan dapat berbagi informasi, seperti string koneksi, dengan aplikasi web. WebJob memiliki akses ke pengidentifikasi unik komputer yang menjalankan WebJob. String koneksi bernama AzureWebJobsStorage menyediakan akses ke antrean Storage, blob, dan tabel untuk data aplikasi. Ini juga menyediakan akses ke Azure Service Bus untuk olahpesan dan komunikasi. String koneksi bernama AzureWebJobsDashboard menyediakan akses ke file log tindakan WebJob.

WebJobs memiliki karakteristik berikut:

  • Keamanan: Kredensial penyebaran aplikasi web memberikan perlindungan untuk WebJobs.

  • Jenis file yang didukung: Tentukan WebJobs dengan menggunakan skrip perintah (.cmd), file batch (.bat), skrip PowerShell (.ps1), skrip shell Bash (.sh), skrip PHP (.php), skrip Python (.py), kode JavaScript (.js), dan program yang dapat dieksekusi (.exe dan .jar).

  • Penyebaran: Anda dapat menyebarkan skrip dan executable dengan menggunakan portal Azure, Visual Studio, atau WebJobs SDK, atau Anda dapat menyalinnya langsung ke lokasi berikut:

    • Untuk penyebaran yang dipicu: site/wwwroot/app_data/jobs/triggered/<job name>

    • Untuk penyebaran berkelanjutan: site/wwwroot/app_data/jobs/continuous/<job name>

  • File log: Console.Out diperlakukan, atau ditandai, sebagai INFO. Console.Error diperlakukan sebagai ERROR. Gunakan portal untuk mengakses informasi pemantauan dan diagnostik. Unduh file log langsung dari situs web. File log disimpan di lokasi berikut:

    • Untuk penyebaran yang dipicu: Vfs/data/jobs/triggered/<job name>

    • Untuk penyebaran berkelanjutan: Vfs/data/jobs/continuous/<job name>

  • Konfigurasi: Mengonfigurasi WebJobs dengan menggunakan portal, REST API, dan PowerShell. Gunakan file konfigurasi bernama settings.job, yang berada di direktori akar yang sama dengan skrip WebJob, untuk memberikan informasi konfigurasi untuk WebJob. Contohnya:

    • { "stopping_wait_time": 60 }

    • { "is_singleton": true }

pertimbangan Web Apps dan WebJobs

  • Secara default, WebJobs diskalakan dengan aplikasi web. Untuk mengonfigurasi WebJobs agar berjalan pada satu instans, atur is_singleton properti konfigurasi ke true. WebJobs instans tunggal berguna untuk tugas yang tidak ingin Anda skalakan atau jalankan sebagai beberapa instans simultan, seperti pengindeksian ulang atau analisis data.

  • Untuk meminimalkan efek WebJobs pada performa aplikasi web, buat instans aplikasi web kosong dalam rencana App Service baru untuk menghosting WebJobs yang berjalan lama atau intensif sumber daya.

Azure Functions

Azure Functions mirip dengan WebJobs. Azure Functions tanpa server dan paling cocok untuk pemicu berbasis peristiwa yang berjalan dalam waktu singkat. Anda juga dapat menggunakan Azure Functions untuk menjalankan pekerjaan terjadwal melalui pemicu timer jika Anda mengonfigurasi fungsi untuk dijalankan pada waktu yang ditentukan.

Azure Functions tidak disarankan untuk tugas besar yang berjalan lama karena fungsi dapat menyebabkan batas waktu yang tidak terduga. Namun, tergantung pada paket hosting Anda, pertimbangkan untuk menggunakan fungsi untuk pemicu berbasis jadwal.

pertimbangan Azure Functions

Jika Anda mengharapkan tugas latar belakang berjalan selama durasi singkat sebagai respons terhadap suatu peristiwa, pertimbangkan untuk menjalankan tugas dalam paket konsumsi. Anda dapat mengonfigurasi runtime ke waktu maksimum. Fungsi yang berjalan lebih lama membutuhkan biaya lebih banyak. Pekerjaan intensif CPU yang mengonsumsi lebih banyak memori bisa lebih mahal. Jika Anda menggunakan pemicu tambahan untuk layanan sebagai bagian dari tugas Anda, pemicu tersebut akan ditagih secara terpisah.

Paket premium cocok jika Anda memiliki beberapa tugas yang singkat tetapi berjalan terus menerus. Paket ini lebih mahal karena membutuhkan lebih banyak memori dan CPU. Sebagai manfaatnya, Anda dapat menggunakan fitur lain, seperti integrasi jaringan virtual.

Paket khusus cocok untuk pekerjaan latar belakang jika beban kerja Anda sudah berjalan pada paket khusus. Jika Anda memiliki VM yang kurang digunakan, Anda dapat menjalankan paket khusus pada VM yang sama dan berbagi biaya komputasi.

Untuk informasi selengkapnya, lihat:

Komputer Virtual

Anda dapat menerapkan tugas latar belakang sehingga tidak disebarkan ke Web Apps. Misalnya, Anda dapat menerapkan tugas dengan menggunakan layanan Windows, utilitas pihak ketiga, atau program yang dapat dieksekusi. Anda juga dapat menggunakan program yang ditulis untuk lingkungan runtime yang berbeda dari lingkungan yang menghosting aplikasi. Misalnya, Anda dapat menggunakan program Unix atau Linux yang ingin Anda jalankan dari aplikasi Windows atau .NET. Pilih dari beberapa sistem operasi untuk Azure VM, dan jalankan layanan atau executable Anda pada VM tersebut.

Untuk informasi selengkapnya, lihat:

Untuk memulai tugas latar belakang di VM terpisah, Anda dapat:

  • Kirim permintaan ke titik akhir yang diekspos tugas untuk menjalankan tugas sesuai permintaan langsung dari aplikasi Anda. Permintaan mentransfer data yang diperlukan tugas. Titik akhir memanggil tugas.

  • Gunakan penjadwal atau timer dari sistem operasi yang Anda pilih untuk mengonfigurasi tugas agar berjalan sesuai jadwal. Misalnya, di Windows, Anda dapat menggunakan Penjadwal Tugas Windows untuk menjalankan skrip dan tugas. Jika Anda telah SQL Server diinstal pada VM, gunakan SQL Server Agent untuk menjalankan skrip dan tugas.

  • Gunakan Logic Apps untuk memulai tugas dengan menambahkan pesan ke antrean yang dipantau tugas atau dengan mengirim permintaan ke API yang diekspos tugas.

Untuk informasi selengkapnya tentang cara memulai tugas latar belakang, lihat bagian Pemicu sebelumnya.

pertimbangan Virtual Machines

Pertimbangkan poin-poin berikut saat Anda menyebarkan tugas latar belakang di Azure VM:

  • Tugas latar belakang host di Azure VM terpisah untuk memberikan fleksibilitas dan kontrol yang tepat atas inisiasi, penyebaran, penjadwalan, dan alokasi sumber daya. Namun, biaya runtime meningkat jika Anda menyebarkan VM hanya untuk tugas latar belakang.

  • Tidak ada fasilitas untuk memantau tugas di portal dan tidak ada kemampuan hidupkan ulang otomatis untuk tugas yang gagal. Tetapi Anda dapat menggunakan cmdlet Azure Resource Manager untuk memantau status VM dan mengelolanya. Tidak ada fasilitas untuk mengontrol proses dan utas dalam simpul komputasi. Biasanya, jika Anda menggunakan VM, Anda harus menerapkan mekanisme yang mengumpulkan data dari instrumentasi dalam tugas, dan juga dari sistem operasi di VM. Anda dapat menggunakan Paket Manajemen Pusat Sistem untuk Azure untuk tujuan ini.

  • Pertimbangkan untuk membuat pemeriksaan pemantauan yang diekspos melalui titik akhir HTTP. Anda dapat mengonfigurasi kode untuk pemeriksaan ini untuk melakukan pemeriksaan kesehatan dan mengumpulkan informasi dan statistik operasional. Anda juga dapat menggunakan pemeriksaan untuk menyusun informasi kesalahan dan mengembalikannya ke aplikasi manajemen.

Untuk informasi selengkapnya, lihat:

Batch

Pertimbangkan Batch jika Anda perlu menjalankan beban kerja komputasi berkinerja tinggi (HPC) yang besar dan paralel di puluhan, ratusan, atau ribuan VM.

Gunakan Batch untuk menyiapkan VM, menetapkan tugas ke VM, menjalankan tugas, memantau kemajuan, dan secara otomatis menskalakan VM sebagai respons terhadap beban kerja. Batch juga menyediakan penjadwalan pekerjaan dan mendukung VM Linux dan Windows.

Pertimbangan batch

Batch cocok untuk beban kerja paralel intrinsik. Anda dapat menggunakan Batch untuk melakukan penghitungan paralel dengan langkah pengurangan di akhir, atau menjalankan aplikasi Message Passing Interface (MPI) untuk tugas paralel yang memerlukan pesan yang melewati antar simpul.

Pekerjaan Batch berjalan pada kumpulan simpul, atau VM. Anda dapat mengalokasikan kumpulan hanya jika diperlukan lalu menghapusnya setelah pekerjaan selesai. Pendekatan ini memaksimalkan pemanfaatan karena simpul tidak menganggur, tetapi pekerjaan harus menunggu Anda mengalokasikan simpul. Atau, Anda dapat membuat kumpulan terlebih dahulu. Pendekatan ini meminimalkan waktu yang diperlukan untuk memulai pekerjaan tetapi dapat mengakibatkan simpul yang tidak aktif.

Untuk informasi selengkapnya, lihat:

Azure Kubernetes Service

Gunakan AKS untuk mengelola lingkungan Kubernetes yang dihosting sehingga Anda dapat dengan mudah menyebarkan dan mengelola aplikasi dalam kontainer.

Kontainer berguna untuk menjalankan pekerjaan latar belakang. Beberapa manfaatnya antara lain:

  • Kontainer mendukung hosting dengan kepadatan tinggi. Anda dapat mengisolasi proses di latar belakang dalam sebuah kontainer, sambil menempatkan beberapa kontainer di setiap VM.

  • Gunakan orkestrator kontainer untuk melakukan penyeimbangan beban internal, mengonfigurasi jaringan internal, dan melakukan tugas konfigurasi lainnya.

  • Anda dapat memulai dan menghentikan kontainer sesuai kebutuhan.

  • Dengan Azure Container Registry, Anda dapat mendaftarkan kontainer di dalam batas Azure untuk memberikan manfaat keamanan, privasi, dan kedekatan.

Pertimbangan AKS

AKS memerlukan pemahaman tentang cara menggunakan orkestrator kontainer.

Untuk informasi selengkapnya, lihat:

Aplikasi Kontainer

Dengan Container Apps, Anda dapat membangun layanan mikro tanpa server yang didasarkan pada kontainer. Aplikasi Kontainer:

Pertimbangan Container Apps

Container Apps tidak menyediakan akses langsung ke API Kubernetes yang mendasar. Jika Anda memerlukan akses ke API Kubernetes dan sarana kontrol, gunakan AKS. Jika Anda ingin membangun aplikasi bergaya Kubernetes dan tidak memerlukan akses langsung ke API Kubernetes asli dan manajemen kluster, gunakan Aplikasi Kontainer untuk pengalaman yang dikelola sepenuhnya. Container Apps paling cocok untuk membangun layanan mikro kontainer.

Untuk informasi selengkapnya, lihat:

Daftar periksa keandalan

Lihat kumpulan rekomendasi lengkap.