Batas Kapasitas

Google Ads API mengelompokkan permintaan untuk pembatasan kapasitas berdasarkan kueri per detik (QPS) per client ID (CID) klien dan token developer, yang berarti bahwa pengukuran diberlakukan secara independen pada ID Pelanggan dan token developer. Google Ads API menggunakan algoritme Bucket Token untuk mengukur permintaan dan menentukan batas QPS yang sesuai, sehingga batas yang tepat akan bervariasi, tergantung beban server keseluruhan pada waktu tertentu.

Tujuan dari menerapkan batas kapasitas adalah untuk mencegah satu pengguna mengganggu layanan bagi pengguna lain dengan (baik sengaja atau tidak sengaja) membebani server Google Ads API dengan volume permintaan yang tinggi.

Permintaan yang melanggar batas kapasitas akan ditolak dengan error: RESOURCE_TEMPORARILY_EXHAUSTED.

Anda dapat mengontrol aplikasi dan memitigasi batas kapasitas dengan mengurangi jumlah permintaan secara aktif serta membatasi QPS dari sisi klien.

Ada sejumlah cara untuk mengurangi peluang terlampauinya batas kapasitas. Pemahaman tentang konsep Enterprise Integration Patterns (EIP) seperti Messaging, Redelivery, dan Throttling dapat membantu Anda mem-build aplikasi klien yang lebih stabil.

Praktik yang direkomendasikan berikut diurutkan berdasarkan kompleksitas, dengan strategi yang lebih sederhana di bagian atas dan arsitektur yang lebih kuat tetapi canggih setelahnya:

Batasi tugas serentak

Salah satu penyebab utama terlampauinya batas kapasitas adalah bahwa aplikasi klien menghasilkan jumlah tugas paralel yang berlebihan. Meskipun kami tidak membatasi jumlah permintaan paralel yang dapat dimiliki aplikasi klien, ini dapat dengan mudah melebihi batas Permintaan Per Detik di tingkat token developer.

Menetapkan batas atas yang wajar untuk jumlah total tugas serentak yang akan membuat permintaan (di semua proses dan mesin), dan menyesuaikan ke atas untuk mengoptimalkan throughput Anda tanpa melebihi batas kapasitas direkomendasikan.

Selain itu, Anda dapat mempertimbangkan throttling QPS dari sisi klien (lihat Throttling dan pembatas kapasitas).

Permintaan batch

Pertimbangkan untuk mengelompokkan beberapa operasi ke dalam satu permintaan. Hal ini paling berlaku pada panggilan MutateFoo. Misalnya, jika Anda memperbarui status untuk beberapa instance AdGroupAd - daripada memanggil MutateAdGroupAds satu kali untuk setiap AdGroupAd, Anda dapat memanggil MutateAdGroupAds sekali, dan meneruskan beberapa operations. Baca panduan operasi batch kami untuk mengetahui beberapa contoh tambahan.

Meskipun permintaan batch mengurangi jumlah total permintaan dan mengurangi batas kapasitas Permintaan Per Menit, hal ini dapat memicu batas kapasitas Operasi Per Menit jika Anda melakukan sejumlah besar operasi terhadap satu akun.

Throttling dan pembatas kapasitas

Selain membatasi jumlah total thread dalam aplikasi klien, Anda juga dapat menerapkan pembatasan kapasitas di sisi klien. Ini dapat memastikan semua thread di seluruh proses dan/atau cluster Anda diatur oleh batas QPS tertentu dari sisi klien.

Anda dapat mencoba Batas Kapasitas Guava, atau menerapkan algoritme berbasis Bucket Token untuk lingkungan yang dikelompokkan. Misalnya, Anda dapat membuat token dan menyimpannya dalam penyimpanan transaksional bersama seperti database, dan setiap klien harus mendapatkan dan memakai token sebelum memproses permintaan tersebut. Jika token telah habis digunakan, klien harus menunggu hingga batch token berikutnya dibuat.

Mengantre

Antrean pesan adalah solusi untuk distribusi beban operasi, sekaligus mengontrol permintaan dan tarif konsumen. Ada sejumlah opsi antrean pesan yang tersedia—beberapa bersifat open source, sebagian bersifat eksklusif—dan banyak di antaranya dapat berfungsi dengan bahasa yang berbeda.

Saat menggunakan antrean pesan, Anda dapat memiliki beberapa produser yang mengirimkan pesan ke antrean dan beberapa konsumen yang memproses pesan tersebut. Throttle dapat diterapkan di sisi konsumen dengan membatasi jumlah konsumen serentak, atau menerapkan pembatas kapasitas atau throttle untuk produser atau konsumen.

Misalnya, jika pesan konsumen mengalami error batas kapasitas, konsumen tersebut dapat mengembalikan permintaan ke antrean untuk dicoba lagi. Pada saat yang sama, konsumen tersebut juga dapat memberi tahu semua konsumen lainnya untuk menjeda pemrosesan selama beberapa detik untuk memulihkan pesan dari error.