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.
Banyak jenis aplikasi memerlukan tugas latar belakang yang berjalan secara independen dari antarmuka pengguna (UI). Contohnya termasuk pekerjaan batch, tugas pemrosesan intensif, dan proses jangka panjang seperti alur kerja. Pekerjaan latar belakang dapat dijalankan tanpa memerlukan interaksi pengguna--aplikasi dapat memulai pekerjaan dan kemudian terus memproses permintaan interaktif dari pengguna. Ini dapat membantu meminimalkan beban pada UI aplikasi, yang dapat meningkatkan ketersediaan dan mengurangi waktu respons interaktif.
Misalnya, jika aplikasi diperlukan untuk menghasilkan gambar mini gambar yang diunggah oleh pengguna, aplikasi dapat melakukan ini sebagai pekerjaan latar belakang dan menyimpan gambar mini ke penyimpanan saat selesai--tanpa pengguna perlu menunggu proses selesai. Dengan cara yang sama, pengguna yang melakukan pesanan dapat memulai alur kerja latar belakang yang memproses pesanan, sementara UI memungkinkan pengguna untuk terus menelusuri aplikasi web. Ketika pekerjaan latar belakang selesai, ia dapat memperbarui data pesanan yang disimpan dan mengirim email ke pengguna yang mengonfirmasi pesanan.
Ketika Anda mempertimbangkan apakah akan menerapkan tugas sebagai pekerjaan latar belakang, kriteria utamanya adalah apakah tugas dapat berjalan tanpa interaksi pengguna dan tanpa UI perlu menunggu pekerjaan selesai. Tugas yang mengharuskan pengguna atau UI menunggu saat selesai mungkin tidak sesuai dengan pekerjaan latar belakang.
Jenis pekerjaan latar belakang
Pekerjaan latar belakang biasanya mencakup satu atau beberapa jenis pekerjaan berikut:
- Pekerjaan intensif CPU, seperti perhitungan matematika 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 penyediaan layanan dan sistem.
- Pemrosesan data sensitif tempat tugas diserahkan ke lokasi yang lebih aman untuk diproses. Misalnya, Anda mungkin tidak ingin memproses data sensitif dalam aplikasi web. Sebagai gantinya, Anda mungkin menggunakan pola seperti pola Gatekeeper untuk mentransfer data ke proses latar belakang terisolasi yang memiliki akses ke penyimpanan yang dilindungi.
Pemicu
Pekerjaan latar belakang dapat dimulai dengan beberapa cara yang berbeda. Mereka termasuk dalam salah satu kategori berikut:
- Pemicu berbasis peristiwa. Tugas dimulai sebagai respons terhadap peristiwa, biasanya tindakan yang diambil oleh pengguna atau langkah dalam alur kerja.
- Pemicu berbasis jadwal. Tugas diaktifkan sesuai jadwal berdasarkan pengatur waktu. Ini mungkin jadwal berulang atau pemanggilan satu kali yang ditentukan untuk masa mendatang.
Pemicu berdasarkan peristiwa
Pemanggilan berbasis peristiwa menggunakan pemicu untuk memulai tugas latar belakang. Contoh penggunaan pemicu berbasis peristiwa meliputi:
- UI atau pekerjaan lain menempatkan pesan dalam antrean. Pesan berisi data tentang tindakan yang telah terjadi, seperti pengguna yang melakukan pemesanan. Tugas latar belakang mendengarkan antrean ini dan mendeteksi kedatangan pesan baru. Sistem ini membaca pesan dan menggunakan data di dalamnya sebagai input ke pekerjaan latar belakang. Pola ini dikenal sebagai komunikasi berbasis pesan asinkron.
- UI atau proses lain menyimpan atau memperbarui nilai dalam penyimpanan. Tugas latar belakang memantau penyimpanan dan mendeteksi perubahan. Ini membaca data dan menggunakannya sebagai input ke tugas latar belakang.
- UI atau pekerjaan lain membuat permintaan ke titik akhir, seperti URI HTTPS, atau API yang diekspos sebagai layanan web. Ini meneruskan data yang diperlukan untuk menyelesaikan tugas latar belakang sebagai bagian dari permintaan. Titik akhir atau layanan web memanggil tugas latar belakang, yang menggunakan data sebagai inputnya.
Contoh umum tugas 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 yang digerakkan oleh jadwal
Pemanggilan berbasis jadwal menggunakan timer untuk memulai tugas latar belakang. Contoh penggunaan pemicu berbasis jadwal meliputi:
- Timer yang berjalan secara lokal dalam aplikasi atau sebagai bagian dari sistem operasi aplikasi memanggil tugas latar belakang secara teratur.
- Timer yang berjalan di aplikasi lain, seperti Azure Logic Apps, mengirim permintaan ke API atau layanan web secara teratur. API atau layanan web memanggil tugas latar belakang.
- Proses atau aplikasi terpisah memulai timer yang menyebabkan tugas latar belakang dipanggil sekali setelah penundaan waktu yang ditentukan, atau pada waktu tertentu.
Contoh umum tugas yang cocok untuk pemanggilan berbasis jadwal termasuk rutinitas pemrosesan batch (seperti memperbarui daftar produk terkait untuk pengguna berdasarkan perilaku terbaru mereka), 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 instans tunggal, ketahui hal berikut:
- Jika instans komputasi yang menjalankan penjadwal (seperti komputer virtual yang menggunakan tugas terjadwal Windows) diskalakan, Anda akan memiliki beberapa instans penjadwal yang berjalan. Ini dapat memulai beberapa instans tugas. Untuk informasi selengkapnya tentang ini, baca posting blog ini tentang idempotensi.
- Jika tugas berjalan lebih lama dari durasi waktu antara peristiwa penjadwal, penjadwal dapat memulai instans tugas yang baru sementara tugas yang sebelumnya masih berjalan.
Mengembalikan hasil
Pekerjaan latar belakang dijalankan secara asinkron dalam proses terpisah, atau bahkan di lokasi terpisah, dari UI atau proses yang memanggil tugas latar belakang. Idealnya, tugas latar belakang adalah operasi "aktifkan dan lupakan", dan kemajuan eksekusinya tidak berdampak pada UI atau proses panggilan. Ini berarti bahwa proses panggilan tidak menunggu penyelesaian tugas. Oleh karena itu, tidak dapat secara otomatis mendeteksi ketika tugas berakhir.
Jika Anda memerlukan tugas latar belakang untuk berkomunikasi dengan tugas panggilan untuk menunjukkan kemajuan atau penyelesaian, Anda harus menerapkan mekanisme untuk ini. Beberapa contohnya adalah:
- Tulis nilai indikator status ke penyimpanan yang dapat diakses oleh UI atau tugas pemanggil, yang dapat memantau atau memeriksa nilai ini jika diperlukan. Data lain yang harus dikembalikan tugas latar belakang ke pemanggil dapat ditempatkan ke penyimpanan yang sama.
- Buat antrian respon yang didengarkan oleh UI atau pemanggil. Tugas latar belakang dapat mengirim pesan ke antrean yang menunjukkan status dan penyelesaian. Data yang harus dikembalikan tugas latar belakang ke pemanggil dapat ditempatkan ke dalam pesan. Jika Anda menggunakan Azure Service Bus, Anda dapat menggunakan properti ReplyTo dan CorrelationId untuk menerapkan kemampuan ini.
- Ekspos API atau titik akhir dari tugas latar belakang yang dapat diakses UI atau pemanggil untuk mendapatkan informasi status. Data yang harus dikembalikan tugas latar belakang ke pemanggil dapat disertakan dalam respons.
- Mintalah panggilan tugas latar belakang kembali ke UI atau pemanggil melalui API untuk menunjukkan status pada titik yang telah ditentukan atau setelah selesai. Ini mungkin melalui peristiwa yang dimunculkan secara lokal atau melalui mekanisme publikasi dan berlangganan. Data yang harus dikembalikan tugas latar belakang ke pemanggil dapat disertakan dalam permintaan atau payload peristiwa.
Lingkungan hosting
Anda dapat menghosting tugas latar belakang dengan menggunakan berbagai layanan platform Azure yang berbeda:
- Azure Web Apps dan WebJobs. Anda dapat menggunakan WebJobs untuk menjalankan pekerjaan kustom berdasarkan berbagai jenis skrip atau program yang dapat dieksekusi dalam konteks aplikasi web.
- Fungsi Azure. Anda dapat menggunakan fungsi untuk pekerjaan latar belakang yang tidak berjalan untuk waktu yang lama. Kasus penggunaan lain adalah jika beban kerja Anda sudah dihosting pada paket App Service dan kurang digunakan.
- Mesin Virtual Azure. Jika Anda memiliki layanan Windows atau ingin menggunakan Penjadwal Tugas Windows, adalah umum untuk menghosting tugas latar belakang Anda dalam komputer virtual khusus.
- Batch Azure. Batch adalah layanan platform yang menjadwalkan pekerjaan intensif komputasi untuk dijalankan pada koleksi komputer virtual terkelola. Ini dapat secara otomatis menskalakan sumber daya komputasi.
- Azure Kubernetes Service (AKS). Azure Kubernetes Service menyediakan lingkungan hosting terkelola untuk Kubernetes di Azure.
- Aplikasi Kontainer Azure. Azure Container Apps memungkinkan Anda untuk membangun layanan mikro tanpa server berdasarkan kontainer.
Bagian berikut menjelaskan opsi ini secara lebih rinci, dan menyertakan pertimbangan untuk membantu Anda memilih opsi yang sesuai.
Azure Web Apps dan WebJobs
Anda dapat menggunakan Azure WebJobs untuk menjalankan pekerjaan kustom sebagai tugas latar belakang dalam Azure Web App. WebJobs berjalan dalam konteks aplikasi web Anda sebagai proses berkelanjutan. WebJobs juga berjalan sebagai respons terhadap peristiwa pemicu dari Azure Logic Apps atau faktor eksternal, seperti perubahan pada blob penyimpanan dan antrean pesan. Pekerjaan dapat dimulai dan dihentikan sesuai permintaan, dan dimatikan dengan lancar. Jika WebJob yang terus berjalan gagal, WebJob akan dimulai ulang secara otomatis. Tindakan coba ulang dan aksi kesalahan dapat dikonfigurasi.
Saat Anda mengatur WebJob:
- Jika Anda ingin pekerjaan merespons pemicu berbasis peristiwa, Anda harus mengonfigurasinya sebagai Jalankan terus menerus. Skrip atau program disimpan dalam folder bernama site/wwwroot/app_data/jobs/continuous.
- Jika Anda ingin pekerjaan merespons pemicu berbasis jadwal, Anda harus mengonfigurasinya sebagai Jalankan 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, itu akan menjalankan kode yang sama dengan opsi Jalankan pada jadwal saat Anda memulainya.
Azure WebJobs berjalan di lingkungan sandbox aplikasi web. Ini berarti bahwa mereka dapat mengakses variabel lingkungan dan berbagi informasi, seperti string koneksi, dengan aplikasi web. Pekerjaan ini memiliki akses ke pengidentifikasi unik dari mesin yang menjalankan pekerjaan tersebut. String koneksi bernama AzureWebJobsStorage menyediakan akses ke antrean, blob, dan tabel Azure Storage untuk data aplikasi, dan akses ke Azure Service Bus untuk olahpesan dan komunikasi. String koneksi bernama AzureWebJobsDashboard menyediakan akses ke file log tindakan pekerjaan.
Azure WebJobs memiliki karakteristik berikut:
- Keamanan: WebJobs dilindungi oleh kredensial penyebaran aplikasi web.
-
Jenis file yang didukung: Anda dapat menentukan 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
,.jar
, dan banyak lagi). -
Penyebaran: Anda dapat menyebarkan skrip dan executable dengan menggunakan portal Microsoft Azure, dengan menggunakan Visual Studio, dengan menggunakan Azure WebJobs SDK, atau dengan menyalinnya langsung ke lokasi berikut:
- Untuk eksekusi yang dipicu: site/wwwroot/app_data/jobs/triggered/{job name}
- Untuk eksekusi berkelanjutan: site/wwwroot/app_data/jobs/continuous/{job name}
-
Logging: Console.Out dianggap sebagai INFO. Console.Error diperlakukan sebagai ERROR. Anda dapat mengakses informasi pemantauan dan diagnostik dengan menggunakan portal Microsoft Azure. Anda dapat mengunduh file log langsung dari situs. Mereka disimpan di lokasi berikut:
- Untuk eksekusi yang dipicu: Vfs/data/jobs/triggered/jobName
- Untuk eksekusi berkelanjutan: Vfs/data/jobs/continuous/jobName
-
Konfigurasi: Anda dapat mengonfigurasi WebJobs dengan menggunakan portal, REST API, dan PowerShell. Anda dapat menggunakan file konfigurasi bernama settings.job di direktori akar yang sama dengan skrip pekerjaan untuk memberikan informasi konfigurasi untuk pekerjaan. Misalnya:
- { "stopping_wait_time": 60 }
- { "is_singleton": benar }
Pertimbangan
- Secara default, WebJobs menyesuaikan skala dengan aplikasi web. Namun, Anda dapat mengonfigurasi pekerjaan untuk dijalankan pada instans tunggal dengan mengatur properti konfigurasi is_singleton ke true. WebJobs dengan instans tunggal berguna untuk tugas yang tidak ingin Anda skalakan atau jalankan sebagai beberapa instans simultan, seperti analisis data, pengindeksaian ulang, dan tugas serupa.
- Untuk meminimalkan dampak pekerjaan pada performa aplikasi web, pertimbangkan untuk membuat instans Azure Web App kosong dalam paket App Service baru untuk menghosting WebJobs yang berjalan lama atau intensif sumber daya.
Fungsi Azure
Opsi yang mirip dengan WebJobs adalah Azure Functions. Layanan ini tanpa server yang paling cocok untuk pemicu berbasis peristiwa yang berjalan dalam waktu singkat. Fungsi juga dapat digunakan untuk menjalankan pekerjaan terjadwal melalui pemicu timer, saat dikonfigurasi untuk berjalan pada waktu yang ditetapkan.
Azure Functions bukan opsi yang direkomendasikan untuk tugas besar yang berjalan lama karena dapat menyebabkan masalah batas waktu yang tidak terduga. Namun, tergantung pada paket hosting, mereka dapat dipertimbangkan untuk pemicu berbasis jadwal.
Pertimbangan
Jika tugas latar belakang diharapkan berjalan untuk durasi singkat sebagai respons terhadap suatu peristiwa, pertimbangkan untuk menjalankan tugas dalam rencana Konsumsi. Waktu eksekusi dapat dikonfigurasi hingga waktu maksimum. Fungsi yang berjalan lebih lama akan lebih mahal. Juga pekerjaan intensif CPU yang mengonsumsi lebih banyak memori bisa lebih mahal. Jika Anda menggunakan pemicu tambahan untuk layanan sebagai bagian dari pekerjaan Anda, itu ditagih secara terpisah.
Paket Premium lebih cocok jika Anda memiliki jumlah tugas tinggi yang singkat tetapi diharapkan berjalan terus menerus. Paket ini lebih mahal karena membutuhkan lebih banyak memori dan CPU. Manfaatnya adalah Anda dapat menggunakan fitur seperti integrasi jaringan virtual.
Paket Khusus paling cocok untuk pekerjaan latar belakang jika beban kerja Anda sudah berjalan di atasnya. Jika Anda memiliki VM yang kurang digunakan, Anda dapat menjalankannya pada VM yang sama dan berbagi biaya komputasi.
Untuk informasi selengkapnya, lihat artikel berikut ini:
Azure Virtual Machines
Tugas latar belakang mungkin diimplementasikan dengan cara yang mencegahnya disebarkan ke Azure Web Apps, atau opsi ini mungkin tidak nyaman. Contoh umumnya adalah layanan Windows, dan utilitas pihak ketiga dan program yang dapat dieksekusi. Contoh lain mungkin program yang ditulis untuk lingkungan eksekusi yang berbeda dari yang menghosting aplikasi. Misalnya, mungkin program Unix atau Linux yang ingin Anda jalankan dari aplikasi Windows atau .NET. Anda dapat memilih dari berbagai sistem operasi untuk komputer virtual Azure, dan menjalankan layanan Anda atau dapat dieksekusi pada komputer virtual tersebut.
Untuk membantu Anda memilih kapan menggunakan Komputer Virtual, lihat Perbandingan Azure App Services, Cloud Services, dan Komputer Virtual. Untuk informasi tentang opsi untuk Komputer Virtual, lihat Ukuran untuk komputer virtual Windows di Azure. Untuk informasi selengkapnya tentang sistem operasi dan gambar bawaan yang tersedia untuk Komputer Virtual, lihat Marketplace Azure Virtual Machines.
Untuk memulai tugas latar belakang di komputer virtual terpisah, Anda memiliki berbagai opsi:
- Anda dapat menjalankan tugas berdasarkan permintaan langsung dari aplikasi Anda dengan mengirim permintaan ke titik akhir yang diekspos oleh tugas. Ini meneruskan setiap data yang diperlukan oleh pekerjaan tersebut. Endpoint ini memanggil tugas.
- Anda dapat mengonfigurasi tugas untuk berjalan sesuai jadwal dengan menggunakan penjadwal atau timer yang tersedia di sistem operasi yang Anda pilih. Misalnya, pada Windows Anda dapat menggunakan Penjadwal Tugas Windows untuk menjalankan skrip dan tugas. Atau, jika Anda memiliki SQL Server yang diinstal pada komputer virtual, Anda dapat menggunakan SQL Server Agent untuk menjalankan skrip dan tugas.
- Anda dapat menggunakan Azure Logic Apps untuk memulai tugas dengan menambahkan pesan ke dalam antrean yang dipantau oleh tugas, atau dengan mengirimkan permintaan ke API yang disediakan oleh tugas tersebut.
Lihat bagian Sebelumnya Pemicu untuk informasi selengkapnya tentang cara memulai tugas latar belakang.
Pertimbangan
Pertimbangkan poin-poin berikut saat Anda memutuskan apakah akan menyebarkan tugas latar belakang di komputer virtual Azure:
- Menghosting tugas latar belakang di komputer virtual Azure terpisah memberikan fleksibilitas dan memungkinkan kontrol yang tepat atas inisiasi, eksekusi, penjadwalan, dan alokasi sumber daya. Namun, itu akan meningkatkan biaya runtime jika komputer virtual harus disebarkan hanya untuk menjalankan tugas latar belakang.
- Tidak ada fasilitas untuk memantau tugas di portal Microsoft Azure dan tidak ada kemampuan hidupkan ulang otomatis untuk tugas yang gagal--meskipun Anda dapat memantau status dasar komputer virtual dan mengelolanya dengan menggunakan Cmdlet Azure Resource Manager. Namun, tidak ada fasilitas untuk mengontrol proses dan utas dalam simpul komputasi. Biasanya, menggunakan komputer virtual akan memerlukan upaya tambahan untuk menerapkan mekanisme yang mengumpulkan data dari instrumentasi dalam tugas, dan dari sistem operasi di komputer virtual. Salah satu solusi yang mungkin sesuai adalah menggunakan Paket Manajemen Pusat Sistem untuk Azure.
- Anda mungkin mempertimbangkan untuk membuat probes pemantauan yang diekspos melalui endpoint HTTP. Kode untuk sonda ini dapat melakukan pemeriksaan kesehatan, mengumpulkan informasi operasional dan statistik, atau menyusun informasi kesalahan dan mengembalikannya ke aplikasi manajemen. Untuk informasi selengkapnya, lihat pola Pemantauan Titik Akhir Kesehatan.
Untuk informasi selengkapnya, lihat:
- Mesin Virtual
- Tanya Jawab Umum Azure Virtual Machines
Azure Batch adalah layanan komputasi yang memungkinkan pemrosesan batch skala besar yang efisien di awan.
Pertimbangkan Azure Batch jika Anda perlu menjalankan beban kerja komputasi performa tinggi (HPC) yang besar dan paralel di puluhan, ratusan, atau ribuan VM.
Layanan Batch menyediakan VM, menetapkan tugas ke VM, menjalankan tugas, dan memantau kemajuan. Batch dapat secara otomatis meningkatkan skala mesin virtual (VM) sebagai respons terhadap beban kerja. Batch juga menyediakan penjadwalan pekerjaan. Azure Batch mendukung VM Linux dan Windows.
Pertimbangan
Batch bekerja dengan baik pada beban kerja yang secara intrinsik paralel. Ini juga dapat melakukan perhitungan paralel dengan langkah pengurangan di akhir, atau menjalankan aplikasi Message Passing Interface (MPI) untuk tugas paralel yang memerlukan pesan yang melewati antar simpul.
Tugas Azure Batch berjalan pada kumpulan simpul (mesin virtual). Salah satu pendekatannya adalah mengalokasikan kumpulan hanya jika diperlukan lalu menghapusnya setelah pekerjaan selesai. Ini memaksimalkan penggunaan, karena node tidak menganggur, tetapi pekerjaan harus menunggu hingga node siap digunakan. Atau, Anda dapat membuat kumpulan di muka. Pendekatan itu meminimalkan waktu yang diperlukan untuk memulai pekerjaan, tetapi dapat mengakibatkan adanya simpul yang tidak aktif. Untuk informasi selengkapnya, lihat Kumpulan dan masa pakai node komputasi.
Untuk informasi selengkapnya, lihat:
- Apa itu Azure Batch?
- Mengembangkan solusi komputasi paralel skala besar dengan Batch
- Solusi Batch dan HPC untuk beban kerja komputasi skala besar
Azure Kubernetes Service
Azure Kubernetes Service (AKS) mengelola lingkungan Kubernetes yang dihosting, yang memudahkan untuk menyebarkan dan mengelola aplikasi dalam kontainer.
Kontainer dapat berguna untuk menjalankan tugas latar belakang. Beberapa manfaatnya antara lain:
- Kontainer mendukung hosting dengan kepadatan tinggi. Anda dapat mengisolasi tugas latar belakang dalam kontainer, sambil menempatkan beberapa kontainer di setiap VM.
- Orkestrator kontainer menangani penyeimbangan beban internal, mengonfigurasi jaringan internal, dan tugas konfigurasi lainnya.
- Kontainer dapat dijalankan dan dihentikan sesuai kebutuhan.
- Azure Container Registry memungkinkan Anda mendaftarkan kontainer di dalam batas Azure. Ini dilengkapi dengan manfaat keamanan, privasi, dan kedekatan.
Pertimbangan
- Memerlukan pemahaman tentang cara menggunakan orkestrator kontainer. Bergantung pada kumpulan keterampilan tim DevOps Anda, ini mungkin atau mungkin bukan masalah.
Untuk informasi selengkapnya, lihat:
Aplikasi Kontainer Azure
Azure Container Apps memungkinkan Anda untuk membangun layanan mikro tanpa server berdasarkan kontainer. Fitur khas dari Container Apps meliputi:
- Dioptimalkan untuk menjalankan kontainer tujuan umum, terutama untuk aplikasi yang mencakup banyak layanan mikro yang digunakan dalam kontainer.
- Didukung oleh Kubernetes dan teknologi sumber terbuka seperti Dapr, Kubernetes Event-driven Autoscaling (KEDA),dan utusan.
- Mendukung aplikasi bergaya Kubernetes dan layanan mikro dengan fitur seperti Penemuan layanan dan pemisahan lalu lintas.
- Mengaktifkan arsitektur aplikasi berbasis peristiwa dengan mendukung skala berdasarkan lalu lintas dan menarik dari sumber peristiwa seperti antrean, termasuk skala ke nol.
- Dukungan proses yang berjalan lama dan dapat menjalankan tugas latar belakang.
Pertimbangan
Azure Container Apps tidak menyediakan akses langsung ke API Kubernetes yang mendasarinya. Jika Anda memerlukan akses ke API Kubernetes dan sarana kontrol, Anda harus menggunakan Azure Kubernetes Service. Namun, jika Anda ingin membangun aplikasi bergaya Kubernetes dan tidak memerlukan akses langsung ke semua API Kubernetes asli dan pengelolaan kluster, Container Apps menyediakan pengalaman yang sepenuhnya terkelola berdasarkan praktik terbaik. Untuk alasan-alasan ini, banyak tim mungkin lebih memilih untuk memulai membangun layanan mikro kontainer dengan Azure Container Apps.
Untuk informasi selengkapnya, lihat:
Anda dapat mulai membangun aplikasi kontainer pertama Anda menggunakan panduan cepat.
Pembagian
Jika Anda memutuskan untuk menyertakan tugas latar belakang dalam instans komputasi yang ada, Anda harus mempertimbangkan bagaimana hal ini akan memengaruhi atribut kualitas instans komputasi dan tugas latar belakang itu sendiri. Faktor-faktor ini akan membantu Anda memutuskan apakah akan mengalokasikan tugas dengan instans komputasi yang ada atau memisahkannya menjadi instans komputasi terpisah:
Ketersediaan: Tugas latar belakang mungkin tidak perlu memiliki tingkat ketersediaan yang sama dengan bagian lain dari aplikasi, khususnya UI dan bagian lain yang terlibat langsung dalam interaksi pengguna. Tugas latar belakang mungkin lebih toleran terhadap latensi, kegagalan koneksi yang dicoba kembali, dan faktor lain yang memengaruhi ketersediaan karena operasi dapat diantrekan. Namun, harus ada kapasitas yang memadai untuk mencegah pencadangan permintaan yang dapat memblokir antrean dan memengaruhi aplikasi secara keseluruhan.
Skalabilitas: Tugas latar belakang kemungkinan memiliki persyaratan skalabilitas yang berbeda dari UI dan bagian interaktif aplikasi. Penskalaan UI mungkin diperlukan untuk memenuhi puncak permintaan, sementara tugas latar belakang yang luar biasa mungkin diselesaikan selama waktu yang kurang sibuk oleh lebih sedikit instans komputasi.
Ketahanan: Kegagalan instans komputasi yang hanya menghosting tugas latar belakang mungkin tidak secara fatal memengaruhi aplikasi secara keseluruhan jika permintaan untuk tugas-tugas ini dapat diantrekan atau ditunda sampai tugas tersedia lagi. Jika instans komputasi atau tugas dapat dimulai ulang dalam interval yang sesuai, pengguna aplikasi mungkin tidak terpengaruh.
Keamanan: Tugas latar belakang mungkin memiliki persyaratan atau batasan keamanan yang berbeda dari UI atau bagian lain dari aplikasi. Dengan menggunakan instans komputasi terpisah, Anda dapat menentukan lingkungan keamanan yang berbeda untuk tugas tersebut. Anda juga dapat menggunakan pola seperti Gatekeeper untuk mengisolasi instans komputasi latar belakang dari UI untuk memaksimalkan keamanan dan pemisahan.
Performa: Anda dapat memilih jenis instans komputasi untuk tugas latar belakang agar secara khusus sesuai dengan persyaratan performa tugas. Ini mungkin berarti menggunakan opsi komputasi yang lebih murah jika tugas tidak memerlukan kemampuan pemrosesan yang sama dengan UI, atau instans yang lebih besar jika memerlukan kapasitas dan sumber daya tambahan.
Pengelolaan: Tugas latar belakang mungkin memiliki ritme pengembangan dan penyebaran yang berbeda dari kode aplikasi utama atau UI. Menyebarkannya ke instans komputasi terpisah dapat menyederhanakan pembaruan dan penerapan versi.
Biaya: Menambahkan instans komputasi untuk menjalankan tugas latar belakang meningkatkan biaya hosting. Anda harus dengan hati-hati mempertimbangkan trade-off antara kapasitas tambahan dan biaya tambahan ini.
Untuk informasi selengkapnya, lihat pola Pemilihan Pemimpin dan pola Konsumen yang Bersaing.
Konflik
Jika Anda memiliki beberapa instans tugas latar belakang, mungkin mereka akan bersaing untuk mengakses sumber daya dan layanan, seperti database dan penyimpanan. Akses bersamaan ini dapat mengakibatkan ketidakcocokan sumber daya, yang dapat menyebabkan konflik dalam ketersediaan layanan dan integritas data dalam penyimpanan. Anda dapat mengatasi ketidakcocokan sumber daya dengan menggunakan pendekatan penguncian pesimis. Hal ini mencegah instans tugas yang bersaing mengakses layanan secara bersamaan atau merusak data.
Pendekatan lain untuk mengatasi konflik adalah menentukan tugas latar belakang sebagai singleton, sehingga hanya ada satu instans yang berjalan. Namun, ini menghilangkan manfaat keandalan dan performa yang dapat diberikan konfigurasi beberapa instans. Ini sangat benar jika UI dapat menyediakan cukup pekerjaan untuk membuat lebih dari satu tugas latar belakang tetap sibuk.
Sangat penting untuk memastikan bahwa tugas latar belakang dapat dimulai ulang secara otomatis dan memiliki kapasitas yang cukup untuk mengatasi puncak permintaan. Anda dapat mencapai ini dengan mengalokasikan instans komputasi dengan sumber daya yang memadai, dengan menerapkan mekanisme antrean yang dapat menyimpan permintaan untuk eksekusi nanti ketika permintaan menurun, atau dengan menggunakan kombinasi teknik ini.
Koordinasi
Tugas latar belakang mungkin kompleks dan mungkin memerlukan beberapa tugas individual untuk dijalankan untuk menghasilkan hasil atau untuk memenuhi semua persyaratan. Adalah umum dalam skenario ini untuk membagi tugas menjadi langkah-langkah atau subtugas bijaksana yang lebih kecil yang dapat dijalankan oleh beberapa konsumen. Pekerjaan multistep bisa lebih efisien dan lebih fleksibel karena langkah individual mungkin dapat digunakan kembali dalam beberapa pekerjaan. Juga mudah untuk menambahkan, menghapus, atau memodifikasi urutan langkah-langkah.
Mengoordinasikan beberapa tugas dan langkah bisa menjadi tantangan, tetapi ada tiga pola umum yang dapat Anda gunakan untuk memandu implementasi solusi Anda:
Menguraikan tugas menjadi beberapa langkah yang dapat digunakan kembali. Aplikasi mungkin diperlukan untuk melakukan berbagai tugas dengan berbagai kompleksitas pada informasi yang diprosesnya. Pendekatan yang mudah tetapi tidak fleksibel untuk mengimplementasikan aplikasi ini mungkin untuk melakukan pemrosesan ini sebagai modul monolitik. Namun, pendekatan ini kemungkinan akan mengurangi peluang untuk merefaktor kode, mengoptimalkannya, atau menggunakannya kembali jika bagian dari pemrosesan yang sama diperlukan di tempat lain dalam aplikasi. Untuk informasi selengkapnya, lihat pola Pipa dan Filter.
Mengelola eksekusi langkah-langkah untuk tugas. Aplikasi mungkin melakukan tugas yang terdiri dari sejumlah langkah (beberapa di antaranya mungkin memanggil layanan jarak jauh atau mengakses sumber daya jarak jauh). Langkah-langkah individu mungkin independen satu sama lain, tetapi langkah tersebut diatur oleh logika aplikasi yang menerapkan tugasnya. Untuk informasi selengkapnya, lihat Pola Pengawas Agen Penjadwal.
Mengelola pemulihan untuk langkah-langkah tugas yang gagal. Aplikasi mungkin perlu membatalkan pekerjaan yang dilakukan oleh serangkaian langkah (yang bersama-sama menentukan operasi yang akhirnya konsisten) jika satu atau beberapa langkah gagal. Untuk informasi selengkapnya, lihat pola Kompensasi Transaksi.
Pertimbangan ketahanan
Tugas latar belakang harus tangguh untuk menyediakan layanan yang andal ke aplikasi. Saat Anda merencanakan dan merancang tugas latar belakang, pertimbangkan poin-poin berikut:
Tugas latar belakang harus dapat menangani hidupkan ulang dengan lancar tanpa merusak data atau memperkenalkan inkonsistensi ke dalam aplikasi. Untuk tugas jangka panjang atau banyak langkah, pertimbangkan untuk menggunakan checkpoint dengan menyimpan status pekerjaan di penyimpanan persisten, atau sebagai pesan dalam antrean jika ini sesuai. Misalnya, Anda dapat mempertahankan informasi status dalam pesan dalam antrean dan secara bertahap memperbarui informasi status ini dengan kemajuan tugas sehingga tugas dapat diproses dari titik pemeriksaan baik terakhir yang diketahui--alih memulai ulang dari awal. Saat menggunakan antrean Azure Service Bus, Anda dapat menggunakan sesi pesan untuk mengaktifkan skenario yang sama. Sesi memungkinkan Anda menyimpan dan mengambil 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 tugas latar belakang, antrean dapat bertindak sebagai penyangga untuk menyimpan permintaan yang dikirim ke tugas saat aplikasi berada di bawah beban yang lebih tinggi dari biasanya. Ini memungkinkan tugas untuk mengejar ketinggalan dengan UI selama periode yang kurang sibuk. Ini juga berarti bahwa menghidupkan ulang tidak akan memblokir UI. Untuk informasi selengkapnya, lihat polaQueue-Based Load Leveling. Jika beberapa tugas lebih penting daripada tugas lain, pertimbangkan untuk menerapkan pola Antrean Prioritas untuk memastikan bahwa tugas-tugas ini berjalan sebelum tugas yang kurang penting.
Tugas latar belakang yang dimulai oleh pesan atau pesan proses harus dirancang untuk menangani inkonsistensi, seperti pesan yang tiba di luar urutan, pesan yang berulang kali menyebabkan kesalahan (sering disebut sebagai pesan racun), dan pesan yang dikirimkan lebih dari sekali. Pertimbangkan hal berikut:
Pesan yang harus diproses dalam urutan tertentu, seperti pesan yang mengubah data berdasarkan nilai data yang ada (misalnya, menambahkan nilai ke nilai yang ada), mungkin tidak tiba dalam urutan asli tempat mereka dikirim. Atau, mereka mungkin ditangani oleh instans yang berbeda dari tugas latar belakang dalam urutan yang berbeda karena berbagai beban pada setiap instans. Pesan yang harus diproses dalam urutan tertentu harus menyertakan nomor urut, kunci, atau beberapa indikator lain yang dapat digunakan tugas latar belakang untuk memastikan bahwa mereka diproses dalam urutan yang benar. Jika Anda menggunakan Azure Service Bus, Anda dapat menggunakan sesi pesan untuk menjamin urutan pengiriman. Namun, biasanya lebih efisien, jika memungkinkan, untuk merancang proses sehingga urutan pesan tidak penting.
Biasanya, tugas latar belakang akan melihat sekilas pesan dalam antrean, yang menyembunyikannya untuk sementara dari konsumen pesan lainnya. Kemudian menghapus pesan setelah berhasil diproses. Jika tugas latar belakang gagal saat memproses pesan, pesan tersebut akan muncul kembali pada antrean setelah batas waktu intip kedaluwarsa. Ini akan diproses oleh instans tugas lain atau selama siklus pemrosesan berikutnya dari instans ini. Jika pesan secara konsisten menyebabkan kesalahan pada konsumen, pesan akan memblokir tugas, antrean, dan akhirnya aplikasi itu sendiri ketika antrean menjadi penuh. Oleh karena itu, sangat penting untuk mendeteksi dan menghapus pesan racun dari antrean. Jika Anda menggunakan Azure Service Bus, pesan yang menyebabkan kesalahan dapat dipindahkan secara otomatis atau manual ke antrean surat mati terkait.
Antrean dijamin memiliki mekanisme pengiriman setidaknya sekali, tetapi mungkin mengirimkan pesan yang sama lebih dari sekali. Selain itu, jika tugas latar belakang gagal setelah memproses pesan tetapi sebelum menghapusnya dari antrean, pesan akan tersedia untuk diproses lagi. Tugas latar belakang harus idempotensi, yang berarti bahwa memproses pesan yang sama lebih dari sekali tidak menyebabkan kesalahan atau inkonsistensi dalam data aplikasi. Beberapa operasi secara alami idempotensi, seperti mengatur nilai tersimpan ke nilai baru tertentu. Namun, operasi seperti menambahkan nilai ke nilai tersimpan yang ada tanpa memeriksa bahwa nilai yang disimpan masih sama seperti ketika pesan awalnya dikirim akan menyebabkan inkonsistensi. Antrean Azure Service Bus dapat dikonfigurasi untuk menghapus pesan duplikat secara otomatis. Untuk informasi selengkapnya tentang tantangan dengan pengiriman pesan setidaknya sekali, lihat panduan tentang pemrosesan pesan idempogen.
Beberapa sistem pesan, seperti antrean Azure Queue Storage dan Azure Service Bus, mendukung properti jumlah pengambilan antrean yang menunjukkan berapa kali pesan telah dibaca dari antrean. Ini dapat berguna dalam menangani pesan berulang dan racun. Untuk informasi selengkapnya, lihat Pengantar Olahpesan Asinkron dan Pola Idempotensi.
Pertimbangan penskalaan dan performa
Tugas latar belakang harus menawarkan performa yang memadai untuk memastikan mereka tidak memblokir aplikasi, atau menyebabkan inkonsistensi karena operasi yang tertunda ketika sistem sedang dimuat. Biasanya, performa ditingkatkan dengan menskalakan instans komputasi yang menghosting tugas latar belakang. Saat Anda merencanakan dan merancang tugas latar belakang, pertimbangkan poin-poin berikut sekeliling skalabilitas dan performa:
Azure mendukung penskalaan otomatis (penskalaan keluar dan penskalaan kembali) berdasarkan permintaan dan beban saat ini atau pada jadwal yang telah ditentukan sebelumnya, untuk penyebaran yang dihosting Web Apps dan Virtual Machines. Gunakan fitur ini untuk memastikan bahwa aplikasi secara keseluruhan memiliki kemampuan performa yang memadai sambil meminimalkan biaya runtime.
Di mana tugas latar belakang memiliki kemampuan performa yang berbeda dari bagian lain aplikasi (misalnya, UI atau komponen seperti lapisan akses data), menghosting tugas latar belakang bersama-sama dalam layanan komputasi terpisah memungkinkan UI dan tugas latar belakang untuk menskalakan secara independen untuk mengelola beban. Jika beberapa tugas latar belakang memiliki kemampuan performa yang berbeda secara signifikan satu sama lain, pertimbangkan untuk membalahnya dan menskalakan setiap jenis secara independen. Namun, perhatikan bahwa ini dapat meningkatkan biaya runtime.
Cukup menskalakan sumber daya komputasi mungkin tidak cukup untuk mencegah hilangnya performa di bawah beban. Anda mungkin juga perlu menskalakan antrean penyimpanan dan sumber daya lainnya untuk mencegah satu titik rantai pemrosesan keseluruhan menjadi hambatan. Selain itu, pertimbangkan batasan lain, seperti throughput maksimum dari penyimpanan dan layanan lain yang menjadi andalan aplikasi dan tugas latar belakang.
Tugas latar belakang harus dirancang agar dapat diskalakan. Misalnya, mereka harus dapat mendeteksi jumlah antrean penyimpanan yang digunakan secara dinamis untuk mendengarkan atau mengirim pesan ke antrean yang sesuai.
Secara default, WebJobs menskalakan dengan instans Azure Web Apps terkait. Namun, jika Anda ingin WebJob berjalan hanya sebagai satu instans, Anda dapat membuat file Settings.job yang berisi data JSON { "is_singleton": true }. Ini memaksa Azure untuk hanya menjalankan satu instans WebJob, bahkan jika ada beberapa instans aplikasi web terkait. Ini bisa menjadi teknik yang berguna untuk pekerjaan yang dijadwalkan yang harus dijalankan hanya sebagai satu instance.
Langkah selanjutnya
Sumber daya terkait
- polaQueue-Based Penyamarataan Beban
- Pola Desain Antrean Prioritas
- Pola Rancangan Pipa dan Filter
- Pola Pengawas Agen Penjadwal
- Mengimbangi pola Transaksi
- Pola Pemilihan Pemimpin
- Pola Konsumen yang Bersaing