Instans sesuai permintaan dapat mengalami cold start ketika lingkungan eksekusi baru harus dipersiapkan sebelum menangani permintaan. Cold start menambah latensi dan paling terasa pada beban kerja yang sensitif terhadap latensi, seperti aplikasi web dan seluler. Topik ini menjelaskan penyebab cold start, cara menguranginya melalui perubahan kode dan konfigurasi, serta kapan menggunakan instans yang disediakan untuk menghilangkannya sepenuhnya.
Apa itu cold start?
Function Compute mendukung dua tipe instans: on-demand instances dan provisioned instances.
Instans sesuai permintaan dialokasikan dan dilepas secara otomatis oleh Function Compute. Anda hanya dikenai biaya untuk waktu yang dihabiskan instans dalam memproses permintaan. Instans sesuai permintaan menghilangkan beban manajemen infrastruktur, tetapi menyebabkan cold start ketika instans baru harus dipersiapkan sebelum dapat menangani permintaan.
Cold start mencakup empat fase:
Code download — paket penyebaran diambil dari penyimpanan
Container start — lingkungan eksekusi baru diinisialisasi
Runtime initialization — runtime bahasa pemrograman dijalankan
Code initialization — inisialisasi Anda dijalankan (jika dikonfigurasi)
Setelah keempat fase selesai, instans siap memproses permintaan berikutnya tanpa cold start.
Kurangi latensi cold start
Function Compute mengoptimalkan cold start di tingkat platform. Di sisi pengguna, teknik-teknik berikut dapat secara signifikan mengurangi durasi dan frekuensi cold start.
Gunakan paket kode yang ringan
Jaga agar ukuran paket penyebaran Anda sekecil mungkin:
Hapus dependensi yang tidak digunakan. Jalankan
npm pruneuntuk proyek Node.js atauautoflakeuntuk proyek Python.Hapus file yang tidak diperlukan saat runtime, seperti kode sumber pengujian, file biner yang tidak digunakan, dan file data tambahan dari pustaka pihak ketiga.
Paket yang lebih kecil mengurangi waktu yang dibutuhkan untuk mengunduh dan mengekstraksi kode selama fase pertama cold start.
Pilih runtime yang ringan
Beberapa runtime memiliki waktu inisialisasi lebih lama dibanding yang lain. Misalnya, Java memiliki durasi cold start yang jauh lebih panjang dibanding Python. Untuk aplikasi yang sensitif terhadap latensi di mana performa warm-start serupa di berbagai runtime, beralih ke runtime yang lebih ringan seperti Python dapat mengurangi tail latency.
Konfigurasikan memori yang cukup
Alokasi CPU suatu fungsi meningkat seiring dengan konfigurasi memorinya. Untuk fungsi dengan konkurensi tetap, peningkatan memori memberikan lebih banyak sumber daya CPU kepada runtime, yang dapat mengurangi baik waktu inisialisasi maupun waktu eksekusi.
Kurangi frekuensi cold start
Dua mekanisme membantu mengurangi seberapa sering cold start terjadi:
Time trigger: Jadwalkan time trigger untuk memanggil fungsi secara berkala, sehingga setidaknya satu instans tetap hangat di antara permintaan nyata.
Initializer hook: Initializer hook memungkinkan Function Compute memanggil kode inisialisasi Anda secara asinkron, sebelum permintaan tiba. Selama pembaruan sistem dan fungsi Function Compute, cold start akibat inisialisasi kode menjadi tidak terlihat oleh pengguna akhir.
Gunakan provisioned instances untuk beban kerja yang sensitif terhadap latensi
Beberapa beban kerja tidak dapat menghindari cold start hanya dengan optimasi kode. Fungsi inferensi deep learning yang memuat file model besar, atau fungsi yang menginisialisasi koneksi jangka panjang ke sistem warisan, mungkin memerlukan waktu inisialisasi beberapa detik terlepas dari seberapa ringan paket kodenya. Untuk kasus-kasus ini, gunakan provisioned instances.
Provisioned instances dialokasikan dan dilepas oleh Anda, bukan oleh sistem. Anda dikenai biaya berdasarkan durasi instans berjalan, bahkan saat instans menganggur. Sebagai gantinya, provisioned instances selalu siap menangani permintaan tanpa cold start.
Cara kerja provisioned instances dan on-demand instances secara bersamaan
Konfigurasikan kedua jenis instans—provisioned dan on-demand—untuk menyeimbangkan performa dan biaya. Provisioned instances menangani permintaan terlebih dahulu. On-demand instances dialokasikan secara otomatis ketika kapasitas instans yang disediakan telah habis.
Contoh: Jika Anda mengonfigurasi 10 provisioned instances dan volume permintaan melebihi 10 invokasi konkuren per detik, Function Compute akan mengalokasikan on-demand instances untuk menangani kelebihan tersebut. Provisioned instances terus menangani bagian trafiknya tanpa cold start. On-demand instances akan dilepas setelah menganggur selama periode tertentu; Anda hanya dikenai biaya untuk waktu yang dihabiskan dalam memproses permintaan.
Status "penuh" suatu instans bergantung pada pengaturan konkurensinya. Function Compute melacak permintaan yang sedang berjalan di setiap instans. Ketika instans mencapai batas konkurensinya, instans baru digunakan. Saat semua provisioned instances mencapai batas konkurensi, on-demand instances baru dibuat.
Untuk menjaga penggunaan sumber daya tetap dalam rentang yang dapat diprediksi, tetapkan batas atas alokasi on-demand instances.
Untuk detail penagihan, lihat Billing overview.
Pilih pendekatan yang tepat
| Skenario | Pendekatan yang direkomendasikan |
|---|---|
| Cold start terjadi tetapi latensi invokasi masih dapat diterima | Optimalkan ukuran paket kode dan pilih runtime yang ringan |
| Cold start jarang terjadi; menjaga instans tetap hangat sudah cukup | Tambahkan time trigger atau gunakan Initializer hook |
| Inisialisasi memakan waktu beberapa detik (file model besar, klien sistem warisan) | Gunakan provisioned instances |
| Trafik tidak dapat diprediksi dan biaya harus tetap terbatas | Gunakan kombinasi provisioned dan on-demand instances dengan batas atas alokasi on-demand |