Hız Sınırları
Google Ads API, istemci müşteri kimliği (CID) ve geliştirici jetonu başına saniyedeki sorgu sayısına (QPS) göre hız sınırı isteklerini gruplandırır. Bu, ölçümün hem CID'ler hem de geliştirici jetonları için bağımsız olarak uygulandığı anlamına gelir. Google Ads API, isteklerini ölçmek ve uygun bir QPS sınırı belirlemek için bir Token Bucket algoritması kullanır. Bu nedenle, tam sınır belirli bir zamandaki genel sunucu yüküne bağlı olarak değişir.
Hız sınırlarının uygulanmasının amacı, bir kullanıcının Google Ads API sunucularını yüksek sayıda istekle (kasıtlı veya kasıtsız) boğarak diğer kullanıcılara sunulan hizmeti kesintiye uğratmasını önlemektir.
Hız sınırlarını ihlal eden istekler, şu hatayla reddedilir:
RESOURCE_TEMPORARILY_EXHAUSTED
.
Hem istek sayısını aktif olarak azaltarak hem de istemci tarafında saniye başına istek sayısını sınırlayarak uygulamanızın kontrolünü ele alabilir ve hız sınırlarını azaltabilirsiniz.
Hız sınırını aşma olasılığını azaltmanın birkaç yolu vardır. Mesajlaşma, yeniden yayınlama ve tarama gibi Enterprise Integration Patterns (EIP) kavramlarını öğrenmek, daha güçlü bir istemci uygulaması oluşturmanıza yardımcı olabilir.
Aşağıda, karmaşıklığa göre sıralanmış önerilen uygulamalar verilmiştir. En basit stratejiler üstte, daha güçlü ancak karmaşık mimariler ise aşağıda yer alır:
Eşzamanlı görevleri sınırlama
Hız sınırlarının aşılmasının temel nedenlerinden biri, istemci uygulamasının aşırı sayıda paralel görev oluşturmasıdır. Bir istemci uygulamasının sahip olabileceği paralel istek sayısını sınırlamasak da bu sayı, geliştirici jetonu düzeyinde saniye başına istek sınırını kolayca aşabilir.
İstek gönderecek eşzamanlı görevlerin toplam sayısı için makul bir üst sınır belirlemeniz ve hız sınırını aşmadan aktarım hızınızı optimize etmek için bu sınırı yukarı doğru ayarlamanız önerilir.
Ayrıca, istemci tarafında QPS'yi sınırlayabilirsiniz (Sınırlama ve hız sınırlayıcılar başlıklı makaleyi inceleyin).
İstekleri gruplama
Birden fazla işlemi tek bir istek halinde toplu olarak gönderebilirsiniz. Bu durum en çok MutateFoo
aramalarında geçerlidir. Örneğin, AdGroupAd
öğesinin birden fazla örneğinin durumunu güncelliyorsanız her AdGroupAd
için bir kez MutateAdGroupAds
çağırmanın yerine MutateAdGroupAds
'i bir kez çağırabilir ve birden fazla operations
iletebilirsiniz. Daha fazla örnek için toplu işlemlerle ilgili yönergelerimize göz atın.
İstekleri gruplandırmak toplam istek sayısını azaltır ve Dakikada İstek Sayısı oranı sınırını hafifletir. Ancak tek bir hesapla ilgili çok sayıda işlem yaparsanız Dakikada İşlem Sayısı oranı sınırı tetiklenebilir.
Throttling ve hız sınırlayıcılar
İstemci uygulamanızdaki toplam iş parçacığı sayısını sınırlamanın yanı sıra istemci tarafında hız sınırlayıcılar da uygulayabilirsiniz. Bu sayede, işlemleriniz ve / veya kümelerinizdeki tüm iş parçacıklarının istemci tarafında belirli bir QPS sınırıyla yönetilmesini sağlayabilirsiniz.
Guava Rate Limiter'a göz atabilir veya kümelenmiş bir ortam için kendi Token Bucket tabanlı algoritmanızı uygulayabilirsiniz. Örneğin, jeton oluşturabilir ve bunları veritabanı gibi paylaşılan bir işleme depolama alanında saklayabilirsiniz. Bu durumda, her istemcinin isteği işleme almadan önce bir jeton edinip kullanması gerekir. Jetonlar kullanıldıysa istemcinin bir sonraki jeton grubu oluşturulana kadar beklemesi gerekir.
Sıraya ekleme
Mesaj kuyruğu, işlem yükü dağıtımı için çözümdür ve istek ile tüketici oranlarını da kontrol eder. Birkaç mesaj kuyruğu seçeneği vardır (bazıları açık kaynak, bazıları özeldir) ve bunların çoğu farklı dillerle çalışabilir.
Mesaj sıralarını kullanırken birden fazla üreticinin sıraya mesaj göndermesi ve birden fazla tüketicinin bu mesajları işlemesi mümkündür. Throttling, eşzamanlı tüketici sayısını sınırlayarak tüketici tarafında uygulanabilir veya üreticiler ya da tüketiciler için hız sınırlayıcılar veya throttler'lar uygulanabilir.
Örneğin, bir mesaj tüketicisi ücret sınırı hatasıyla karşılaşırsa isteği yeniden denenmesi için kuyruğa döndürebilir. Aynı zamanda, bu tüketici diğer tüm tüketicileri hata nedeniyle işleme işlemini birkaç saniye duraklatmaları konusunda da bilgilendirebilir.