Saat menangani permintaan pengguna, Function Compute secara otomatis mengalokasikan satu atau beberapa instans. Setiap instans menyediakan lingkungan runtime yang aman dan terisolasi. Saat memigrasikan aplikasi tradisional ke arsitektur serverless, sifat sementara dari pembuatan dan penghancuran instans dapat menyebabkan masalah seperti keterlambatan pembaruan data pemantauan, latensi metrik, atau kehilangan data. Untuk mengatasi hal tersebut, Function Compute menyediakan instance lifecycle hook untuk memastikan data pemantauan Anda tetap tepat waktu dan lengkap.
Siklus hidup instans fungsi
Instans fungsi dibuat dan dihapus sesuai permintaan berdasarkan volume pemanggilan fungsi Anda saat ini. Siklus hidup setiap instans fungsi mencakup tiga fase: instance creation, invocation, dan instance destruction, seperti yang ditunjukkan pada gambar berikut.
Creating
Selama fase Creating, Function Compute membuat instans fungsi berdasarkan konfigurasi fungsi Anda. Pada fase ini, Function Compute menjalankan tugas-tugas berikut secara berurutan:
-
Instance Create: mencakup pemuatan kode, pemuatan layer atau penarikan image, serta memulai instans.
-
Runtime Init.
-
Jalankan kait Initializer yang dikonfigurasi. Untuk informasi lebih lanjut, lihat Initializer hook.
Pembuatan instans biasanya terjadi dalam dua skenario berikut.
-
Elastic scale-out
Saat permintaan pemanggilan diterima dan semua instans fungsi saat ini sedang sibuk, instans baru dibuat untuk menangani permintaan tersebut. Instans dibuat segera, lalu proses pemanggilan dimulai. Elastic scale-out ini dapat menyebabkan cold start. Untuk informasi tentang cara mengurangi masalah ini, lihat Best practices for optimizing cold starts in Function Compute.
-
Penyesuaian jumlah minimum instans
Jika Anda mengubah jumlah minimum instans yang dikonfigurasi dari 0 menjadi 1 atau lebih, Function Compute segera memulai proses pembuatan instans. Jika tidak ada permintaan pemanggilan yang diterima pada saat itu, mungkin terjadi jeda antara pembuatan instans dan pemanggilan pertama. Untuk informasi lebih lanjut, lihat Configure an elastic policy for the minimum number of instances.
Invoke
Selama instans berjalan, Function Compute memanggil handler fungsi Anda untuk memproses permintaan pemanggilan. Selama fase pemanggilan, untuk runtime bawaan, satu instans hanya menangani satu permintaan dalam satu waktu. Untuk custom runtime atau custom container runtime, satu instans dapat menangani beberapa permintaan secara konkuren dengan mengonfigurasi instance concurrency. Untuk informasi lebih lanjut, lihat Configure instance concurrency.
Function Compute hanya menagih waktu saat kode Anda dieksekusi, termasuk permintaan dan handler hook. Selama periode idle antar permintaan, instans dibekukan dan tidak dikenai biaya. Untuk informasi lebih lanjut, lihat Billing.
Destroy
Fase ini dipicu jika instans fungsi tidak menerima pemanggilan apa pun selama periode tertentu. Selama fase penghancuran, Function Compute pertama-tama menjalankan kait PreStop. Anda dapat melakukan tugas pembersihan dalam kait ini.
Penghancuran instans biasanya terjadi dalam tiga skenario berikut.
-
Instans idle: Jika instans tetap idle selama periode tertentu, Function Compute secara otomatis mereklamasinya.
-
Penyesuaian jumlah minimum instans: Saat Anda melakukan scale-in jumlah minimum instans, Function Compute segera menghancurkan instans berlebih.
-
Exception instans: Jika instans mengalami error selama fase pembuatan atau pemanggilan, Function Compute menghancurkannya.
Mekanisme pembekuan instans
Saat tidak ada permintaan pemanggilan, Function Compute membekukan instans tersebut. Saat permintaan baru tiba, Function Compute mengaktifkan kembali instans tersebut. Proses ini ditunjukkan pada gambar berikut.
Pembekuan instans terutama terjadi dalam dua situasi berikut:
-
Setelah fase inisialisasi instans selesai tetapi sebelum pemanggilan pertama.
-
Setelah pemanggilan selesai tetapi sebelum pemanggilan berikutnya dimulai.
Setelah pemanggilan selesai, Function Compute membekukan instans fungsi. Proses latar belakang, thread, atau korutin dalam kode Anda dijeda dan tidak dapat dilanjutkan. Hal ini dapat mencegah log asinkron ditulis dengan sukses.
Batasan
-
Untuk fungsi yang dipercepat GPU, kait Initializer mendukung dua jenis: Code Invocation dan Command Execution. Anda hanya dapat mengaktifkan salah satu jenis ini dalam satu waktu.
-
Untuk fungsi yang dipicu event, web, dan task, kait Initializer hanya mendukung jenis Code Invocation.
-
Kait PreStop hanya mendukung jenis Code Invocation, dan semua runtime mendukung kait PreStop.
-
Parameter input untuk metode kait PreStop tidak mencakup parameter event.
-
Kait PreStop tidak mengembalikan nilai, dan logika return apa pun dalam fungsi Anda akan diabaikan.
-
Jika Anda menggunakan runtime Java, Anda harus memperbarui fc-java-core ke versi 1.4.0 atau yang lebih baru. Jika tidak, Anda tidak dapat menggunakan kait PreStop.
-
Jangan mengasumsikan bahwa operasi asinkron, seperti thread latar belakang atau flushing log, akan selesai sebelum instans dibekukan.
-
Metode konfigurasi kait Code Invocation bervariasi tergantung runtime. Untuk runtime bawaan, Anda harus menentukan entry point kustom saat mengonfigurasi kait siklus hidup. Misalnya, jika Anda mengatur handler kait Initializer ke
index.initialize, Anda harus menambahkan fungsi kaitinitializeke kode Anda. Sebaliknya, untuk runtime kustom dan custom container runtime, setelah Anda mengonfigurasi kait Initializer dan PreStop, sistem mengirim permintaan HTTP (POST /initialize atau GET /pre-stop) ke fungsi Anda saat instans dimulai atau dihentikan. Kode aplikasi Anda harus menangani permintaan ini.
Billing
Pemanggilan instance lifecycle hook tidak dikenai biaya permintaan. Biaya lainnya dihitung menggunakan logika yang sama seperti fase pemanggilan instans. Durasi yang dikenai biaya diilustrasikan pada gambar berikut. Untuk informasi lebih lanjut tentang penagihan, lihat Billing overview.
Prasyarat
Fungsi telah dibuat. Untuk informasi lebih lanjut, lihat Create a function.
Konfigurasikan instance lifecycle hook
Konsol
Masuk ke Function Compute console. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
-
Di halaman detail fungsi, klik tab Configuration, lalu klik Instance Configuration di bagian Modify.
-
Di panel Instance Configuration, konfigurasikan kait Initializer dan periode timeout-nya.
Topik ini menggunakan fungsi yang dipercepat GPU sebagai contoh untuk menjelaskan cara mengonfigurasi kait Initializer. Untuk fungsi yang dipicu event, web, dan task, kait Initializer hanya mendukung jenis Code Invocation. Anda dapat mengikuti langkah-langkah untuk jenis Code Invocation yang dijelaskan dalam topik ini.
-
Pilih jenis Code Invocation
Nyalakan sakelar Initializer hook dan atur Initializer hook timeout menjadi
300detik. Setelah Anda mengaktifkan fitur ini, Function Compute mengirim permintaan HTTP POST /initialize ke fungsi saat instans dimulai. Respons 200 menunjukkan keberhasilan, sedangkan respons 4xx atau 5xx menyebabkan error atau restart instans. -
Pilih jenis Command Execution
Nyalakan sakelar Initializer hook, atur Initializer hook timeout menjadi
300detik, dan atur Command menjadi>/bin/sh. Di editor kode, tulis skrip shell untuk mengirim permintaan pemeriksaan kesehatan POST ke API Stable Diffusion lokal. Atur URL kehttp://localhost:7860dan REQUEST_PATH kesdapi/v1/txt2img. Buat muatan JSON yang mencakup bidangprompt,steps,height, danwidth, lalu gunakan curl untuk mengirim permintaan tersebut.
-
-
Di panel Instance Configuration, konfigurasikan kait PreStop dan periode timeout-nya, lalu klik Deploy.
-
Jika Anda mengonfigurasi kait jenis Code Invocation, Anda harus mengimplementasikan fungsi yang sesuai dalam kode Anda.
-
Klik tab Code. Di editor kode, tambahkan logika untuk fungsi kait.
Misalnya, jika Anda mengonfigurasi handler kait PreStop sebagai
index.preStop, Anda harus mengimplementasikan fungsi preStop dalam kode Anda. Untuk informasi tentang cara mengimplementasikan instance lifecycle hook untuk berbagai runtime, lihat Lifecycle hooks for function instances.CatatanIDE online mendukung PHP, Python, Node.js, dan runtime kustom, tetapi tidak mendukung bahasa terkompilasi seperti Java, Go, dan .NET, atau custom container runtime.
-
Di atas editor kode, klik Deploy, lalu klik Test Function.
-
Serverless Devs
Saat menggunakan Serverless Devs untuk mengonfigurasi kait Initializer, potongan kode dalam file s.yaml Anda mirip dengan contoh berikut:
codeUri: './code.zip'
......
instanceLifecycleConfig:
initializer:
timeout: 60
command:
- /bin/sh
- -c
- echo "hello"
Jika Anda perlu menonaktifkan kait, Anda harus secara eksplisit mengatur parameter handler dan command-nya menjadi string kosong. Hal ini diperlukan karena backend tidak akan menerapkan pembaruan tersebut jika tidak. Misalnya, untuk menonaktifkan kait Initializer, deploy konfigurasi berikut. Parameter timeout dan command untuk kait Initializer kemudian akan diabaikan.
codeUri: './code.zip'
......
instanceLifecycleConfig:
initializer:
handler: ""
timeout: 60
command: ""
Untuk informasi tentang cara mengimplementasikan instance lifecycle hook untuk berbagai runtime, lihat Lifecycle hooks for function instances.
SDK
Anda dapat menggunakan SDK untuk deploy dan memperbarui kait. Bagian ini menjelaskan cara mendapatkan contoh kode SDK untuk mengonfigurasi kait saat Anda membuat fungsi.
-
Buka topik referensi API CreateFunction dan klik Debug untuk membuka OpenAPI Portal.
-
Di tab Parameters, tentukan input parameters berdasarkan fungsi yang ingin Anda buat.
CatatanParameter command tidak didukung untuk kait PreStop.
Bentangkan instanceLifecycleConfig. Di bagian initializer, atur timeout menjadi
300. Di daftar command, tambahkan item di indeks 0 dengan nilaicurl -X POST 'http://localhost:9000/preWarm'. Di bagian preStop, atur handler menjadiindex.preStopdan timeout menjadi3. -
Setelah Anda mengonfigurasi parameter, klik tab SDK Example untuk mendapatkan contoh kode dalam bahasa pilihan Anda.
Untuk informasi tentang cara mengimplementasikan instance lifecycle hook untuk berbagai runtime, lihat Lifecycle hooks for function instances.
Lifecycle hooks for function instances
Semua runtime di Function Compute mendukung kait Initializer dan PreStop. Rujuk dokumentasi berikut untuk mempelajari cara mengimplementasikan instance lifecycle hook di berbagai runtime.
|
Runtime |
Description |
References |
|
Node.js |
Implement lifecycle hooks for function instances in Node.js. |
|
|
Python |
Implement lifecycle hooks for function instances in Python. |
|
|
PHP |
Implement lifecycle hooks for function instances in PHP. |
|
|
Java |
Implement lifecycle hooks for function instances in Java. |
|
|
C# |
Implement lifecycle hooks for function instances in C#. |
|
|
Go |
Implement lifecycle hooks for function instances in Go. |
|
|
custom runtime |
Implement lifecycle hooks for function instances in a custom runtime. |
|
|
custom container runtime |
Implement lifecycle hooks for function instances in a custom container runtime. |
Kueri log terkait kait
Setelah Anda mengonfigurasi instance lifecycle hook dan mengimplementasikan fungsi yang sesuai, Anda dapat mengkueri log terkait.
Log yang dihasilkan oleh kait jenis Command Execution saat ini tidak dapat ditulis ke log fungsi.
Masuk ke Function Compute console. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
-
Di halaman detail fungsi, klik tab Logs. Di tab Invocation Requests, temukan permintaan target dan klik Advanced Logs di kolom Actions.
Anda dapat menggunakan ID instans untuk mengkueri log awal dan akhir untuk semua lifecycle hook. Anda juga dapat menggunakan kueri seperti
instance ID AND "hook keyword"untuk menemukan log untuk kait tertentu, misalnya,c-62833f38-20f1629801fa4bd***** and PreStop.Anda juga dapat menggunakan RequestId dari log awal dan akhir untuk mengkueri log yang terkait dengan permintaan tertentu. Jika log tidak berisi RequestId, klik ikon
di entri log tersebut untuk melihat log konteksnya.