Tentang penskalaan otomatis instance di layanan Cloud Run

Penskalaan otomatis Cloud Run menyesuaikan jumlah instance container untuk setiap revisi layanan agar sesuai dengan permintaan, peristiwa, dan pemakaian CPU yang masuk. Penskalaan instance sesuai permintaan membantu layanan Anda menangani lonjakan traffic dan melakukan penskalaan hingga nol saat tidak ada aktivitas untuk mengurangi biaya.

Anda dapat menyesuaikan nilai minimum penskalaan otomatis dengan mengonfigurasi target CPU dan konkurensi kustom serta menetapkan batas instance minimum dan maksimum. Jika layanan Anda menggunakan CPU di luar pemrosesan permintaan, tetapkan instance minimum ke setidaknya 1. Untuk menjalankan jumlah instance tetap, lihat Penskalaan manual.

Perilaku penskalaan otomatis layanan horizontal

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

Penskalaan berbasis metrik

Penskalaan berbasis metrik secara otomatis menyesuaikan jumlah instance berdasarkan pemakaian CPU rata-rata dan pendorong penskalaan konkurensi permintaan rata-rata untuk memberikan kapasitas penyaluran yang stabil bagi layanan Cloud Run Anda.

Autoscaler menentukan jumlah instance yang direkomendasikan berdasarkan jumlah maksimum instance 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 membaginya dengan jumlah CPU per instance. Hasil ini dibagi lagi dengan target CPU. Persamaan berikut menentukan penghitungan ini:

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

  • Konkurensi permintaan: menghitung jumlah instance dengan merata-rata konkurensi permintaan per detik selama periode 1 menit dan 10 menit, lalu membaginya dengan konkurensi maksimum. Hasil ini dibagi lagi dengan target konkurensi permintaan. Persamaan berikut menentukan penghitungan ini:

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

  • Penyesuaian konkurensi adaptif (ACT): menghitung jumlah instance yang direkomendasikan untuk konkurensi permintaan rata-rata 1 menit. Metode ini menggunakan nilai ACT setiap instance sebagai kapasitas konkurensi permintaan instance, bukan permintaan serentak maksimum yang dikonfigurasi. ACT secara dinamis mengurangi konkurensi sebesar 1 pada interval 1 detik saat pemakaian CPU melebihi 90%. Untuk mengetahui informasi selengkapnya, lihat Penyesuaian konkurensi adaptif (ACT).

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 batas 60% untuk pemakaian CPU dan target konkurensi permintaan. Anda dapat menggunakan kontrol penskalaan untuk menentukan target CPU atau konkurensi kustom.

Saat melakukan penskalaan berdasarkan pemakaian CPU, Cloud Run mempertimbangkan pemakaian CPU rata-rata di semua CPU yang dialokasikan ke instance. Jika aplikasi Anda ber-thread tunggal tetapi di-deploy pada instance multi-CPU, hal ini dapat menyebabkan pembacaan pemanfaatan rata-rata yang rendah, yang berpotensi memengaruhi cara keputusan penskalaan berbasis CPU dibuat. 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. Pada jumlah instance yang rendah, penskalaan berbasis metrik merespons target pemakaian Anda dengan cermat.

Penskalaan berbasis metrik mempertahankan jumlah instance saat ini selama pemakaian tetap berada dalam toleransi 10% dari target Anda, relatif terhadap target. Misalnya, dengan target default 60%, jumlah instance tidak berubah selama pemakaian tetap antara 54% dan 66%.

Jika penggunaan berada di luar rentang tersebut, penskalaan berbasis metrik akan menghitung ulang jumlah instance dari penggunaan yang diukur dan target Anda, bukan dari jumlah instance yang berjalan, dan membulatkan hasilnya ke instance utuh berikutnya. Karena pembulatan ini, layanan Anda dapat ditingkatkan skalanya meskipun pemanfaatannya masih di bawah target Anda. Misalnya, layanan yang memerlukan 4,1 instance untuk memenuhi target akan menjalankan 5 instance.

Perkecil skala

Penskalaan otomatis Cloud Run mengurangi jumlah instance yang berjalan saat instance tersebut tidak lagi diperlukan untuk melayani traffic masuk. Penskalaan berbasis metrik terus menyesuaikan jumlah instance yang direkomendasikan berdasarkan pemakaian. Cloud Run mengurangi jumlah instance yang direkomendasikan hanya jika pemanfaatan turun lebih dari 10% di bawah target, lalu menggunakan penghitungan pembulatan ke atas yang sama untuk menentukan jumlah baru.

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 masuk ke instance yang direkomendasikan terlebih dahulu. Hal ini membuat instance yang direkomendasikan lebih sibuk dan memungkinkan instance lain tidak aktif. Cloud Run mengurangi jumlah instance yang tidak direkomendasikan ini dengan menurunkan prioritasnya sehingga instance tersebut hanya menerima traffic jika semua instance yang direkomendasikan sedang sibuk. Untuk menjaga stabilitas, Cloud Run menonaktifkan instance yang tidak diprioritaskan dalam urutan berikut:

  1. Cloud Run menonaktifkan grup instance jika pemakaiannya selama periode 1 menit kurang dari 10%.
  2. Grup instance kedua tetap berjalan hingga waktu tunggu tidak ada aktivitas selama 15 menit terjadi, sehingga memastikan kapasitas tersedia jika terjadi lonjakan traffic yang tiba-tiba.

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

Penskalaan on-demand

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

Karena penskalaan on-demand merespons perubahan traffic yang tiba-tiba secara real time, Cloud Run mengelola kompromi antara latensi cold start (waktu untuk memulai instance baru) dan latensi antrean tertunda (waktu yang diperlukan permintaan untuk menunggu slot terbuka pada instance yang ada). Untuk setiap permintaan, sistem menentukan apakah mengantre untuk instance mendatang 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 saja yang lebih tinggi) sebelum sistem memicu instance on-demand baru.

Penyesuaian konkurensi adaptif (ACT)

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

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

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

  • Jika metrik penskalaan menunjukkan bahwa konkurensi tidak pernah mencapai nilai maksimum yang Anda konfigurasi, hal ini mungkin karena ACT secara dinamis menurunkan nilai maksimum aktual 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 yang diinginkan, tingkatkan CPU yang dialokasikan per permintaan serentak maksimum. Tugas latar belakang yang menyebabkan lonjakan CPU berkala juga dapat mengganggu pendekatan penskalaan ini.

Anda dapat memantau kapan ACT secara aktif mendorong penskalaan otomatis dengan melihat kolom scaling_driver di konsol Google Cloud . Untuk mengetahui detail tentang cara melihat metrik ini, lihat Mengonfigurasi kontrol penskalaan kustom untuk layanan.

Penagihan dan penskalaan otomatis berbasis instance

Jika Anda 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 diskalakan dari nol. Untuk workload ini, Anda dapat menetapkan instance minimum > 0, atau menyertakan "permintaan bangun" dalam desain Anda untuk memulai ulang pemrosesan setelah penskalaan ke nol.

Penskalaan hingga nol. Mengingat tidak ada instance yang pernah menggunakan CPU 0%, melihat semua penggunaan CPU akan mengakibatkan penskalaan tidak pernah mencapai nol. Artinya, keputusan untuk melakukan penskalaan dari satu ke nol hanya dapat dibuat dengan memeriksa apakah instance sedang 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 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 masuk diantrekan (tertunda) sebagai berikut:

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

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

Jaminan penskalaan

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

Dalam keadaan normal, Cloud Run dapat melakukan penyebaran skala hingga 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 penyebaran skala 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.

Melebihi 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 tidak ada aktivitas 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. Perlu diingat bahwa setelan penagihan default adalah penagihan berbasis permintaan, kecuali jika Anda secara eksplisit mengonfigurasi layanan untuk memiliki penagihan berbasis instance.

Untuk menyimpan instance nonaktif agar tersedia secarapermanen, gunakan min-instance setelan. 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 saja 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 untuk menetapkan 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 pemakaian CPU instance untuk penskalaan otomatis, dengan pemakaian 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