Google Ads API menerapkan pembatasan kapasitas berdasarkan kueri per detik (QPS) pada ID pelanggan dan project Google Cloud secara terpisah. Google Ads API menggunakan algoritma token bucket untuk mengukur permintaan dan menentukan batas QPS yang sesuai, sehingga batas pastinya akan bervariasi bergantung pada beban server keseluruhan pada waktu tertentu.
Tujuan penerapan batas kapasitas adalah untuk mencegah satu pengguna mengganggu layanan bagi pengguna lain dengan (baik secara sengaja maupun 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 mengurangi batas kapasitas dengan secara aktif mengurangi jumlah permintaan dan membatasi QPS dari sisi klien.
Ada beberapa cara untuk mengurangi kemungkinan melampaui batas kapasitas. Memahami konsep Enterprise Integration Patterns (EIP) seperti pesan, pengiriman ulang, dan pembatasan kapasitas dapat membantu Anda membuat aplikasi klien yang lebih andal.
Praktik yang direkomendasikan berikut diurutkan berdasarkan kompleksitas, dengan strategi yang lebih sederhana di bagian atas dan arsitektur yang lebih andal tetapi canggih setelahnya:
- Membatasi tugas serentak
- Permintaan pembuatan batch
- Pembatasan kapasitas dan pembatas kapasitas
- Antrean
Membatasi tugas serentak
Salah satu penyebab utama melampaui batas kapasitas adalah aplikasi klien membuat terlalu banyak tugas paralel. Meskipun kami tidak membatasi jumlah permintaan paralel yang dapat dimiliki aplikasi klien, hal ini dapat melampaui batas permintaan per detik di tingkat project Google Cloud.
Sebaiknya tetapkan batas atas yang wajar untuk jumlah total tugas serentak yang akan membuat permintaan (di semua proses dan mesin), dan sesuaikan ke atas untuk mengoptimalkan throughput tanpa melampaui batas kapasitas.
Selain itu, Anda dapat mempertimbangkan untuk membatasi QPS dari sisi klien (lihat Pembatasan kapasitas dan pembatas kapasitas).
Permintaan pembuatan batch
Pertimbangkan untuk membuat batch beberapa operasi menjadi satu permintaan. Hal ini paling berlaku pada panggilan Mutate untuk berbagai layanan. Misalnya, jika Anda
memperbarui status untuk beberapa instance AdGroupAd, Anda
dapat memanggil MutateAdGroupAds sekali, dan meneruskan
beberapa operations daripada memanggil
MutateAdGroupAds sekali untuk setiap
AdGroupAd. Lihat panduan
operasi batch kami untuk beberapa contoh tambahan.
Meskipun permintaan pembuatan batch mengurangi jumlah total permintaan dan mengurangi batas kapasitas pada permintaan per menit, hal ini dapat memicu batas kapasitas operasi per menit jika Anda melakukan sejumlah besar operasi terhadap satu akun.
Pembatasan kapasitas dan pembatas kapasitas
Selain membatasi jumlah total thread dalam aplikasi, Anda juga dapat menerapkan pembatas kapasitas di sisi klien. Hal ini dapat memastikan semua thread di seluruh proses dan / atau cluster Anda diatur oleh batas QPS tertentu dari sisi klien.
Anda dapat melihat Pembatas Kapasitas Guava, atau menerapkan algoritma berbasis token bucket Anda sendiri untuk lingkungan cluster. Misalnya, Anda dapat membuat token dan menyimpannya di penyimpanan transaksional bersama seperti database, dan setiap klien harus mendapatkan dan menggunakan token sebelum memproses permintaan. Jika token habis, klien harus menunggu hingga batch token berikutnya dibuat.
Antrean
Antrean pesan adalah solusi untuk distribusi beban operasi, sekaligus mengontrol permintaan dan tarif konsumen. Ada beberapa opsi antrean pesan yang tersedia — beberapa open source, beberapa proprietary — dan banyak di antaranya dapat berfungsi dengan berbagai bahasa.
Saat menggunakan antrean pesan, Anda dapat memiliki beberapa produsen yang mengirim pesan ke antrean dan beberapa konsumen yang memproses pesan tersebut. Pembatasan kapasitas dapat diterapkan di sisi konsumen dengan membatasi jumlah konsumen serentak, atau menerapkan pembatas kapasitas atau pembatas untuk produsen atau konsumen.
Misalnya, jika konsumen pesan 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 lain untuk menjeda pemrosesan selama beberapa detik untuk pulih dari error.