All Products
Search
Document Center

Function Compute:Siklus hidup instans fungsi

Last Updated:Apr 01, 2026

Function Compute membekukan instans di antara permintaan alih-alih menghentikannya, yang meningkatkan performa cold-start tetapi melanggar asumsi umum pada aplikasi jangka panjang. Kait PreFreeze dan PreStop menyediakan jendela bagi kode Anda untuk bertindak sebelum setiap peristiwa pembekuan atau penghentian—memungkinkan Anda mengosongkan metrik, menutup koneksi database, dan melaporkan status tanpa menambah latensi penanganan permintaan.

Cara kerja

Function Compute menagih dengan granularitas satu milidetik dan hanya selama eksekusi permintaan. Saat tidak ada permintaan yang sedang berjalan, instans dibekukan alih-alih dihentikan. Pendekatan ini efisien, tetapi menciptakan tiga tantangan migrasi bagi aplikasi yang bergantung pada proses latar belakang jangka panjang:

TantanganDeskripsi
Metrik tertunda atau hilangPelapor metrik asinkron—seperti Managed Service for OpenTelemetry atau pustaka manajemen performa aplikasi (APM) pihak ketiga—mungkin tidak sempat mengosongkan data sebelum instans dibekukan. Permintaan berikutnya memicu pengosongan, menyebabkan penundaan, atau data dibuang sepenuhnya.
Latensi lebih tinggi akibat pengosongan sinkronMemanggil metode pengosongan setelah setiap permintaan menambah latensi dan meningkatkan beban pada server backend.
Tidak ada sinyal shutdown yang mulusTanpa notifikasi sebelum instans dihentikan, aplikasi tidak dapat menutup koneksi, menghentikan proses latar belakang, atau melaporkan status secara bersih.

Kait PreFreeze dan PreStop mengatasi tantangan-tantangan ini dengan memperluas model server HTTP. Function Compute mengirim permintaan HTTP GET ke path yang telah ditentukan pada momen siklus hidup yang tepat, memberikan kesempatan bagi kode Anda untuk bertindak.

image

PreFreeze

Sebelum membekukan instans, Function Compute mengirim permintaan HTTP GET ke /pre-freeze. Gunakan kait ini untuk mengosongkan metrik atau menyelesaikan pekerjaan yang harus rampung sebelum instans dijeda.

image

Perilaku utama:

  • Waktu yang dihabiskan dalam PreFreeze tidak dihitung dalam durasi penagihan InvokeFunction.

  • Ketika beberapa permintaan dijalankan secara konkuren pada satu instans, PreFreeze dipanggil setelah semua permintaan selesai, sebelum instans dibekukan.

  • Tidak didukung pada runtime Python, PHP, atau C#.

  • Runtime Java: memerlukan fc-java-core 1.4.0 atau yang lebih baru. Lihat HTTP handler.

image

PreStop

Sebelum menghentikan instans, Function Compute mengirim permintaan HTTP GET ke /pre-stop. Gunakan kait ini untuk menutup koneksi database, menghentikan proses latar belakang, serta melaporkan atau memperbarui status.

image

PreStop didukung di semua runtime.

Batasan

  • Baik PreFreeze maupun PreStop tidak menerima parameter event sebagai input.

  • Kedua kait tersebut tidak mengembalikan nilai. Logika pengembalian apa pun yang ditambahkan ke kait tidak memiliki efek.

  • Ketika fungsi mengembalikan respons, Function Compute segera membekukan instans. Proses asinkron, thread, dan korutin tidak dijamin selesai, dan log yang ditulis secara asinkron mungkin tidak sempat dikosongkan.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Konfigurasi kait siklus hidup

Catatan

Penagihan untuk panggilan PreFreeze dan PreStop mengikuti aturan yang sama seperti panggilan InvokeFunction. Lihat Penagihan.

Format kait adalah [nama file].[nama fungsi]. Contohnya, index.preStopHandler merujuk ke fungsi preStopHandler dalam file index.py.

Pilih metode konfigurasi:

Konfigurasi kait di Konsol Function Compute

Kait siklus hidup tidak dapat diatur saat membuat fungsi. Konfigurasikan saat memperbarui fungsi yang sudah ada.

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.

  3. Di halaman Functions, temukan fungsi tersebut dan klik Configure di kolom Actions.

  4. Di halaman Modify Function Settings, buka bagian Instance Lifecycle Hook. Konfigurasikan handler dan timeout untuk setiap kait, lalu klik Save.

    配置生命周期函数

  5. Klik tab Code. Di editor kode, implementasikan fungsi kait. Jika Anda mengatur kait PreStop ke index.preStopHandler, implementasikan fungsi preStopHandler dalam kode Anda. Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.

    Catatan

    IDE online mendukung PHP, Python, Node.js, dan runtime kustom. IDE ini tidak mendukung runtime bahasa terkompilasi seperti Java, Go, .NET, atau runtime kontainer kustom.

  6. Klik Deploy, lalu klik Test Function.

Konfigurasi kait menggunakan Serverless Devs

Tambahkan blok instanceLifecycleConfig ke file s.yaml Anda:

codeUri: './code.zip'
......
instanceLifecycleConfig:
  preFreeze:
    handler: index.PreFreeze
    timeout: 60
  preStop:
    handler: index.PreStop
    timeout: 60

Untuk menonaktifkan kait, atur handler-nya menjadi string kosong. Jika Anda tidak secara eksplisit mengatur handler menjadi string kosong, fungsi akan mempertahankan konfigurasi kait sebelumnya dan tidak diperbarui secara default. Saat handler kosong, nilai timeout diabaikan.

codeUri: './code.zip'
......
instanceLifecycleConfig:
  preFreeze:
    handler: ""
    timeout: 60
  preStop:
    handler: index.PreStop
    timeout: 60

Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.

Konfigurasi kait menggunakan SDK

Gunakan API CreateFunction untuk mengatur kait saat membuat fungsi.

  1. Buka halaman CreateFunction dan klik Debug untuk membuka portal OpenAPI.

  2. Di tab Parameters, isi informasi fungsi yang diperlukan. Atur handler PreFreeze dan PreStop di bawah instanceLifecycleConfig.

    image.png

  3. Klik tab SDK Sample Code untuk mendapatkan contoh kode dalam bahasa pilihan Anda.

Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.

Panduan implementasi runtime

RuntimePanduan implementasi
Node.jsKait siklus hidup untuk instans fungsi
PythonKait siklus hidup untuk instans fungsi
PHPKait siklus hidup untuk instans fungsi
JavaKait siklus hidup untuk instans fungsi
C#Kait siklus hidup untuk instans fungsi
GoKait siklus hidup untuk instans fungsi
Custom runtimeKait siklus hidup untuk instans fungsi
Custom containerKait siklus hidup untuk instans fungsi

Kueri log kait

Setelah mengonfigurasi dan menjalankan kait siklus hidup, kueri log-nya untuk memverifikasi eksekusi.

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.

  3. Di halaman Functions, klik fungsi tersebut dan buka tab Logs.

  4. Di tab Request List, temukan permintaan yang relevan. Salin Instance ID, lalu klik SLS Logs.

Gunakan Instance ID untuk mengkueri log awal dan akhir semua kait siklus hidup. Gabungkan Instance ID dengan nama kait untuk memfilter log kait tertentu—misalnya: c-62833f38-20f1629801fa4bd***** and PreStop.

db_lifecycle_log

Untuk melacak permintaan tertentu, gunakan request ID dari entri log Start atau End. Jika log pengguna tidak menyertakan request ID, klik ikon db_lifecycle_log_context untuk melihat konteks log di sekitarnya.

Penagihan

Item penagihanDitagih?
Waktu eksekusi kait (PreFreeze)Tidak—waktu yang dihabiskan dalam kait PreFreeze tidak dihitung dalam durasi penagihan InvokeFunction
Panggilan kait (PreFreeze dan PreStop)Ya—ditagih dengan tarif yang sama seperti panggilan InvokeFunction
Permintaan HTTP ke path kait (/pre-freeze, /pre-stop)Tidak—permintaan ke path kait tidak dihitung secara terpisah

Permintaan konkuren: Jika beberapa permintaan dijalankan secara bersamaan pada instans yang sama, PreFreeze dipanggil sekali setelah semua permintaan selesai. Penagihan mencakup jendela eksekusi penuh dari awal permintaan konkuren paling awal hingga akhir PreFreeze.

Contoh: Fungsi dikonfigurasi dengan memori 1 GB. Asumsikan PreFreeze dimulai pada t1 dan permintaan konkuren terakhir (Permintaan 2) selesai pada t6, dengan rentang total 1 detik. Waktu eksekusi = t6 - t1 = 1 dtk. Sumber daya yang dikonsumsi = 1 dtk × 1 GB = 1 CU.

image

Untuk rincian lengkap aturan penagihan, lihat Ikhtisar penagihan.