Batas Kapasitas

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

Penerapan batas kapasitas ditujukan untuk mencegah satu pengguna mengganggu layanan untuk pengguna lain dengan (baik sengaja maupun tidak) membanjiri 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 secara aktif mengurangi jumlah permintaan dan melakukan throttling QPS dari sisi klien.

Ada sejumlah cara untuk mengurangi kemungkinan melampaui batas kapasitas. Memahami konsep Pola Integrasi Perusahaan (EIP) seperti Pesan, Pengiriman Ulang, dan Throttling dapat membantu Anda membangun aplikasi klien yang lebih tangguh.

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

Membatasi tugas serentak

Salah satu penyebab terlampauinya batas kapasitas adalah aplikasi klien menghasilkan tugas paralel dalam jumlah yang terlalu banyak. Meskipun kami tidak membatasi jumlah permintaan paralel yang dapat dimiliki aplikasi klien, hal ini dapat dengan mudah melebihi batas Permintaan Per Detik pada tingkat token developer.

Sebaiknya tetapkan batas atas yang wajar untuk jumlah total tugas serentak yang akan membuat permintaan (di semua proses dan mesin), dan lakukan penyesuaian untuk mengoptimalkan throughput tanpa melebihi batas kapasitas.

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

Permintaan pembuatan 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 - bukan memanggil MutateAdGroupAds satu kali untuk setiap AdGroupAd, Anda dapat memanggil MutateAdGroupAds satu kali, dan meneruskan beberapa operations. Lihat panduan operasi batch kami untuk beberapa contoh tambahan.

Meskipun pembuatan batch permintaan 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 di aplikasi klien, Anda juga dapat mengimplementasikan pembatas kapasitas pada sisi klien. Dengan begitu, semua thread di seluruh proses dan / atau cluster Anda diatur oleh batas QPS tertentu dari sisi klien.

Anda dapat melihat Guava Rate Limiter, atau menerapkan algoritma berbasis Token Bucket Anda sendiri untuk lingkungan yang dikelompokkan. Misalnya, Anda dapat membuat token dan menyimpannya di penyimpanan transaksional bersama, seperti database, dan setiap klien harus memperoleh serta menggunakan token sebelum memproses permintaan. Jika token sudah habis digunakan, klien harus menunggu hingga batch token berikutnya dibuat.

Antrean

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

Saat menggunakan antrean pesan, Anda dapat memiliki beberapa produser yang mendorong 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 throttler untuk produsen atau konsumen.

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