Function Compute menyediakan panggilan balik berdasarkan siklus hidup instansi. Panggilan balik ini membantu mengatasi tantangan seperti penundaan atau kehilangan data metrik saat memigrasikan aplikasi tradisional ke arsitektur serverless. Topik ini menjelaskan ekstensi waktu proses Function Compute, cara mengonfigurasi panggilan balik PreFreeze dan PreStop, serta cara menanyakan log dari panggilan balik tersebut.
Informasi latar belakang
Tantangan dalam memigrasikan aplikasi tradisional ke arsitektur serverless
Interval penagihan untuk mesin virtual jangka panjang atau layanan kontainer terkelola dimulai ketika instansi dijalankan dan berakhir ketika instansi dihentikan. Anda tetap dikenakan biaya meskipun tidak ada permintaan yang dieksekusi selama interval penagihan. Granularitas penagihan Function Compute adalah satu milidetik. Instansi hanya dikenakan biaya selama eksekusi permintaan. Instansi dibekukan pada periode tanpa permintaan, sehingga biaya tidak perlu akibat instansi idle dapat dihindari. Namun, mekanisme pembekuan menghancurkan asumsi tentang proses jangka panjang dalam arsitektur tradisional dan membuat migrasi aplikasi menjadi sulit. Function Compute berjalan dalam lingkungan khusus, sehingga sistem tidak dapat melacak dan melaporkan data seperti yang diharapkan dalam skenario tanpa cold start, seperti penggunaan pustaka Managed Service for OpenTelemetry terdistribusi atau solusi manajemen kinerja aplikasi (APM) pihak ketiga.
Berikut adalah tantangan utama yang menghambat migrasi aplikasi tradisional ke arsitektur serverless:
Data metrik latar belakang asinkron tertunda atau hilang. Jika data gagal dikirim selama eksekusi permintaan, data mungkin tertunda hingga waktu pengiriman permintaan berikutnya, atau titik data tersebut dibuang.
Latensi meningkat jika data metrik dikirim secara sinkron. Jika metode seperti Flush dipanggil setelah setiap permintaan selesai, latensi permintaan bertambah dan beban kerja berlebih dihasilkan pada server backend.
Untuk mendukung penghentian instansi fungsi yang mulus, aplikasi perlu menutup koneksi, menghentikan proses, dan melaporkan status ketika instansi dihentikan. Pengembang tidak mengetahui kapan instansi dilepaskan di Function Compute. Selain itu, tidak ada webhook yang disediakan untuk mengirim notifikasi tentang peristiwa rilis instansi fungsi.
Ekstensi model pemrograman
Function Compute menyediakan ekstensi waktu proses untuk mengatasi tantangan-tantangan di atas. Ekstensi ini memperluas model pemrograman HTTP server yang ada dengan menambahkan panggilan balik PreFreeze dan PreStop ke model server HTTP. Dengan cara ini, pengembang ekstensi dapat menggunakan handler HTTP untuk memantau peristiwa siklus hidup instansi fungsi.
PreFreeze
Setiap kali Function Compute memutuskan untuk membekukan instansi fungsi saat ini, Function Compute mengirimkan permintaan HTTP GET ke jalur /pre-freeze. Pengembang ekstensi mengimplementasikan logika untuk memastikan operasi tertentu dilakukan sebelum instansi dibekukan, seperti menunggu hingga metrik dikirim. Durasi eksekusi panggilan balik PreFreeze tidak termasuk dalam durasi pemanggilan operasi InvokeFunction.
PreStop
Setiap kali Function Compute memutuskan untuk menghentikan instansi fungsi saat ini, Function Compute mengirimkan permintaan HTTP GET ke jalur /pre-stop. Pengembang ekstensi mengimplementasikan logika untuk memastikan operasi tertentu, seperti menutup koneksi database atau melaporkan/memperbarui status, diselesaikan sebelum instansi dilepaskan.
Prasyarat
Fungsi telah dibuat. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Batasan
Parameter input panggilan balik PreFreeze dan PreStop tidak mencakup parameter event.
Panggilan balik PreFreeze dan PreStop tidak mengembalikan nilai. Logika yang ditambahkan ke panggilan balik PreFreeze atau PreStop untuk mengembalikan nilai tidak berpengaruh.
Anda dapat mengonfigurasi panggilan balik PreStop di semua runtime. Namun, Anda tidak dapat mengonfigurasi panggilan balik PreFreeze di runtime Python, PHP, atau C#.
Jika Anda menggunakan runtime Java, Anda harus memperbarui fc-java-core ke versi 1.4.0 atau lebih baru. Jika tidak, Anda tidak dapat menggunakan panggilan balik PreFreeze atau PreStop. Untuk informasi lebih lanjut, lihat Handler HTTP.
Ketika fungsi mengembalikan respons, Function Compute membekukan instansi fungsi. Anda tidak dapat berasumsi bahwa semua proses asinkron, thread, dan coroutine dieksekusi ketika pemanggilan kembali. Anda juga tidak dapat berasumsi bahwa log yang ditulis secara asinkron diperbarui.
Konfigurasikan panggilan balik PreFreeze dan PreStop
Penagihan untuk panggilan PreFreeze atau PreStop sama dengan panggilan InvokeFunction. Untuk informasi lebih lanjut, lihat Ikhtisar Penagihan.
Konfigurasikan panggilan balik di Konsol Function Compute
Ketika menggunakan konsol Function Compute untuk membuat fungsi, Anda tidak dapat mengonfigurasi panggilan balik PreFreeze dan PreStop. Anda dapat mengonfigurasi panggilan balik PreFreeze dan PreStop ketika memperbarui fungsi.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
- Pada halaman Functions, temukan fungsi yang ingin Anda ubah dan klik Configure di kolom Actions.
Di bagian Instance Lifecycle Hook halaman Modifikasi Pengaturan Fungsi, konfigurasikan panggilan balik dan periode timeout, lalu klik Save.
CatatanAnda harus mengonfigurasi panggilan balik dan periode timeout untuk setiap fungsi ekstensi. Format panggilan balik adalah [Nama file].[Nama fungsi ekstensi]. Sebagai contoh, jika Anda mengatur panggilan balik PreStop ke index.preStopHandler ketika membuat fungsi dalam runtime Python, nama file adalah index.py dan nama fungsi PreStop adalah preStopHandler.
Setelah Anda mengonfigurasi fungsi ekstensi, implementasikan fungsi tersebut dalam kode yang ingin Anda eksekusi.
Klik tab Code. Di editor kode, masukkan kode fungsi ekstensi.
Sebagai contoh, jika Anda mengatur panggilan balik PreStop ke
index.preStopHandler, Anda harus mengimplementasikan fungsi preStopHandler. Untuk informasi lebih lanjut tentang cara mengimplementasikan panggilan balik siklus hidup dalam runtime berbeda dari Function Compute, lihat Panggilan Balik Siklus Hidup Instansi Fungsi.CatatanIDE online didukung oleh PHP, Python, Node.js, dan runtime kustom tetapi tidak didukung oleh runtime bahasa terkompilasi seperti Java, Go, .NET, atau runtime kontainer kustom.
Klik Deploy di bagian atas editor kode, lalu klik Test Function.
Konfigurasikan panggilan balik menggunakan Serverless Devs
Kode sampel berikut dari s.yaml dapat digunakan untuk mengonfigurasi PreFreeze dan PreStop menggunakan Serverless Devs:
codeUri: './code.zip'
......
instanceLifecycleConfig:
preFreeze:
handler: index.PreFreeze
timeout: 60
preStop:
handler: index.PreStop
timeout: 60Untuk menonaktifkan fungsi ekstensi, kosongkan parameter Handler dari fungsi ekstensi. Jika tidak, fungsi tidak diperbarui secara default. Sebagai contoh, untuk menonaktifkan panggilan balik PreFreeze, Anda dapat menerapkan dan memperbarui fungsi berdasarkan konfigurasi berikut. Dalam hal ini, parameter Timeout dari panggilan balik PreFreeze tidak valid.
codeUri: './code.zip'
......
instanceLifecycleConfig:
preFreeze:
handler: ""
timeout: 60
preStop:
handler: index.PreStop
timeout: 60Untuk informasi lebih lanjut tentang cara mengimplementasikan panggilan balik siklus hidup dalam runtime berbeda dari Function Compute, lihat Panggilan Balik Siklus Hidup Instansi Fungsi.
Konfigurasikan panggilan balik menggunakan SDK
Anda dapat menggunakan SDK untuk menerapkan dan memperbarui ekstensi. Bagian ini menjelaskan cara mendapatkan kode sampel SDK untuk mengonfigurasi panggilan balik PreStop dan PreFreeze ketika Anda membuat fungsi.
Di halaman CreateFunction, klik Debug untuk pergi ke portal OpenAPI.
Di tab Parameters, konfigurasikan Request Parameters berdasarkan informasi dasar fungsi.
Anda dapat mengonfigurasi panggilan balik PreStop dan PreFreeze dalam
instanceLifecycleConfig.
Setelah Anda mengonfigurasi parameter, klik tab SDK Sample Code untuk mendapatkan kode sampel SDK dalam bahasa pemrograman yang sesuai.
Untuk informasi lebih lanjut tentang cara mengimplementasikan panggilan balik siklus hidup dalam runtime berbeda dari Function Compute, lihat Panggilan Balik Siklus Hidup Instansi Fungsi.
Panggilan balik siklus hidup instansi fungsi
Tabel berikut menjelaskan cara mengimplementasikan panggilan balik siklus hidup dalam runtime berbeda dari Function Compute.
Informasi Lingkungan | Cara Mengimplementasikan Panggilan Balik Siklus Hidup | Referensi |
Node.js | Gunakan Node.js untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
Python | Gunakan Python untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
PHP | Gunakan PHP untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
Java | Gunakan Java untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
C# | Gunakan C# untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
Go | Gunakan Go untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
Runtime Kustom | Gunakan runtime kustom untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. | |
Kontainer Kustom | Gunakan runtime Kontainer Kustom dengan mode web server yang diaktifkan untuk mengimplementasikan panggilan balik siklus hidup instansi fungsi. |
Menanyakan log terkait panggilan balik
Setelah Anda mengonfigurasi panggilan balik siklus hidup instansi dan mengeksekusi kode panggilan balik, Anda dapat menanyakan log dari panggilan balik tersebut.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik fungsi yang ingin Anda kelola dan klik tab Logs.
Pada tab Request List, temukan permintaan yang ingin Anda tanyakan, salin Instance ID, lalu klik SLS Logs.
Anda dapat menggunakan ID instansi yang disalin untuk menanyakan log awal dan akhir dari semua panggilan balik siklus hidup. Anda juga dapat menggunakan ID instansi bersama dengan kata kunci panggilan balik untuk menanyakan log awal dan akhir dari panggilan balik tertentu, seperti
c-62833f38-20f1629801fa4bd***** and PreStop.
Anda juga dapat menanyakan log permintaan berdasarkan ID permintaan dalam log Awal dan Akhir. Jika log pengguna tidak berisi ID permintaan, Anda dapat mengklik ikon
untuk mendapatkan log konteks.
Aturan penagihan
Anda tidak dikenakan biaya untuk jumlah permintaan yang dikirim ke panggilan balik HTTP. Ekstensi ini juga berlaku untuk skenario di mana beberapa permintaan konkuren dieksekusi pada satu instansi. Jika beberapa permintaan pemanggilan dieksekusi secara bersamaan pada instansi yang sama, setelah semua permintaan selesai dieksekusi, panggilan balik PreFreeze dipanggil sebelum instansi dibekukan.
Dalam contoh yang ditunjukkan pada gambar berikut, spesifikasi fungsi adalah 1 GB. Anggaplah bahwa periode dari t1 ketika PreFreeze dimulai hingga t6 ketika Request 2 selesai adalah 1 detik. Waktu eksekusi instansi dihitung berdasarkan rumus berikut: t6 - t1. Sumber daya yang dikonsumsi dihitung berdasarkan rumus berikut: 1 detik × 1 GB = 1 CU. Untuk informasi lebih lanjut tentang penagihan, lihat Ikhtisar Penagihan.