Untuk layanan Cloud Run, setiap revisi secara otomatis diskalakan ke jumlah instance yang diperlukan untuk menangani semua permintaan yang masuk.
Jika ada lebih banyak instance yang memproses permintaan, lebih banyak CPU dan memori yang akan digunakan, sehingga mengakibatkan biaya yang lebih tinggi.
Untuk memberi Anda kontrol yang lebih besar, Cloud Run menyediakan setelan permintaan serentak maksimum per instance yang menentukan jumlah maksimum permintaan yang dapat diproses secara bersamaan oleh instance tertentu.
Permintaan serentak maksimum per instance
Anda dapat mengonfigurasi permintaan serentak maksimum per instance. Anda dapat meningkatkannya hingga maksimum 1.000. Secara default, instance Cloud Run yang di-deploy menggunakan Google Cloud CLI atau Terraform memiliki konkurensi maksimum 80 kali jumlah vCPU. Default ini hanya berlaku saat layanan baru dibuat; default ini tidak berlaku untuk deployment revisi berikutnya. Instance Cloud Run yang di-deploy menggunakan konsol Google Cloud memiliki konkurensi default 80.
Meskipun Anda harus menggunakan nilai default, jika diperlukan, Anda dapat
menurunkan konkurensi maksimum. Misalnya,
jika kode Anda tidak dapat memproses permintaan paralel,
tetapkan konkurensi ke 1.
Nilai konkurensi yang ditentukan adalah batas maksimum. Jika CPU instance sudah digunakan secara tinggi, Cloud Run mungkin tidak mengirim banyak permintaan ke instance tertentu. Dalam kasus ini, instance Cloud Run mungkin menunjukkan bahwa konkurensi maksimum tidak digunakan. Misalnya, jika penggunaan CPU yang tinggi terus berlanjut, jumlah instance mungkin akan ditingkatkan.
Diagram berikut menunjukkan bagaimana permintaan serentak maksimum per setelan instance memengaruhi jumlah instance yang diperlukan untuk menangani permintaan serentak yang masuk:
Menyesuaikan konkurensi untuk penskalaan otomatis dan penggunaan resource
Menyesuaikan konkurensi maksimum per instance secara signifikan memengaruhi cara layanan Anda menskalakan dan memanfaatkan resource.
- Konkurensi yang lebih rendah: Memaksa Cloud Run menggunakan lebih banyak instance untuk volume permintaan yang sama, karena setiap instance menangani lebih sedikit permintaan. Hal ini dapat meningkatkan responsivitas untuk aplikasi yang tidak dioptimalkan untuk paralelisme internal tinggi atau untuk aplikasi yang ingin Anda skalakan lebih cepat berdasarkan beban permintaan.
- Konkurensi yang lebih tinggi: Memungkinkan setiap instance menangani lebih banyak permintaan, sehingga berpotensi mengurangi jumlah instance aktif dan menurunkan biaya. Hal ini cocok untuk aplikasi yang efisien dalam tugas terikat I/O paralel atau untuk aplikasi yang benar-benar dapat menggunakan beberapa vCPU untuk pemrosesan permintaan serentak.
Mulai dengan konkurensi default, pantau performa dan pemanfaatan aplikasi Anda dengan cermat, lalu sesuaikan seperlunya.
Konkurensi dengan instance multi-vCPU
Penyesuaian serentak sangat penting jika layanan Anda menggunakan beberapa vCPU, tetapi aplikasi Anda memiliki satu thread atau secara efektif memiliki satu thread (terikat CPU).
- Hotspot vCPU: Aplikasi ber-thread tunggal pada instance multi-vCPU dapat memaksimalkan satu vCPU saat yang lain tidak digunakan. Penskala otomatis CPU Cloud Run mengukur penggunaan CPU rata-rata di semua vCPU. Penggunaan CPU rata-rata dapat tetap rendah secara menipu dalam skenario ini, sehingga mencegah penskalaan berbasis CPU yang efektif.
- Menggunakan konkurensi untuk mendorong penskalaan: Jika penskalaan otomatis berbasis CPU tidak efektif karena hotspot vCPU, menurunkan konkurensi maksimum menjadi alat yang penting. Hotspot vCPU sering terjadi saat multi-vCPU dipilih untuk aplikasi berutas tunggal karena kebutuhan memori yang tinggi. Menggunakan konkurensi untuk mendorong penskalaan akan memaksakan penskalaan berdasarkan throughput permintaan. Hal ini memastikan bahwa lebih banyak instance dimulai untuk menangani beban, sehingga mengurangi antrean dan latensi per instance.
Ketika harus membatasi konkurensi maksimum untuk satu permintaan dalam satu waktu.
Anda dapat membatasi konkurensi sehingga hanya satu permintaan dalam satu waktu yang akan dikirim ke setiap instance yang berjalan. Anda harus mempertimbangkan untuk melakukan hal ini jika:
- Setiap permintaan menggunakan sebagian besar CPU atau memori yang tersedia.
- Image container Anda tidak dirancang untuk menangani beberapa permintaan sekaligus, misalnya, jika container Anda bergantung pada status global yang tidak dapat dibagikan oleh dua permintaan.
Perlu diperhatikan bahwa konkurensi 1 kemungkinan akan berdampak negatif terhadap performa
penskalaan, karena banyak instance harus dimulai untuk menangani lonjakan
permintaan yang masuk. Lihat
Throughput versus latensi versus pertukaran
untuk pertimbangan lainnya.
Studi kasus
Metrik berikut menunjukkan kasus penggunaan ketika 400 klien membuat 3 permintaan per detik ke layanan Cloud Run yang ditetapkan ke jumlah permintaan serentak maksimum per instance 1. Garis atas berwarna hijau menunjukkan permintaan dari waktu ke waktu, garis biru bawah menunjukkan jumlah instance yang mulai menangani permintaan.

Metrik berikut menunjukkan 400 klien yang membuat 3 permintaan per detik ke layanan Cloud Run yang ditetapkan ke permintaan serentak maksimum per instance 80. Baris atas berwarna hijau menunjukkan permintaan dari waktu ke waktu, garis biru bawah menunjukkan jumlah instance yang mulai menangani permintaan. Perhatikan bahwa jauh lebih sedikit instance diperlukan untuk menangani volume permintaan yang sama.

Serentak untuk deployment kode sumber
Jika konkurensi diaktifkan, Cloud Run tidak memberikan isolasi antara permintaan serentak yang diproses oleh instance yang sama. Dalam hal ini, Anda harus memastikan bahwa kode Anda aman dieksekusi secara serentak. Anda dapat mengubahnya dengan menyetel nilai konkurensi yang berbeda. Sebaiknya mulai dengan konkurensi yang lebih rendah seperti 8, lalu tingkatkan. Memulai dengan konkurensi yang terlalu tinggi dapat menyebabkan perilaku yang tidak diinginkan karena batasan resource (seperti memori atau CPU).
Runtime bahasa juga dapat memengaruhi konkurensi. Beberapa dampak spesifik per bahasa ini ditampilkan dalam daftar berikut:
Node.js pada dasarnya adalah thread tunggal. Untuk memanfaatkan konkurensi, gunakan gaya kode asinkron JavaScript, yang idiomatis di Node.js. Lihat Kontrol alur asinkron dalam dokumentasi resmi Node.js untuk mengetahui detailnya.
Untuk Python 3.8 dan yang lebih baru, mendukung konkurensi tinggi per instance memerlukan thread yang cukup untuk menangani konkurensi. Sebaiknya Anda menetapkan variabel lingkungan runtime sehingga nilai thread sama dengan nilai serentak, misalnya:
THREADS=8.
Langkah berikutnya
Untuk mengelola permintaan serentak maksimum per instance pada layanan Cloud Run Anda, lihat Menetapkan permintaan serentak maksimum per instance.
Untuk mengoptimalkan permintaan serentak maksimum per setelan instance, lihat tips pengembangan untuk menyesuaikan permintaan serentak.