Mengonfigurasi instance maksimum

Anda dapat mengontrol perilaku penskalaan fungsi dengan menetapkan jumlah maksimum instance Cloud Functions. Menetapkan instance maksimum akan mengontrol biaya dan mencegah resource downstream kewalahan dengan traffic.

Cloud Functions melakukan penskalaan dengan membuat instance baru dari fungsi Anda. Setiap instance ini hanya dapat menangani satu permintaan dalam satu waktu, sehingga lonjakan besar dalam volume permintaan dapat menyebabkan pembuatan banyak instance.

Penskalaan otomatis umumnya bermanfaat, tetapi dalam beberapa kasus Anda mungkin ingin membatasi jumlah total instance yang boleh ada pada waktu tertentu. Misalnya, fungsi Anda mungkin berinteraksi dengan database yang hanya dapat menangani koneksi terbuka dalam jumlah tertentu.

Cloud Functions (generasi ke-2) menawarkan konkurensi sebagai mekanisme penskalaan tambahan. Fungsi yang dikonfigurasi untuk serentak dapat menjalankan beberapa permintaan secara bersamaan pada satu instance. Anda dapat mengonfigurasi fungsi untuk menggunakan konkurensi dan beberapa instance untuk mengoptimalkan performanya. Untuk mempelajari cara mengonfigurasi serentak, lihat Cloud Functions Concurrency.

Menetapkan dan menghapus batas instance maksimum

Anda dapat menetapkan jumlah maksimum instance untuk fungsi selama deployment. Setiap fungsi memiliki setelan instance maksimumnya sendiri. Fungsi menskalakan secara independen satu sama lain.

Menetapkan batas instance maksimum

Anda dapat menetapkan batas instance maksimum menggunakan Google Cloud CLI atau Konsol Google Cloud. Jika Anda tidak menentukan batas, Cloud Functions akan menetapkan batas default:

  • 3000 untuk fungsi Cloud Functions (generasi ke-1)
  • Versi 100 untuk fungsi Cloud Functions (generasi ke-2)

Untuk menetapkan batas instance maksimum:

Konsol

  1. Buka halaman Ringkasan Cloud Functions.

  2. Klik Create function.

  3. Lengkapi kolom wajib isi untuk fungsi Anda.

  4. Luaskan bagian Runtime, build... di akhir halaman, lalu klik tab Runtime.

  5. Di kolom Maximum number of instances di bagian Autoscaling, masukkan nilai atau gunakan nilai default.

gcloud

Untuk menetapkan batas instance maksimum, jalankan perintah deploy dengan flag --max-instances:

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

Ganti kode berikut:

  • FUNCTION_NAME: Nama fungsi.

  • MAX_INSTANCE_LIMIT: Jumlah yang akan ditetapkan sebagai batas instance maksimum - misalnya 3000.

Menghapus batas instance maksimum

Anda dapat menghapus batas instance maksimum untuk fungsi Cloud Functions (generasi ke-1) menggunakan alat command line gcloud atau Konsol Google Cloud. Fungsi Cloud Functions (generasi ke-2) memerlukan batas instance maksimum yang ditentukan.

Konsol

Untuk menghapus batas instance maksimum untuk fungsi Cloud Functions (generasi ke-1):

  1. Buka halaman Ringkasan Cloud Functions.

  2. Klik fungsi yang ada untuk membuka halaman detailnya. Anda dapat melihat batas instance maksimum fungsi saat ini di tab Details.

  3. Klik Edit.

  4. Luaskan bagian Runtime, build... di akhir halaman, lalu klik tab Runtime.

  5. Di kolom Maximum number of instances di bagian Autoscaling, masukkan 0.

gcloud

Untuk menghapus batas instance maksimum untuk fungsi Cloud Functions (generasi ke-1), jalankan perintah deploy dengan flag --clear-max-instances:

gcloud functions deploy FUNCTION_NAME --clear-max-instances

Batasan & praktik terbaik

Bagian ini berisi panduan penggunaan instance maksimum.

Pilih nilai instance maksimum

Nilai optimal untuk setelan instance maksimum bergantung pada karakteristik fungsi Anda, termasuk berapa lama waktu yang diperlukan untuk mengeksekusi pemanggilan, rata-rata yang diharapkan dan frekuensi pemanggilan puncaknya, serta toleransi aplikasi Anda terhadap kegagalan pemanggilan. Salah satu aturan praktisnya adalah memulai dengan nilai instance maksimum 3, lalu memantau kegagalan pemanggilan dan menyesuaikan nilai instance maksimum jika diperlukan.

Melindungi dari peningkatan skala yang berlebihan

Jika tidak ada batas instance maksimum yang ditentukan, Cloud Functions (generasi ke-1) akan mendukung peningkatan skala untuk memenuhi permintaan sehingga melebihi batas throughput. Artinya, jumlah instance simultan yang mungkin dimiliki fungsi generasi ke-1 secara efektif tidak terbatas kecuali jika Anda telah mengonfigurasi batas tersebut. Cloud Functions (generasi ke-2) tidak mendukung fungsi tanpa batas instance maksimum

Sebaiknya tetapkan batas --max-instances untuk setiap fungsi yang mengirim permintaan ke layanan downstream dengan throughput yang dibatasi atau tidak skalabel. Batas instance maksimum meningkatkan stabilitas sistem secara keseluruhan dan membantu mencegah tingkat permintaan tinggi yang tidak normal.

Meminta penanganan saat semua instance sedang sibuk

Dalam keadaan normal, fungsi Anda akan ditingkatkan skalanya dengan membuat instance baru untuk menangani beban traffic yang masuk. Namun, jika Anda telah menetapkan batas instance maksimum, Anda mungkin akan menghadapi skenario ketika tidak ada instance yang cukup untuk memenuhi beban traffic yang masuk.

Dalam skenario tersebut, Cloud Functions akan mencoba menyajikan permintaan masuk baru hingga 30 detik:

  • Jika instance selesai memproses permintaannya selama jangka waktu ini, instance tersebut mungkin akan mulai memproses permintaan masuk baru.
  • Jika tidak ada instance yang tersedia, permintaan akan gagal.

Permintaan yang dikirim ke fungsi HTTP yang kelebihan beban gagal dengan kode respons

  • 429 Too Many Requests jika nilai instance maksimum dikonfigurasi, atau
  • 500 Internal Server Error jika tidak ada nilai instance maksimum yang dikonfigurasi (khusus fungsi generasi ke-1)

Peristiwa yang ditujukan untuk fungsi yang dipicu oleh peristiwa akan otomatis disimpan hingga kapasitas tersedia.

Batas instance maksimum yang melebihi kemampuan penskalaan Cloud Functions

Saat menentukan batas instance maksimum, Anda juga menentukan batas atas. Menetapkan batas besar tidak berarti bahwa fungsi Anda akan meningkatkan skala hingga jumlah instance yang ditentukan. Ini hanya berarti bahwa jumlah instance yang berdampingan pada waktu tertentu tidak boleh melebihi batas.

Selain itu, menetapkan batas instance maksimum dapat memengaruhi strategi penskalaan yang digunakan Cloud Functions untuk memenuhi permintaan traffic Anda. Secara umum, Cloud Functions akan memprioritaskan untuk memenuhi batas yang Anda tentukan, bukan meningkatkan skala dan berpotensi melampaui batas.

Menangani lonjakan traffic

Dalam beberapa kasus, seperti lonjakan traffic yang cepat, Cloud Functions mungkin, dalam jangka waktu yang singkat, membuat lebih banyak instance daripada batas instance maksimum yang ditentukan. Jika fungsi Anda tidak dapat menoleransi perilaku sementara ini, Anda mungkin perlu memperhitungkan margin keamanan dan menetapkan nilai instance maksimum yang lebih rendah daripada yang dapat ditoleransi oleh fungsi Anda.

Deployment

Saat Anda men-deploy fungsi versi baru, Cloud Functions akan memigrasikan traffic dari versi sebelumnya ke versi baru. Karena batas instance maksimum ditetapkan untuk setiap versi fungsi secara independen, Anda mungkin melampaui batas yang ditentukan untuk sementara selama periode setelah deployment.

Misalnya, sebuah fungsi mungkin memiliki batas instance maksimum sebanyak 5. Dalam keadaan normal, fungsi meningkatkan skala hingga 5 instance saat menangani permintaan. Saat versi baru fungsi di-deploy, versi baru memiliki batas instance maksimumnya sendiri, yaitu 5.

Permintaan yang sudah ditangani oleh fungsi versi sebelumnya tidak akan terganggu saat versi baru fungsi di-deploy. Sebaliknya, permintaan ini akan terus diproses. Permintaan masuk baru akan ditangani oleh versi fungsi yang baru di-deploy.

Dengan demikian, fungsi dalam contoh sebelumnya mungkin memiliki hingga 10 instance total (5 untuk setiap versi fungsi Anda) selama periode setelah men-deploy versi baru. Jumlah waktu yang diperlukan untuk menghentikan instance fungsi sebelumnya bergantung pada waktu yang diperlukan bagi instance tersebut untuk menyelesaikan penanganan permintaan aktif apa pun. Ini adalah faktor tambahan yang perlu dipertimbangkan saat memilih batas instance maksimum yang sesuai.

Menghapus batas instance maksimum

Menetapkan instance maksimum untuk fungsi Cloud Functions (generasi ke-1) ke 0 akan menghapus batas instance maksimum yang ada pada fungsi, tetapi tidak menjeda fungsi.