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. Secara default, setiap instance Cloud Run dapat menerima hingga 80 permintaan secara bersamaan; Anda dapat meningkatkannya sampai maksimum 1.000 permintaan.
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 permintaan serentak maksimum per instance secara signifikan memengaruhi cara layanan Anda menskalakan dan menggunakan 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 yang tinggi atau untuk aplikasi yang ingin Anda skalakan lebih cepat berdasarkan beban permintaan.
- Konkurensi yang lebih tinggi: Memungkinkan setiap instance menangani lebih banyak permintaan, yang berpotensi menyebabkan lebih sedikit instance aktif dan mengurangi biaya. Hal ini cocok untuk aplikasi yang efisien dalam tugas yang terikat I/O paralel atau untuk aplikasi yang benar-benar dapat menggunakan beberapa vCPU untuk pemrosesan permintaan serentak.
Mulai dengan konkurensi default (80) , pantau performa dan penggunaan aplikasi Anda dengan cermat, dan sesuaikan seperlunya.
Serentak dengan instance multi-vCPU
Menyesuaikan konkurensi 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 dengan satu thread pada instance multi-vCPU dapat memaksimalkan satu vCPU sementara yang lain tidak ada aktivitas. Autoscaler CPU Cloud Run mengukur penggunaan CPU rata-rata di semua vCPU. Penggunaan CPU rata-rata dapat tetap rendah 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 single-thread karena kebutuhan memori yang tinggi. Penggunaan konkurensi untuk mendorong penskalaan akan memaksa 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 kompromi
untuk pertimbangan selengkapnya.
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 khusus 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 konkurensi, 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.