Topik ini menjelaskan cara mengoptimalkan cold start untuk instans elastis dan meningkatkan kinerja fungsi di Function Compute dengan menetapkan jumlah minimum instans.
Apa itu cold start?
Function Compute menggunakan instans elastis secara default. Instans ini melakukan scaling secara otomatis sebagai respons terhadap permintaan. Saat permintaan tiba, sistem membuat sebuah instans untuk memprosesnya. Instans tersebut diklaim kembali setelah tidak lagi memproses permintaan. Anda hanya dikenai biaya untuk waktu yang digunakan instans dalam memproses permintaan. Meskipun model elastis ini menyederhanakan manajemen sumber daya, hal ini dapat menyebabkan masalah kinerja, seperti cold start dan latensi tinggi.
Cold start adalah proses menyiapkan lingkungan eksekusi dan kode Anda. Proses ini mencakup pengunduhan kode, memulai kontainer instans fungsi, menginisialisasi runtime, dan menginisialisasi kode Anda. Setelah cold start selesai, instans fungsi dapat memproses permintaan.
Mengoptimalkan cold start
Mengoptimalkan cold start merupakan tanggung jawab bersama antara pengguna dan platform. Meskipun Function Compute telah menerapkan banyak optimasi tingkat sistem, Anda dapat menggunakan metode berikut untuk lebih lanjut mengurangi waktu cold start:
Menyederhanakan paket kode
Anda dapat menjaga ukuran paket kode seminimal mungkin dengan menghapus dependensi yang tidak diperlukan. Misalnya, jalankan perintah npm prune di Node.js atau autoflake di Python. Selain itu, beberapa pustaka pihak ketiga mungkin berisi file yang tidak diperlukan untuk eksekusi, seperti kode sumber kasus uji, file biner yang tidak digunakan, atau file data. Menghapus file-file tersebut dapat mengurangi waktu yang dibutuhkan untuk mengunduh dan mengekstrak kode Anda.
Memilih bahasa fungsi yang tepat
Runtime Java biasanya memiliki waktu cold start yang lebih lama dibandingkan bahasa lain karena perbedaan dalam desain bahasa. Untuk aplikasi yang sensitif terhadap latensi cold start, Anda dapat menggunakan bahasa ringan seperti Python untuk secara signifikan mengurangi latensi ekor panjang (long-tail latency), terutama jika perbedaan latensi warm start antar bahasa tidak terlalu besar.
Memilih ukuran memori yang sesuai
Konfigurasi memori yang lebih besar mengalokasikan lebih banyak sumber daya CPU pada tingkat konkurensi yang sama, sehingga menghasilkan kinerja cold start yang lebih baik.
Mengurangi kemungkinan terjadinya cold start
Anda dapat menggunakan penanganan Initializer. Function Compute memanggil antarmuka inisialisasi secara asinkron, yang memisahkan waktu inisialisasi kode dari waktu eksekusi permintaan. Akibatnya, cold start tidak terasa selama peningkatan sistem Function Compute atau pembaruan fungsi.
Mode campuran
Beberapa cold start di sisi pengguna sulit dihilangkan. Misalnya, inferensi pembelajaran mendalam memerlukan pemuatan file model besar. Contoh lain adalah fungsi yang harus berinteraksi dengan sistem warisan menggunakan client yang memiliki waktu inisialisasi panjang. Dalam skenario ini, jika fungsi Anda sangat sensitif terhadap latensi, Anda dapat menetapkan jumlah minimum instans menjadi 1 atau lebih. Saat permintaan tiba, instans-instans yang dalam keadaan hibernasi ini dapat bangun dengan cepat untuk memproses permintaan tersebut.
Saat jumlah minimum instans ditetapkan menjadi 1 atau lebih, sistem memberikan prioritas untuk menetapkan permintaan ke instans-instans yang telah dipanaskan sebelumnya (pre-warmed). Jika instans pre-warmed tidak mampu menangani beban kerja saat ini, sistem secara otomatis membuat lebih banyak instans elastis. Pendekatan ini menyeimbangkan kinerja dan pemanfaatan sumber daya. Dengan menetapkan jumlah minimum instans, Anda mengalokasikan sumber daya komputasi terlebih dahulu untuk menangani fluktuasi beban kerja. Sistem tetap menggunakan instans pre-warmed untuk memproses permintaan bahkan saat sedang membuat instans tambahan, sehingga menghilangkan latensi cold start untuk permintaan yang ditangani oleh instans pre-warmed.
Sebagai contoh, asumsikan jumlah minimum instans untuk suatu fungsi ditetapkan menjadi 10. Jika beban kerja konkuren memerlukan lebih dari 10 instans, sistem membuat instans elastis baru untuk menangani permintaan tambahan tersebut. Apakah sebuah instans telah dimuat penuh bergantung pada konfigurasi konkurensinya. Sistem melacak jumlah permintaan yang sedang diproses pada setiap instans fungsi. Ketika jumlah permintaan konkuren pada sebuah instans mencapai batas yang dikonfigurasi, sistem mengarahkan permintaan baru ke instans lain yang tersedia. Saat semua instans yang tersedia mencapai batas konkurensinya, instans baru akan dibuat.
Jika Anda menetapkan jumlah minimum instans menjadi 1 atau lebih, Anda akan dikenai biaya untuk instans-instans tersebut meskipun tidak sedang memproses permintaan. Biaya tersebut didasarkan pada harga satuan untuk instans elastis dalam keadaan hibernasi dangkal. Untuk informasi lebih lanjut mengenai penagihan, lihat Billing overview. Untuk memastikan penggunaan sumber daya tetap berada dalam rentang yang diinginkan, Anda dapat configure a maximum number of instances.