Praktik Terbaik untuk Azure Functions yang dapat diandalkan

Azure Functions adalah pengalaman berbasis peristiwa, dengan komputasi sesuai permintaan yang memperluas platform aplikasi Azure App Service yang ada dengan kemampuan untuk mengimplementasikan kode yang dipicu oleh peristiwa yang terjadi di Azure, dalam layanan pihak ketiga, dan dalam sistem lokal. Functions memungkinkan Anda membangun solusi dengan menyambungkan ke sumber data atau solusi Olahpesan, yang memudahkan proses dan reaksi terhadap peristiwa. Functions berjalan pada pusat data Azure, yang bersifat kompleks dengan banyak komponen yang terintegrasi. Dalam lingkungan cloud yang dihosting, Mesin Virtual diharapkan pada beberapa waktu dapat memulai ulang atau berpindah, dan peningkatan sistem akan terjadi. Aplikasi fungsi Anda juga mungkin bergantung pada API eksternal, Layanan Azure, dan database lainnya, yang juga rentan terhadap masalah keandalan berkala.

Artikel ini merinci beberapa praktik terbaik untuk merancang dan menyebarkan aplikasi fungsi efisien yang tetap sehat dan memiliki performa yang baik di lingkungan berbasis cloud.

Pilih paket hosting yang tepat

Saat membuat aplikasi fungsi di Azure, Anda harus memilih paket hosting untuk aplikasi Anda. Paket yang Anda pilih akan berdampak pada performa, keandalan, dan biaya. Terdapat tiga paket hosting dasar yang tersedia bagi Functions:

Semua paket hosting memiliki ketersediaan umum saat menjalankan Linux atau Windows.

Dalam konteks platform App Service, paket Premium yang digunakan untuk meng-host fungsi Anda secara dinamis adalah paket Elastic Premium (EP). Ada paket Khusus (App Service) lainnya yang disebut Premium. Untuk mempelajari selengkapnya, lihat artikel Paket premium.

Paket hosting yang Anda pilih menentukan perilaku berikut:

  • Bagaimana aplikasi fungsi Anda diskalakan berdasarkan permintaan dan bagaimana alokasi instans dikelola.
  • Sumber daya yang tersedia untuk setiap instans aplikasi fungsi.
  • Dukungan untuk fungsionalitas tingkat lanjut, seperti konektivitas Microsoft Azure Virtual Network.

Untuk mempelajari selengkapnya tentang memilih paket hosting yang tepat dan untuk perbandingan detail antara paket, lihat Opsi hosting Azure Functions.

Sangat penting bahwa Anda memilih paket yang tepat ketika Anda membuat aplikasi fungsi Anda. Functions menyediakan kemampuan terbatas untuk mengubah paket hosting Anda, terutama antara paket Konsumsi dan Elastic Premium. Untuk mempelajari selengkapnya, lihat Rencanakan migrasi.

Mengonfigurasi penyimpanan dengan benar

Functions mengharuskan akun penyimpanan terkait dengan aplikasi fungsi Anda. Koneksi akun penyimpanan digunakan oleh host Functions untuk operasi seperti mengelola pemicu dan mencatat eksekusi fungsi. Ini juga digunakan saat menyesuaikan aplikasi fungsi secara dinamis. Untuk mempelajari selengkapnya, lihat Pertimbangan penyimpanan untuk Azure Functions.

Konfigurasi sistem file atau akun penyimpanan yang salah di aplikasi fungsi Anda dapat memengaruhi performa dan ketersediaan fungsi Anda. Untuk bantuan pemecahan masalah akun penyimpanan yang konfigurasinya salah, lihat artikel pemecahan masalah penyimpanan.

Pengaturan koneksi penyimpanan

Aplikasi fungsi yang mampu menyesuaikan secara dinamis, dapat berjalan baik dari titik akhir Azure Files di akun penyimpanan Anda atau dari server file yang terkait dengan instans Anda yang skalanya diperluas. Perilaku ini dikontrol oleh pengaturan aplikasi berikut:

Pengaturan ini hanya didukung ketika Anda berjalan dalam paket Premium atau dalam paket Konsumsi di Windows.

Saat Anda membuat aplikasi fungsi baik di portal Microsoft Azure atau dengan menggunakan Azure CLI atau Azure PowerShell, pengaturan ini dibuat untuk aplikasi fungsi Anda bila diperlukan. Saat Anda membuat sumber daya dari templat Azure Resource Manager (templat ARM), Anda juga perlu menyertakan WEBSITE_CONTENTAZUREFILECONNECTIONSTRING dalam templat.

Pada penyebaran pertama Anda menggunakan templat ARM, jangan sertakan WEBSITE_CONTENTSHARE, yang dihasilkan untuk Anda.

Anda dapat menggunakan contoh templat ARM berikut untuk membantu mengonfigurasi pengaturan ini dengan benar:

Konfigurasi akun penyimpanan

Saat membuat aplikasi fungsi, Anda harus membuat atau menautkan ke akun Azure Storage umum yang mendukung penyimpanan Blob, Antrean, dan Tabel. Functions mengandalkan Azure Storage untuk operasi seperti mengelola pemicu dan mencatat eksekusi fungsi. String koneksi akun penyimpanan untuk aplikasi fungsi Anda ditemukan di pengaturan aplikasi AzureWebJobsStorage dan WEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

Pertimbangan berikut perlu diingat saat membuat akun penyimpanan ini:

  • Untuk mengurangi latensi, buat akun penyimpanan di wilayah yang sama dengan aplikasi fungsi.

  • Untuk meningkatkan performa produksi, gunakan akun penyimpanan terpisah untuk setiap aplikasi fungsi. Hal ini terutama berlaku dengan Fungsi Tahan Lama dan fungsi yang dipicu oleh Event Hub.

  • Untuk fungsi yang dipicu oleh Event Hub, jangan gunakan akun dengan Data Lake Storage yang diaktifkan.

Menangani himpunan data besar

Saat berjalan di Linux, Anda dapat menambahkan penyimpanan tambahan dengan memasang berbagi. Memasang berbagi adalah cara yang baik bagi fungsi untuk memproses himpunan data besar yang ada. Untuk mempelajari selengkapnya, lihat Memasang berbagi.

Mengatur fungsi Anda

Sebagai bagian dari solusi Anda, Anda kemungkinan mengembangkan dan menerbitkan beberapa fungsi. Fungsi-fungsi ini sering digabungkan ke dalam satu aplikasi fungsi, tetapi mereka juga dapat berjalan di aplikasi fungsi terpisah. Dalam paket hosting Premium dan Khusus (App Service), beberapa aplikasi fungsi juga dapat berbagi sumber daya yang sama dengan berjalan dalam paket yang sama. Cara mengelompokkan fungsi dan aplikasi fungsi dapat memengaruhi kinerja, penskalaan, konfigurasi, penyebaran, dan keamanan solusi Anda secara keseluruhan.

Untuk paket Konsumsi dan Premium, semua fungsi dalam aplikasi fungsi diskalakan secara dinamis bersama.

Untuk informasi selengkapnya tentang cara mengatur fungsi Anda, lihat Praktik terbaik organisasi fungsi.

Optimalkan penyebaran

Saat menyebarkan aplikasi fungsi, penting untuk diingat bahwa unit penyebaran untuk fungsi di Azure adalah aplikasi fungsi. Semua fungsi dalam aplikasi fungsi disebarkan pada saat yang sama, biasanya dari paket penyebaran yang sama.

Pertimbangkan opsi ini untuk penyebaran yang berhasil:

  • Jalankan fungsi Anda dari paket penyebaran. Pendekatan jalankan dari paket ini memberikan manfaat berikut:

    • Mengurangi risiko masalah penguncian salinan file.
    • Dapat disebarkan langsung ke aplikasi produksi, yang memicu hidupkan ulang.
    • Ketahui bahwa semua file dalam paket tersedia untuk aplikasi Anda.
    • Meningkatkan performa penyebaran templat ARM.
    • Dapat mengurangi waktu mulai dingin, terutama untuk fungsi JavaScript dengan pohon paket npm besar.
  • Pertimbangkan untuk menggunakan penyebaran berkelanjutan untuk menyambungkan penyebaran ke solusi kontrol sumber Anda. Penyebaran berkelanjutan juga memungkinkan Anda menjalankan dari paket penyebaran.

  • Untuk Hosting paket premium, pertimbangkan untuk menambahkan pemicu pemanasan untuk mengurangi latensi saat instans baru ditambahkan. Untuk mempelajari selengkapnya, lihat Pemicu pemanasan Azure Functions.

  • Untuk meminimalkan waktu henti penyebaran dan untuk dapat mengembalikan penyebaran, pertimbangkan untuk menggunakan slot penyebaran. Untuk mempelajari lebih lanjut, lihat slot penyebaran Azure Functions.

Tulis fungsi yang tangguh

Ada beberapa prinsip desain yang dapat Anda ikuti ketika menulis kode fungsi Anda yang membantu performa dan ketersediaan umum fungsi Anda. Prinsip-prinsip ini meliputi:

Karena kegagalan sementara umum terjadi dalam komputasi cloud, Anda harus menggunakan pola percobaan ulang saat mengakses sumber daya berbasis cloud. Banyak pemicu dan pengikatan yang sudah menerapkan mencoba kembali.

Desain untuk keamanan

Keamanan paling baik dipertimbangkan selama fase perencanaan dan bukan setelah fungsi Anda siap untuk dijalankan. Untuk Mempelajari cara mengembangkan dan menyebarkan fungsi dengan aman, lihat Mengamankan Azure Functions.

Pertimbangkan konkurensi

Karena permintaan dibangun di aplikasi fungsi Anda sebagai akibat dari peristiwa yang masuk, aplikasi fungsi yang berjalan di paket Konsumsi dan Premium mengalami peluasan skala. Penting untuk memahami cara aplikasi fungsi Anda merespons pemuatan dan cara pemicu dapat dikonfigurasi untuk menangani peristiwa yang masuk. Untuk gambaran umum, lihat Penskalaan yang digerakkan oleh kejadian di Azure Functions.

Paket Khusus (App Service) mengharuskan Anda untuk memenuhi peluasan skala aplikasi fungsi Anda.

Jumlah proses pekerja

Dalam beberapa kasus, lebih efisien untuk menangani muatan dengan membuat beberapa proses, yang disebut proses pekerja bahasa pemrogram, dalam instans sebelum peluasan skala. Jumlah maksimum proses pekerja bahasa pemrogram yang diizinkan dikontrol oleh pengaturan FUNCTIONS_WORKER_PROCESS_COUNT. Default untuk pengaturan ini adalah 1, yang berarti bahwa beberapa proses tidak digunakan. Setelah jumlah maksimum proses tercapai, aplikasi fungsi mengalami peluasan skala ke lebih banyak instans untuk menangani beban. Pengaturan ini tidak berlaku untuk fungsi pustaka kelas C #, yang berjalan dalam proses host.

Saat menggunakan FUNCTIONS_WORKER_PROCESS_COUNT pada paket Premium atau paket Khusus (App Service), ingat jumlah inti yang disediakan oleh paket Anda. Misalnya, paket Premium EP2 menyediakan dua inti, maka Anda harus mulai dengan nilai 2 dan bertambah sebanyak dua sesuai kebutuhan, hingga mencapai jumlah maksimum.

Konfigurasi pemicu

Ketika merencanakan throughput dan penyesuaian, penting untuk memahami cara berbagai jenis pemicu memproses peristiwa. Beberapa pemicu memungkinkan Anda untuk mengontrol perilaku batching dan mengelola konkurensi. Seringkali menyesuaikan nilai dalam opsi ini dapat membantu setiap instans menskalakan dengan tepat untuk tuntutan fungsi yang dipanggil. Opsi konfigurasi ini diterapkan pada semua pemicu dalam aplikasi fungsi, dan dipelihara dalam file host.json untuk aplikasi. Lihat bagian Konfigurasi dari referensi pemicu spesifik untuk detail pengaturan.

Untuk mempelajari selengkapnya tentang cara Fungsi memproses aliran pesan, lihat Pemrosesan peristiwa yang andal Azure Functions.

Merencanakan koneksi

Aplikasi fungsi yang berjalan dalam Paket Konsumsi tunduk pada batas koneksi. Batas-batas ini diberlakukan dengan dasar per-instans. Karena batas-batas ini dan sebagai praktik terbaik umum, Anda harus mengoptimalkan koneksi keluar dari kode fungsi Anda. Untuk mempelajari selengkapnya, lihat Mengelola koneksi di Azure Functions.

Pertimbangan khusus bahasa pemrogram

Untuk bahasa pemrogram pilihan Anda, perlu diingat pertimbangan berikut:

Memaksimalkan ketersediaan

Cold start adalah pertimbangan utama untuk arsitektur tanpa server. Untuk mempelajari lebih lanjut, lihat Cold starts. Jika cold start menjadi perhatian untuk skenario Anda, Anda dapat menemukan pembahasan yang lebih dalam di posting Memahami cold start tanpa server .

Paket premium adalah rencana yang direkomendasikan untuk mengurangi cold start sambil memelihara skala yang dinamis. Anda dapat menggunakan panduan berikut untuk mengurangi cold starts dan meningkatkan ketersediaan di ketiga paket hosting.

Paket Panduan
Paket premium Menerapkan pemicu Pemanasan di aplikasi fungsi Anda
Atur nilai untuk instans Always-Ready dan batas Max Burst
Gunakan dukungan pemicu jaringan virtual saat menggunakan pemicu non-HTTP pada jaringan virtual
Paket khusus Jalankan setidaknya dua instans dengan mengaktifkan Azure App Service Health Check
Menerapkan penyesuaian otomatis
Paket Konsumsi • Tinjau penggunaan pola Singleton dan pengaturan konkurensi untuk pengikatan dan pemicu untuk menghindari menempatkan batasan secara artifisial pada cara menyesuaikan aplikasi fungsi Anda.
Tinjau pengaturan functionAppScaleLimit, yang dapat membatasi peluasan skala
• Periksa batas Kuota Penggunaan Harian (GB-Sec) yang ditetapkan selama pengembangan dan pengujian. Pertimbangkan untuk menghapus batas ini di lingkungan produksi.

Memantau secara efektif

Azure Functions menawarkan integrasi bawaan dengan Azure Application Insights untuk memantau eksekusi fungsi Anda dan jejak yang ditulis dari kode Anda. Untuk mempelajari selengkapnya, lihat Memantau Azure Functions. Azure Monitor juga menyediakan fasilitas untuk memantau kesehatan aplikasi fungsi itu sendiri. Untuk mempelajari selengkapnya, lihat Memantau dengan Azure Monitor.

Anda harus mengetahui pertimbangan berikut saat menggunakan integrasi Application Insights untuk memantau fungsi Anda:

  • Pastikan pengaturan aplikasi AzureWebJobsDashboard dihapus. Pengaturan ini didukung dalam versi Fungsi yang lebih lama. Jika ada, menghapus AzureWebJobsDashboard meningkatkan performa fungsi Anda.

  • Tinjau Log Application Insights. Jika data yang seharusnya ada ternyata hilang, pertimbangkan untuk menyesuaikan pengaturan pengambilan sampel untuk menangkap skenario pemantauan Anda dengan lebih baik. Anda dapat menggunakan pengaturan excludedTypes untuk mengecualikan jenis tertentu dari pengambilan sampel, seperti Request atau Exception. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi pengambilan sampel.

Azure Functions juga memungkinkan Anda untuk mengirim log yang dihasilkan sistem dan buatan pengguna ke Log Azure Monitor. Integrasi dengan Azure Monitor Logs saat ini sedang dalam pratinjau publik.

Membangun redundansi

Kebutuhan bisnis Anda mungkin mengharuskan fungsi Anda selalu tersedia, bahkan selama pemadaman pusat data. Untuk mempelajari cara menggunakan pendekatan multi-regional untuk menjaga fungsi penting Anda selalu berjalan, lihat Pemulihan geo-bencana Azure Functions dan ketersediaan tinggi.

Langkah berikutnya

Mengelola aplikasi fungsi Anda