Function Compute secara berkala mengirim permintaan HTTP GET ke instans fungsi Anda untuk mendeteksi instans yang tidak sehat sebelum menyebabkan kegagalan pemanggilan. Jika suatu instans gagal dalam pemeriksaan kesehatan, Function Compute secara otomatis mengarahkan permintaan ke instans yang sehat.
Pemeriksaan kesehatan hanya berlaku untuk instans web function yang berjalan di runtime kustom atau runtime Custom Container. Jika pemeriksaan kesehatan tidak diaktifkan, Function Compute tidak melakukan deteksi instans secara berkala.
Cara kerja pemeriksaan kesehatan
Startup
Saat instans fungsi dimulai:
Jika fungsi menentukan hook Initializer, Function Compute menjalankannya terlebih dahulu. Jika tidak, pemeriksaan kesehatan pertama dijalankan segera.
Jika instans lulus pemeriksaan kesehatan pertama, instans tersebut memasuki siklus pemeriksaan kesehatan berkala.
Jika instans gagal dalam pemeriksaan kesehatan pertama, Function Compute melaporkan kegagalan startup dan menghentikan proses pemeriksaan kesehatan.
Pemeriksaan kesehatan berkala
Setelah startup, Function Compute mengirim permintaan HTTP GET ke path yang Anda konfigurasikan sesuai interval yang ditentukan. Setiap permintaan harus mengembalikan kode status HTTP dalam rentang [200, 400) sebelum timeout berakhir agar dianggap berhasil.
Jika jumlah kegagalan berturut-turut mencapai Maximum Failures, instans tersebut ditandai sebagai tidak sehat dan Function Compute mengarahkan permintaan ke instans lain.
Begitu instans yang tidak sehat mengumpulkan jumlah keberhasilan berturut-turut sebanyak Threshold for Successful Detections, instans tersebut dianggap sehat kembali.
Alokasi instans setelah kegagalan
Ketika instans fungsi ditandai sebagai tidak sehat:
Jika Function Compute berhasil mengalokasikan instans lain, permintaan akan ditangani oleh instans baru tersebut.
Jika alokasi tidak selesai tepat waktu, kesalahan pemeriksaan kesehatan dikembalikan. Instans baru dialokasikan pada siklus pemeriksaan kesehatan berikutnya.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat web function di Function Compute menggunakan runtime kustom atau runtime Custom Container
Server HTTP fungsi mendengarkan permintaan GET di path pemeriksaan kesehatan yang akan Anda konfigurasikan
Konfigurasikan kebijakan pemeriksaan kesehatan
Langkah-langkah berikut menggunakan contoh web function Node.js 18.
Langkah 1: Buat web function dengan endpoint pemeriksaan kesehatan
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik Create Function.
Pada halaman Create Function, pilih Web Function, konfigurasikan parameter sesuai tabel berikut, lalu klik Create.
Parameter Deskripsi Function Name Masukkan nama untuk fungsi. Runtime Pilih Node.js 18. Pada halaman detail fungsi, klik tab Code. Ganti kode default dengan kode berikut, lalu klik Deploy Code dan Test Function.
'use strict'; const PORT = 9000; const HOST = '0.0.0.0'; const REQUEST_ID_HEADER = 'x-fc-request-id'; const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(bodyParser.raw()); // Endpoint pemeriksaan kesehatan — Function Compute mengirim GET /readyz pada interval yang dikonfigurasi. // Tambahkan pemeriksaan di sini untuk dependensi Anda (konektivitas database, file yang diperlukan, dll.) // agar secara akurat mencerminkan apakah instans ini dapat melayani traffic. app.get('/readyz', (req, res) => { console.log(`receive health check`); res.status(200); console.log(`i am ready`); res.send('i am ready\n'); }); // Endpoint pemanggilan fungsi app.post('/invoke', (req, res) => { var rid = req.headers[REQUEST_ID_HEADER]; console.log(`FC Invoke Start RequestId: ${rid}`); res.send('OK'); console.log(`FC Invoke End RequestId: ${rid}`); }); var server = app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`); server.timeout = 0; // never timeout server.keepAliveTimeout = 0; // keepalive, never timeoutJika fungsi berjalan berhasil,
OKdikembalikan.
Langkah 2: Aktifkan pemeriksaan kesehatan
Pada halaman detail fungsi, klik tab Configurations.
Di panel navigasi kiri, klik Health Check, lalu klik Modify.
Atur Health Check ke Enable, konfigurasikan parameter sesuai tabel berikut, lalu klik OK.
Parameter Deskripsi Request Path Path HTTP GET untuk pemeriksaan kesehatan. Harus diawali dengan /. Untuk contoh ini, atur nilai ini menjadi/readyz.Delay for First Detection Lama waktu tunggu setelah startup instans sebelum pemeriksaan kesehatan pertama dijalankan. Atur nilai ini cukup tinggi agar fungsi Anda sempat melakukan inisialisasi penuh. Detection Interval Frekuensi Function Compute mengirim permintaan pemeriksaan kesehatan. Timeout Period Lama waktu Function Compute menunggu respons sebelum menganggap permintaan gagal. Maximum Failures Jumlah kegagalan pemeriksaan kesehatan berturut-turut yang menyebabkan instans ditandai sebagai tidak sehat. Threshold for Successful Detections Jumlah keberhasilan pemeriksaan kesehatan berturut-turut yang diperlukan untuk mengembalikan status instans tidak sehat menjadi sehat.
Langkah 3: Verifikasi pemeriksaan kesehatan
Pada halaman detail fungsi, klik tab Code, lalu klik Test Function. Jika fungsi dalam kondisi sehat,
OKdikembalikan.Untuk menguji kondisi tidak sehat, ganti penanganan
/readyzdengan kode berikut, klik Deploy Code, lalu klik Test Function.app.get('/readyz', (req, res) => { console.log(`receive health check`); res.status(500); console.log(`i am not ready`); res.send('i am not ready\n'); });Pemeriksaan kesehatan mengembalikan kode status 500. Setelah jumlah kegagalan berturut-turut mencapai Maximum Failures, Function Compute menandai instans sebagai tidak sehat dan mengembalikan kesalahan berikut:
{ "RequestId": "1-65081d42-e4895cbc7d6252bda643****", "Code": "FunctionNotStarted", "Message": "The function http server cannot be started. check function health failed with status code: 500 " }
Langkah selanjutnya
Untuk mengonfigurasi pemeriksaan kesehatan secara terprogram, gunakan operasi API UpdateFunction.