Tentang penskalaan otomatis instance di layanan Cloud Run

Halaman ini menjelaskan perilaku penskalaan otomatis default Cloud Run. Untuk opsi penskalaan alternatif tempat Anda dapat mengonfigurasi jumlah instance tertentu, lihat Penskalaan manual.

Secara default, setiap revisi Cloud Run secara otomatis diskalakan ke jumlah instance yang diperlukan untuk menanganipermintaan, peristiwa, atau pemanfaatan CPU yang masuk. Anda juga dapat menyempurnakan perilaku penskalaan ini dengan mengonfigurasi target CPU dan pemanfaatan kustom.

Jika tidak menerima revisi dari berbagai traffic secara default diturunkan ke instance nol. Anda dapat mengubah default ini untuk menentukan instance agar tetap nonaktif atau "warm" dengan menggunakan setelan instance minimum. Jika layanan Anda menggunakan CPU meskipun tidak memproses permintaan, Anda harus menetapkan instance minimum ke 1.

Autoscaler Cloud Run mengevaluasi metrik berikut secara berkala untuk menentukan jumlah instance yang diperlukan untuk melayani traffic:

  • Penggunaan CPU dan konkurensi: Cloud Run menyesuaikan jumlah instance untuk menjaga rata-rata CPU dan konkurensi dalam batas target.

  • Batas instance: Cloud Run membatasi jumlah instance antara batas maksimum dan minimum yang Anda konfigurasi.

Perilaku penskalaan otomatis layanan horizontal

Cloud Run memiliki dua mekanisme penskalaan otomatis, penskalaan berbasis metrik dan penskalaan on-demand untuk menentukan jumlah instance yang diperlukan untuk melayani traffic.

Penskalaan berbasis metrik

Penskalaan berbasis metrik secara otomatis menyesuaikan jumlah instance berdasarkan penggunaan CPU rata-rata dan driver penskalaan konkurensi permintaan rata-rata untuk memberikan kapasitas penayangan yang stabil untuk layanan Cloud Run Anda.

Autoscaler menentukan jumlah instance yang direkomendasikan berdasarkan jumlah instance maksimum yang dihitung untuk setiap driver penskalaan berikut secara independen:

  • Penggunaan CPU: menghitung jumlah instance dengan merata-ratakan penggunaan CPU per detik selama periode 1 menit dan membagi hasil ini dengan jumlah CPU per instance. Hasil ini dibagi lebih lanjut dengan target CPU. Persamaan berikut menentukan perhitungan ini:

\[ \text{Instances} = \dfrac{\left( \frac{\text{Average CPU usage per second over the past minute}}{\text{Number of CPUs per instance}} \right)}{\text{CPU target}} \]

  • Konkurensi permintaan: menghitung jumlah instance dengan merata-ratakan konkurensi permintaan per detik selama periode 1 menit dan 10 menit dan membagi hasil ini dengan konkurensi maksimum. Hasil ini dibagi lebih lanjut dengan target konkurensi permintaan. Persamaan berikut menentukan perhitungan ini:

\[ \text{Instances} = \dfrac{\left( \frac{\max(\text{average concurrent requests over 1 minute, 10 minutes})}{\text{Maximum concurrency}} \right)}{\text{Concurrency target}} \]

Untuk setiap revisi layanan, Anda dapat mengonfigurasi jumlah CPU per instance dan konkurensi maksimum.

Cloud Run tidak mendukung penskalaan berdasarkan penggunaan memori.

Secara default, penskalaan berbasis metrik menetapkan nilai minimum 60% untuk target penggunaan CPU dan konkurensi permintaan. Anda dapat memilih untuk menggunakan kontrol penskalaan (Pratinjau) guna menentukan target CPU atau konkurensi kustom.

Saat Cloud Run melakukan penskalaan berdasarkan penggunaan CPU, Cloud Run akan mempertimbangkan penggunaan CPU rata-rata di semua CPU yang dialokasikan ke instance. Jika aplikasi Anda memiliki satu thread, tetapi di-deploy pada instance multi-CPU, hal ini dapat menyebabkan pembacaan penggunaan rata-rata yang rendah, yang berpotensi memengaruhi cara pengambilan keputusan penskalaan berbasis CPU. Untuk mengetahui detail selengkapnya tentang cara mengoptimalkan konfigurasi CPU untuk arsitektur aplikasi Anda, lihat Mengonfigurasi batas CPU dan Menetapkan permintaan serentak maksimum per instance.

Peningkatan skala

Cloud Run meningkatkan jumlah instance berdasarkan driver penskalaan yang memerlukan lebih banyak instance.

Meskipun Cloud Run menargetkan penggunaan 60% untuk revisi, pada jumlah instance yang lebih rendah, autoscaler mungkin menunggu lebih lama untuk melakukan penskalaan.

Anda dapat memilih untuk menggunakan kontrol penskalaan (Pratinjau) guna beralih ke model penskalaan otomatis dengan presisi yang lebih tinggi. Dengan model ini, penskalaan otomatis berbasis metrik Cloud Run akan merespons target yang Anda konfigurasi secara cermat, bahkan untuk layanan dengan jumlah instance yang rendah. Jika layanan Anda berbeda dari konfigurasi target kustom Anda lebih dari batas toleransi 10%, Cloud Run akan merekomendasikan jumlah instance yang diperlukan untuk membuat driver penskalaan yang memicu penskalaan berada di bawah target.

Perkecil skala

Penskalaan otomatis Cloud Run mengurangi jumlah instance yang berjalan jika tidak lagi diperlukan untuk melayani traffic yang masuk. Penskalaan berbasis metrik terus menyesuaikan jumlah instance yang direkomendasikannya berdasarkan penggunaan.

Saat penggunaan CPU rata-rata atau permintaan aktif rata-rata menurun, algoritma penskalaan akan mengurangi jumlah instance yang direkomendasikan. Load balancer permintaan Cloud Run mempertimbangkan rekomendasi ini dengan mengarahkan permintaan yang masuk ke instance yang direkomendasikan terlebih dahulu. Hal ini membuat instance yang direkomendasikan lebih sibuk dan membuat instance lain menjadi nonaktif. Cloud Run mengurangi jumlah instance yang tidak direkomendasikan ini dengan menurunkan prioritasnya sehingga hanya menerima traffic jika semua instance yang direkomendasikan sedang sibuk. Untuk mempertahankan stabilitas, Cloud Run akan mematikan instance yang diprioritaskan dalam urutan berikut:

  1. Cloud Run mematikan grup instance jika penggunaannya selama periode 1 menit kurang dari 10%.
  2. Grup instance kedua tetap berjalan hingga terjadi waktu tunggu nonaktif selama 15 menit, sehingga kapasitas tersedia jika terjadi lonjakan traffic yang tiba-tiba.

Jika layanan Anda melakukan tugas lain meskipun tidak memproses permintaan, seperti menjalankan thread latar belakang, atau memproses tugas asinkron, Anda harus menetapkan instance minimum ke setidaknya 1 untuk memastikan CPU tetap dialokasikan untuk pemrosesan latar belakang.

Penskalaan on-demand

Cloud Run menggunakan penskalaan on-demand jika tidak dapat menemukan instance yang tersedia untuk melayani permintaan yang masuk. Penskalaan on-demand merespons perubahan traffic yang masuk pada revisi Cloud Run secara real time, atau perubahan latensi revisi. Penskalaan ini mencoba memastikan bahwa setiap permintaan yang masuk akan dirutekan ke instance dalam waktu singkat. Penskalaan on-demand adalah satu-satunya driver untuk penskalaan dari nol. Namun, saat melakukan penskalaan dari instance N, penskalaan berbasis metrik atau penskalaan on-demand akan menangani traffic, bergantung pada pemicu mana yang pertama.

Karena penskalaan on-demand merespons perubahan traffic yang tiba-tiba secara real time, Cloud Run mengelola pertukaran antara latensi cold start (waktu untuk memulai instance baru) dan latensi antrean tertunda (waktu permintaan menunggu slot terbuka di instance yang ada). Untuk setiap permintaan, sistem akan menentukan apakah pengantrean untuk instance yang akan datang atau instance yang ada lebih cepat (dalam urutan tersebut) sebelum mencoba memulai instance on-demand baru. Permintaan tetap berada dalam antrean tertunda selama maksimum 10 detik atau 3,5 kali waktu cold start yang diprediksi (mana pun yang lebih tinggi) sebelum sistem memicu instance on-demand baru.

Penyesuaian konkurensi adaptif (ACT)

Cloud Run menggunakan Penyesuaian konkurensi adaptif (ACT) untuk mencegah pembatasan CPU menyebabkan latensi permintaan yang tinggi. Pendekatan ini mengukur penggunaan CPU untuk setiap instance pada jumlah permintaan tertentu dan menyesuaikan nilai permintaan serentak maksimum instance secara dinamis untuk menjaga penggunaan CPU di bawah 90%. ACT menyesuaikan konkurensi berdasarkan skenario berikut:

  • Setiap kali penggunaan CPU selama 1 detik terakhir melebihi 90%, ACT akan menurunkan permintaan serentak maksimum instance sebesar 1.

  • Jika instance mencapai batas permintaan serentak maksimum, dan penggunaan CPU tetap di bawah 70% selama 1 detik, ACT akan meningkatkan permintaan serentak maksimum untuk instance sebesar 1.

  • Jika metrik penskalaan Anda menunjukkan bahwa konkurensi tidak pernah mencapai maksimum yang dikonfigurasi, hal ini mungkin karena ACT menurunkan maksimum aktual secara dinamis untuk melindungi performa instance.

Cloud Run menghitung nilai ACT untuk setiap deployment. Metrik ini tidak dipertahankan di seluruh deployment. Jika ACT mengurangi konkurensi di bawah tingkat pilihan, tingkatkan CPU yang dialokasikan per permintaan serentak maksimum. Tugas latar belakang yang menyebabkan lonjakan CPU berkala juga dapat mengganggu pendekatan penskalaan ini. Metrik ACT tidak dapat diamati.

Penagihan berbasis instance dan penskalaan otomatis

Jika mengonfigurasi penagihan berbasis instance untuk layanan Cloud Run, Anda harus mengetahui perilaku penskalaan ke dan dari nol.

Penskalaan dari nol. Penskalaan dari nol hanya dapat dipicu oleh permintaan, sehingga layanan yang tidak memproses permintaan tidak dapat melakukan penskalaan dari nol. Untuk workload ini, Anda dapat menetapkan instance minimum > 0, atau menyertakan "permintaan aktivasi" dalam desain Anda untuk memulai ulang pemrosesan setelah melakukan penskalaan ke nol.

Penskalaan ke nol. Karena tidak ada instance yang pernah berada pada 0% CPU, melihat semua penggunaan CPU akan menghasilkan penskalaan ke nol. Artinya, keputusan untuk melakukan penskalaan dari satu ke nol hanya dapat dibuat dengan memeriksa apakah instance memproses permintaan.

Tentang instance maksimum untuk layanan

Dalam beberapa kasus Anda mungkin ingin membatasi jumlah instance yang dapat dimulai, karena alasan kontrol biaya atau meningkatkan kompabilitas dengan resource lain yang digunakan pada layanan Anda. Misalnya, layanan Cloud Run Anda mungkin berinteraksi dengan database yang hanya dapat menangani beberapa jumlah koneksi terbuka serentak.

Semua layanan diberi batas instance maksimum secara default, meskipun Anda tidak menentukan batas Anda sendiri. Tetapkan dan pantau batas ini untuk menentukan perilaku penskalaan dan biaya yang terkait dengan layanan Anda. Untuk mengetahui informasi selengkapnya, lihat Batas instance maksimum.

Anda dapat menggunakan setelan instance maksimum untuk membatasi jumlah total instance yang dapat dimulai secara paralel yang didokumentasikan pada bagian Setelan maksimum jumlah instance.

Melampaui jumlah instance maksimum

Dalam keadaan normal, revisi Anda akan diskalakan dengan membuat instance baru untuk menangani beban traffic masuk. Namun, ketika Anda mengatur batas jumlah instance maksimum pada beberapa skenario instance tidak akan cukup untuk memenuhi beban traffic tersebut. Dalam hal ini, permintaan yang masuk akan diantrekan (tertunda) sebagai berikut:

Permintaan akan tertunda hingga 3,5 kali waktu startup rata-rata instance container layanan ini, atau 10 detik, mana pun yang lebih besar.

Selama periode waktu ini, jika instance selesai memproses permintaan akan tersedia untuk memproses permintaan tertunda yang dimasukkan dalam antrean. Jika tidak ada instance tersedia selama periode, permintaan gagal dengan kode error 429.

Jaminan penskalaan

Batas instance maksimum adalah batas atas per revisi dan artinya jumlah instance untuk revisi ini tidak boleh melebihi batas maksimum.

Dalam keadaan normal, Cloud Run dapat melakukan penskalaan ke batas instance maksimum dengan sangat cepat untuk menangani semua permintaan atau peristiwa yang masuk. Namun, menetapkan batas tinggi tidak berarti revisi Anda akan dapat melakukan penskalaan ke jumlah instance yang ditentukan pada waktu tertentu. Dalam keadaan luar biasa, Cloud Run dapat membatasi penskalaan untuk memastikan layanan yang baik bagi semua pelanggan.

Melampaui jumlah instance maksimum karena lonjakan traffic

Dalam beberapa kasus, seperti cepatnya lonjakan traffic atau pemeliharaan sistem Cloud Run mungkin, dalam jangka waktu singkat membuat instance lebih dari jumlah dalam setelan instance maksimum. Instance baru dapat dimulai dengan melebihi setelan instance maksimum untuk menggantikan instance yang sudah ada dan menyelesaikan proses permintaan inflight dengan menyediakan masa tenggang.

Batas instance maksimum dapat terlampaui pada keadaan operasi normal beberapa kali per minggu. Masa tenggang biasanya berlangsung hingga 15 menit atau hingga nilai yang sudah ditentukan pada setelan waktu tunggu permintaan Instance ekstra ini akan dimusnahkan setelah dalam keadaan nonaktif selama 15 menit.

Jika dibutuhkan beberapa penggantian, pembaruan biasanya tersebar dalam beberapa menit atau jam, tetapi setiap pengganti instance yang berlebihan hanya untuk masa tenggang. Instance yang melebihi nilai instance maksimum biasanya kurang dari dua kali batas instance maksimum yang dikonfigurasi, tetapi dapat jauh lebih besar jika tiba-tiba terjadi lonjakan traffic besar.

Pengalaman uji beban lebih melampaui batas setelan instance maksimum karena sistem mungkin dapat berubah ketika terjadi lonjakan traffic yang ditampilkan untuk mempertahankan kapasitas terhadap beban kerja yang ada dan memiliki pola beban berkelanjutan.

Jika layanan Anda tidak dapat menoleransi aturan sementara ini, Anda mungkin ingin mempertimbangkan margin keamanan mengatur nilai instance maksimum lebih rendah.

Pembagian traffic

Karena batas instance maksimum merupakan batas untuk setiap revisi, jika layanan membagi traffic menjadi beberapa revisi, jumlah instance pada layanan dapat melebihi instance maksimum per revisi. Hal ini dapat diamati dalam metrik Jumlah Instance.

Deployment

Saat Anda men-deploy revisi baru menjalankan 100% traffic, Cloud Run memulai dengan cukup banyak revisi baru sebelum mengarah langsung ke traffic. Hal ini mempengaruhi deployment revisi baru pada latensi permintaan, terutama ketika menjalankan traffic tingkat tinggi. Karena batas instance maksimum merupakan batas untuk setiap revisi, selama deployment, jumlah total instance untuk layanan dapat melebihi instance maksimum per revisi. Hal ini dapat diamati dalam metrik Jumlah Instance.

Instance nonaktif dan meminimalkan cold start

Untuk meminimalkan cold start, Cloud Run mungkin membuat instance tetap nonaktif selama jangka waktu tertentu setelah selesai menangani permintaan (hingga 15 menit, atau 10 menit untuk GPU).

Instance nonaktif dapat mempertahankan resource seperti koneksi database terbuka. Perhatikan bahwa setelan penagihan default adalah penagihan berbasis permintaan kecuali jika Anda mengonfigurasi layanan Anda secara eksplisit untuk menggunakan penagihan berbasis instance.

Untuk menyimpan instance nonaktif agar tersedia secara permanen, gunakan setelan min-instance. Perhatikan bahwa penggunaan fitur ini akan dikenai biaya meskipun ketika layanan tidak sedang aktif menyalurkan permintaan.

Penskalaan otomatis dan permintaan tertunda

Permintaan akan tertunda hingga 3,5 kali waktu startup rata-rata instance container layanan ini, atau 10 detik, mana pun yang lebih besar.

Dampak penskalaan otomatis pada layanan pendukung

Seiring bertambahnya jumlah instance secara otomatis, layanan Cloud Run Anda mungkin mencapai batas dengan layanan pendukungnya. Misalnya, Cloud SQL memiliki batas kuota API. Pastikan layanan pendukung ini memiliki kuota cukup dan dapat menangani koneksi dari semua instance pada layanan Cloud Run Anda. Pertimbangkan setelan jumlah maksimum instance untuk menghindari layanan pendukung kelebihan beban.

Penskalaan Otomatis dan Pub/Sub

Google merekomendasikan penggunaan langganan push untuk menggunakan pesan dari topik Pub/Sub di Cloud Run. Pesan yang dikirim diterima, seperti permintaan HTTP oleh container, sehingga memicu perilaku penskalaan otomatis yang sama.

Penskalaan otomatis dan beberapa container (file bantuan)

Cloud Run mempertimbangkan penggunaan CPU instance untuk penskalaan otomatis, dengan penggunaan CPU instance adalah persentase CPU yang dialokasikan yang sedang digunakan.

Perhatikan bahwa Anda mengalokasikan CPU saat menetapkan batas CPU di tingkat container. Jika Anda menggunakan beberapa container per instance, alokasi CPU sebenarnya untuk instance tersebut adalah jumlah batas CPU yang Anda tetapkan di setiap container.

Langkah berikutnya