Azure Webjobs vs Azure Fungsi: Cara memilih

163

Saya telah membuat beberapa Webjobs Azure yang menggunakan pemicu dan saya baru saja belajar tentang Fungsi Azure .

Dari apa yang saya pahami Fungsi Azure tampaknya tumpang tindih dengan fitur Azure Webjobs dan saya memiliki beberapa kesulitan untuk memahami kapan harus memilih antara Function dan Webjob:

  • Tidak seperti Webjobs, Fungsi hanya dapat dipicu, itu tidak dirancang untuk menjalankan proses yang berkelanjutan (tetapi Anda dapat menulis kode untuk membuat fungsi yang berkelanjutan).

  • Anda dapat menulis Webjobs dan Fungsi menggunakan banyak bahasa (C #, node.js, python ...) tetapi Anda dapat menulis fungsi Anda dari portal Azure sehingga lebih mudah dan lebih cepat untuk mengembangkan tes dan menggunakan Fungsi.

  • Webjobs dijalankan sebagai proses latar belakang dalam konteks aplikasi web Layanan Aplikasi, aplikasi API, atau aplikasi seluler sedangkan Fungsi dijalankan menggunakan Rencana Layanan Aplikasi Klasik / Dinamis.

  • Mengenai penskalaan, Fungsi tampaknya memberi lebih banyak kemungkinan karena Anda dapat menggunakan paket layanan aplikasi dinamis dan Anda dapat mengukur satu fungsi sedangkan untuk webjob Anda harus mengatur skala seluruh aplikasi web.

Jadi pasti ada perbedaan harga, jika Anda menjalankan aplikasi web yang ada, Anda dapat menggunakannya untuk menjalankan webjob tanpa biaya tambahan, tetapi jika saya tidak memiliki aplikasi web yang ada dan saya harus menulis kode untuk memicu antrian haruskah saya menggunakan webjob atau suatu Fungsi?

Apakah ada pertimbangan lain yang perlu diingat ketika Anda perlu memilih?

Thomas
sumber
6
Ini adalah posting blog yang saya berhutang. :) Saya akan mencoba menyiapkan respons, tetapi ini mungkin agak terbuka untuk Stack Overflow, jadi Anda mungkin perlu menanyakan ini pada MSDN jika ditutup.
Chris Anderson-MSFT
Posting blog yang bagus (pendek) tentang topik ini geekswithblogs.net/tmurphy/archive/2016/06/02/…
Todd Menier
Hai, Todd, silakan edit pertanyaan saya untuk menambahkan tautan. Artikel menarik ^^
Thomas
@ chris-anderson-msft Bisakah kita menjalankan PowerShell sebagai webjob? Bisakah kita menginstal paket PowerShell di Webjob?
anomepani

Jawaban:

170

Ada beberapa opsi di sini dalam Layanan Aplikasi. Saya tidak akan menyentuh Aplikasi Logika atau Otomatisasi Azure, yang juga menyentuh ruang ini.

Azure WebJobs

Artikel ini sejujurnya adalah penjelasan terbaik, tetapi saya akan meringkas di sini.

On Demand WebJobs alias. WebJobs terjadwal alias. WebJobs yang Dipicu

Triggered WebJobs adalah WebJobs yang dijalankan sekali ketika URL dipanggil atau ketika properti schedule ada di schedule.job . WebJobs Terjadwal hanyalah WebJobs yang telah memiliki Pekerjaan Azure Scheduler dibuat untuk memanggil URL kami pada jadwal, tetapi kami juga mendukung properti jadwal, seperti yang disebutkan sebelumnya.

Ringkasan:

  • + Dapat dieksekusi / Script on demand
  • + Eksekusi yang dijadwalkan
  • - Harus dipicu melalui titik akhir .scm
  • - Penskalaan adalah manual
  • - VM selalu dibutuhkan

Continuous WebJobs (non SDK)

Pekerjaan-pekerjaan ini berjalan selamanya dan kami akan membangunkan mereka ketika mereka crash. Anda harus mengaktifkan Selalu Aktif agar ini berfungsi, yang artinya menjalankannya dalam tingkat Dasar dan di atas.

Ringkasan:

  • + Executable / Script selalu berjalan
  • - Membutuhkan selalu - Tingkat dasar dan di atas
  • - VM selalu dibutuhkan

WebJobs berkelanjutan dengan SDK WebJobs

Ini bukan apa-apa dari sudut pandang "WebJobs fitur". Pada dasarnya, kami memiliki SDK manis yang kami tulis ini menargetkan WebJobs yang memungkinkan Anda mengeksekusi kode berdasarkan pemicu sederhana. Saya akan membicarakan hal ini lebih lanjut nanti.

Ringkasan:

  • + Executable / Script selalu berjalan
  • + Log / dasbor yang lebih tebal
  • + Pemicu didukung bersama dengan tugas yang berjalan lama
  • - Membutuhkan selalu - Tingkat dasar dan di atas
  • - Penskalaan adalah manual untuk mengatur
  • - Memulai bisa sedikit melelahkan
  • - VM selalu dibutuhkan

Azure WebJobs SDK

Azure WebJobs SDK adalah SDK yang sepenuhnya terpisah dari fitur platform WebJobs. Ini dirancang untuk dijalankan di WebJob, tetapi benar-benar dapat dijalankan di mana saja. Kami memiliki pelanggan yang menjalankannya berdasarkan peran pekerja dan bahkan di cloud premier atau lainnya, meskipun dukungan hanyalah upaya terbaik.

SDK hanya membuatnya mudah untuk menjalankan beberapa kode sebagai reaksi terhadap beberapa peristiwa dan membuat ikatan ke layanan / dll. mudah. Ini sejujurnya dibahas dalam beberapa dokumen , tetapi intinya adalah sifat "peristiwa" + "kode". Kami juga telah melakukan beberapa pekerjaan ekstensiblitas yang keren, tapi itu sekunder untuk tujuan inti.

Ringkasan:

  • Sebagian besar disebutkan di atas
  • +Anda dapat memperluas dan menjalankan apa pun yang Anda inginkan. Kontrol penuh.
  • - Hal-hal HTTP sedikit tidak pasti, tetapi berhasil

Fungsi Biru

Azure Functions adalah semua tentang mengambil tujuan inti dari WebJobs SDK, hosting sebagai layanan, dan membuatnya mudah untuk memulai dengan bahasa lain. Kami juga memperkenalkan konsep "Serverless" di sini karena sangat masuk akal untuk melakukannya - kami tahu bagaimana skala SDK kami, sehingga kami dapat melakukan hal-hal cerdas untuk Anda.

Fungsi Azure adalah pengalaman yang sangat terkelola. Kami tidak mendukung membawa tuan rumah Anda sendiri. Saat ini, kami tidak mendukung ekstensi khusus tetapi sesuatu yang sedang kami selidiki. Kami berpendapat tentang apa yang bisa dan tidak bisa Anda lakukan, tetapi untuk hal-hal yang kami aktifkan, mereka apik, dan mudah digunakan serta dikelola.

Namun, sebagian besar "kerangka" yang telah kami lakukan untuk meningkatkan fungsi melalui SDJ WebJobs. Misalnya, kami akan mengunggah NuGet baru untuk WebJobs yang benar-benar secara drastis meningkatkan kecepatan pencatatan, yang memiliki manfaat perf sangat besar bagi pengguna SDK WebJobs. Dalam Fungsi pengiriman sebagai "WebJobs SDK sebagai Layanan" kami telah benar-benar meningkatkan banyak masalah pengalaman.

Saya mungkin bias karena Functions adalah yang terbaru dan terhebat, tetapi merasa bebas untuk menembak lebih banyak kontra untuk Functions dengan cara saya.

Saya mungkin akan akhirnya menerbitkan blog yang sedikit lebih rumit, tapi saya mencoba untuk menjaga ini sesingkat mungkin untuk forum ini.

Chris Anderson-MSFT
sumber
1
Kedengarannya luar biasa. DM saya di Twitter (@ kode merek) jika Anda memiliki pertanyaan. Saya dapat membantu Anda mempromosikan sampel Anda di Azure.com jika Anda ingin, juga, jika Anda ingin membagikannya.
Chris Anderson-MSFT
1
Saya bisa melihat itu berguna. Saya tahu ada banyak ruang untuk membahas cara transisi dari server ke pola aplikasi tanpa server. Sepertinya itu terkait dengan apa yang baru saja Anda gambarkan.
Chris Anderson-MSFT
1
Pada dasarnya, kami mengambil kode dan konfigurasi Anda dan membuat Fungsi WebKob SDK (karenanya dinamai Azure Functions) di bawah sampulnya. Jadi kode Anda berjalan di dalam Fungsi SDK WebJob yang kami kelola untuk Anda.
Chris Anderson-MSFT
1
Setiap Aplikasi Fungsi memiliki 1 host (Yang mungkin Anda anggap sebagai WebJob). Fungsi Anda dalam Aplikasi Fungsi berbagi sistem file, pengaturan aplikasi, memori, cpu, dll. Jangan ragu untuk mengajukan pertanyaan baru.
Chris Anderson-MSFT
2
Iya. Pemicu waktu. Ekspresi Cron dari {0 * / 30 * * * *} azure.microsoft.com/en-us/documentation/articles/…
Chris Anderson-MSFT
17

Menjadi Fungsi Azure berdasarkan SDJ WebJobs, mereka menyediakan sebagian besar fungsi yang sudah tersedia di WebJobs, tetapi dengan beberapa kemampuan keren baru.

Dalam hal pemicu , selain yang sudah tersedia untuk WebJobs (mis. Bus Layanan, Antrian Penyimpanan, Blob Penyimpanan, jadwal CRON, WebHooks, EventHub, dan penyedia Penyimpanan Cloud File), Fungsi Azure dapat dipicu sebagai API. Dan panggilan HTTP tidak memerlukan kredensial kudu, tetapi dapat diautentikasi melalui Azure AD dan penyedia identitas pihak ketiga.

Berkenaan dengan output , satu-satunya perbedaan adalah bahwa Fungsi dapat mengembalikan respons ketika dipanggil melalui HTTP.

Keduanya mendukung berbagai bahasa , termasuk: bash (.sh), batch (.bat / .cmd), C #, F #, Node.Js, PHP, PowerShell, dan Python.

Menjadi Fungsi saat ini dalam Pratinjau, tooling masih belum ideal. Tetapi Microsoft sedang mengusahakannya. Semoga kami mendapatkan fleksibilitas yang sama untuk mengembangkan dan menguji fungsi secara lokal seperti yang kami lakukan saat ini untuk WebJobs dengan Visual Studio.

Keuntungan paling signifikan dan keren yang dibawa oleh Functions adalah alternatif memiliki Rencana Layanan Dinamis dengan model "Serverless" , di mana kita tidak perlu mengelola instance VM atau penskalaan; itu semua dikelola untuk kita. Selain itu, dengan tidak memiliki instance khusus, kami hanya membayar sumber daya yang sebenarnya kami gunakan.

Perbandingan yang lebih rinci antara keduanya di sini: https://blog.kloud.com.au/2016/09/14/azure-functions-or-webjobs/

HTH :)

Paco de la Cruz
sumber
Terima kasih atas jawaban Anda, Paco! Perbandingan ini dapat menarik minat banyak orang :-) Tapi saya tidak mencari perbandingan tetapi hanya mencoba memahami kapan saya harus pergi dengan fungsi daripada webjobs!
Thomas
6
Sulit untuk memiliki panduan yang jelas tanpa mengetahui konteksnya. Itu sebabnya saya percaya memiliki perbandingan mungkin bisa membantu orang untuk memilih :) Saya akan mengatakan bahwa: if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); } :)
Paco de la Cruz
Fungsi dapat mengembalikan respons ketika dipanggil melalui HTTP. Namun, Fungsi didasarkan pada SDK WebJobs. Aneh bukan?
RudyCo
Mungkin lebih baik untuk mengatakan bahwa mereka sedang berdasarkan WebJobs SDK, tetapi mereka telah berevolusi sedikit dari sana :)
Paco de la Cruz
14

Menurut dokumen Azure Functions memiliki yang berikut ini yang tidak dimiliki WebJobs:

  • Penskalaan otomatis (CPU dan memori diskalakan sesuai dengan kebutuhan yang ditentukan saat runtime)
  • Harga bayar per penggunaan (paket Konsumsi alih-alih paket Layanan Aplikasi)
  • Lebih banyak peristiwa pemicu (seperti WebHooks)
  • Pengembangan dalam browser (Visual Studio masih memungkinkan)
  • Dukungan F #

Sederhananya: Fungsi Azure adalah hewan yang lebih baru. Jika Anda belum memiliki paket Layanan Aplikasi, saya akan menggunakan Functions karena untuk jangka panjang saya tidak melihat alasan mengapa memulai dengan WebJobs akan lebih baik (Functions tooling mungkin belum stabil seperti sebelumnya).

pengguna764754
sumber
14

Saya ingin menambahkan dua poin lagi ke posting lama & sedikit di atas. jika Anda memilih paket konsumsi dalam fungsi biru, di bawah ini adalah batasannya

Jika Anda ingin menjalankan pekerjaan apa pun lebih dari 10 menit, pilih webjobs. Fungsi Azure, berjalan hanya selama 5 menit secara default, jika proses Anda melebihi 5 menit, maka fungsi azure melempar pengecualian batas waktu. Anda dapat menambah batas waktu hingga 10 menit di host.json .

Catatan: Tidak ada masalah batas waktu jika Anda menggunakan fungsi layanan paket biru.

Alasan lain untuk membedakan adalah. jika Anda menggunakan fungsi biru, maka waktu mulai awal Anda akan lambat karena mesin (wadah) dibuat dengan cepat dan dihancurkan begitu digunakan.

Untuk menghindari start yang dingin, aplikasi fungsi azure telah merilis paket premium, di mana satu instance akan berjalan sepanjang waktu dan berdasarkan pada beban aplikasi fungsi akan mulai melakukan penskalaan dan Anda akan ditagih untuk satu instance dan instance lain berdasarkan pada konsumsi.

Karthikeyan VK
sumber
Poin pertama Anda hanya berlaku adalah Anda menggunakan paket konsumsi, dengan sku berbayar Anda tidak memiliki batas waktu habis. Saya setuju dengan poin kedua.
Thomas
Saya pikir kedua poin valid untuk rencana konsumsi. Terima kasih telah menunjukkannya
Karthikeyan VK
4
Penyebutan timeout yang luar biasa. Bagi kami ini adalah faktor penting
Filter Niels
1
Tetapi Anda dapat memilih paket layanan sementara membuat fungsi biru. Tapi itu mengalahkan seluruh tujuan
Karthikeyan VK
1
@ KarthikeyanVK, saya tidak yakin apakah masih akurat karena fungsi runtime v2 memungkinkan lebih dari 10 menit?
Thomas
6

Saya menyadari bahwa saya sangat terlambat ke permainan dengan jawaban ini tetapi karena ini masih merupakan hasil pencarian teratas di Google, saya ingin memberikan beberapa panduan tentang topik ini secara ketat dari sudut pandang biaya karena tampaknya OP memiliki beberapa kekhawatiran tentang biaya . Sudah ada beberapa jawaban hebat di sini yang berbicara tentang batasan teknis dan perincian tentang bagaimana setiap layanan bekerja, jadi saya tidak akan mengulangi jawaban itu.

Jika Anda benar-benar membutuhkan sesuatu yang berjalan dengan "gratis" (seperti tanpa biaya tambahan untuk apa yang sudah Anda bayar untuk aplikasi web Anda) maka Anda memiliki dua opsi:

  1. Webjobs - digunakan di samping aplikasi web Anda yang ada dan menggunakan sumber daya yang sama dengan aplikasi web Anda. Tidak ada biaya moneter tambahan untuk menggunakan webjobs tetapi ada beberapa batasan seperti yang telah disebutkan yang dapat menyebabkan biaya kinerja pada aplikasi web Anda.
  2. Fungsi - Saat menggunakan paket konsumsi, Anda diberikan sejumlah eksekusi gratis. Jumlah pada saat penulisan ini sebenarnya cukup tinggi, 1 juta eksekusi gratis. Namun, batas eksekusi 1 juta bukanlah batas yang cenderung membuat Anda kesulitan; itu adalah 400K GB-s (detik gigabyte). Ini pada dasarnya adalah perhitungan jumlah memori yang digunakan fungsi Anda dikalikan dengan jumlah detik yang dijalankan (lihat perhitungan resmi di halaman harga di sini ). Anda akan terkejut betapa cepatnya penjatahan gratis ini digunakan.

Jika Anda khawatir tentang biaya tetapi tidak terbatas pada tanpa biaya sama sekali, maka Anda memiliki lebih banyak opsi yang tersedia.

  1. Fungsi - Anda dapat menjalankan paket konsumsi atau paket layanan aplikasi dengan harga yang relatif murah. Perlu diingat, model penagihan GB-s. Jika Anda menggunakan rencana konsumsi dan sering melakukan pekerjaan "berat" - Anda mungkin akan terkejut dengan tagihan besar.
  2. Layanan Cloud - Opsi ini belum dibahas sebagai alternatif, terutama karena OP tidak menanyakannya. Tapi ini juga merupakan opsi yang layak. Layanan cloud pada akhirnya hanyalah VM yang berjalan di cloud sehingga Anda dapat menjalankan pekerjaan latar belakang apa pun yang Anda perlukan dan meningkatkannya dengan baik (meskipun Anda harus memasang pemicu Anda sendiri untuk dieksekusi, sedikit ketidaknyamanan dibandingkan dengan webjobs / fungsi ). Mereka memiliki lebih banyak biaya awal yang terkait dengan mereka (karena Anda membayar per instance apakah Anda menggunakannya atau tidak) tetapi jika Anda memiliki pekerjaan yang perlu terus berjalan dan melakukan banyak pekerjaan "berat", maka layanan cloud mungkin merupakan pilihan yang lebih baik karena lebih mudah untuk mengelola / memantau VM dengan harga tetap daripada eksekusi dan gigabyte detik, menurut saya.

Jika Anda tertarik membaca beberapa skenario tertentu dan mengapa saya memilih satu (webjobs, fungsi, layanan cloud), yang lain, saya baru saja menulis posting blog di webjobs vs fungsi vs layanan cloud .

Dan
sumber
1
Terima kasih atas jawabannya @Dan :-) Saya akan mengatakan layanan Cloud masih bagus tapi saya berpikir untuk membandingkan webjob dan fungsi karena mereka berbagi SDK inti yang sama dan 2 tahun setengah sebelumnya, saya tidak benar-benar memahami tujuan serverless :-)
Thomas
3

Pertimbangan utama adalah bahwa Azure Functions berhenti mendukung .NET Framework setelah versi 1, yang dihentikan dengan v2.0, dan yang tidak akan berubah sekarang di pratinjau v3.0. 😔

Sementara itu, pendekatan bersenjata yang kuat ini untungnya tidak diterapkan - belum - untuk Azure WebJobs :

Versi 3.x dari WebJobs SDK mendukung aplikasi konsol .NET Core dan .NET Framework.

Nicholas Petersen
sumber
Poin bagus. Bahkan, mulai sekarang orang harus mencoba menggunakan net core sebanyak yang mereka bisa.
Thomas
0

Saya ingin memberikan persamaan dan perbedaan antara dua fungsi Azure yang dibangun di atas AppService dan WebJobs SDK. WebJobs SDK akan memberi Anda lebih banyak kebebasan untuk bermain sementara fungsi Azure lebih terstruktur dengan lebih sedikit tanggung jawab untuk pengembang.

Ketika Anda melihat kesamaan keduanya menggunakan mode pemrograman berorientasi fungsi, binding untuk trigger / input / output, mendukung perpustakaan eksternal dan dapat menjalankan dan men-debug perlengkapan mandi Supportruntime secara lokal.

Perbedaan

|-----------------------|------------------|
|      Functions        |     Web Jobs     |
|-----------------------|------------------|
|Can support HTTP       | Can't support HTTP
|                       |  requests        |
|-----------------------|------------------|
|Supports a variety of  | Traditional .NET |
|languages/tools        | developer        |
|                       | experience       |
|-----------------------|------------------|
|Bindings are configured| Config files are |
|using attributes       | used             |
|-----------------------|------------------|
|Scale is managed by    | Scale is managed |
|Azure                  | by user          |
|-----------------------|------------------|
|Limited control over   |Host can be       |
|host                   |controlled by user|
--------------------------------------------

masukkan deskripsi gambar di sini

Sajeetharan
sumber