حدود المعدل
تُجمِّع Google Ads API طلبات الحدّ من معدّل الإرسال حسب طلبات البحث في الثانية (QPS) لكل رقم تعريف عميل (CID) ورمز مطوِّر، ما يعني أنّه يتم فرض القياس بشكل مستقل على كلّ من أرقام تعريف العملاء ورموز المطوّرين. تستخدم Google Ads API خوارزمية حزمة الرموز المميّزة لقياس الطلبات وتحديد الحدّ الأقصى المناسب لطلبات الفوترة في الثانية، لذا سيختلف الحدّ الأقصى الدقيق استنادًا إلى إجمالي حمل الخادم في أيّ وقت معيّن.
يهدف فرض حدود معدّل الإرسال إلى منع مستخدم واحد من تعطيل الخدمة للمستخدمين الآخرين من خلال (إما عن قصد أو بدون قصد) توقّف خوادم Google Ads API عن العمل بسبب العدد الكبير من الطلبات.
سيتم رفض الطلبات التي تنتهك حدود معدّل الإرسال مع عرض رسالة الخطأ:
RESOURCE_TEMPORARILY_EXHAUSTED
.
يمكنك التحكّم في تطبيقك والحدّ من حدود معدّلات الإرسال من خلال خفض عدد الطلبات بشكل نشط والحدّ من معدّل عمليات طلب البيانات في الثانية من جهة العميل.
هناك عدد من الطرق لتقليل فرص تجاوز الحد الأقصى للسعر. يمكن أن يساعدك التعرّف على مفاهيم أنماط دمج المؤسسات (EIP) مثل المراسلة وإعادة التسليم والحدّ من السرعة في إنشاء تطبيق عميل أكثر كفاءة.
في ما يلي الممارسات المقترَحة مرتبة حسب التعقيد، مع عرض الاستراتيجيات الأسهل في أعلى القائمة والتصاميم الأكثر ثباتًا ولكنّها معقّدة بعد ذلك:
- وضع حدود للمهام المتزامنة
- تجميع الطلبات
- تقييد السرعة وأدوات الحد من معدّل نقل البيانات
- الانتظار في قائمة الانتظار
الحد من المهام المتزامنة
إنّ أحد الأسباب الأساسية لتجاوز حدود المعدّلات هو أنّ تطبيق العميل ينشئ عددًا كبيرًا جدًا من المهام الموازية. على الرغم من أنّنا لا نحدّ من عدد الطلبات المتزامنة التي يمكن أن يقدّمها تطبيق العميل، يمكن أن يتجاوز ذلك بسهولة الحدّ الأقصى للطلبات في الثانية على مستوى رمز مطوّر البرامج.
ننصحك بضبط حدّ أقصى معقول لإجمالي عدد المهام المتزامنة التي ستُجري طلبات (في جميع العمليات والأجهزة)، وتعديله إلى أعلى لتحسين معدل نقل البيانات بدون تجاوز الحدّ الأقصى للمعدل.
بالإضافة إلى ذلك، يمكنك النظر في الحدّ من عدد طلبات البحث في الثانية من جهة العميل (اطّلِع على الحدّ من عدد طلبات البحث في الثانية وأدوات الحدّ من معدّل الإرسال).
تجميع الطلبات
ننصحك بتجميع عمليات متعددة في طلب واحد. وينطبق ذلك بشكلٍ خاص على المكالمات التي تتم على MutateFoo
. على سبيل المثال، إذا كنت بصدد تعديل الحالة لحالات متعددة من AdGroupAd
، بدلاً من
استدعاء MutateAdGroupAds
مرة واحدة لكل AdGroupAd
، يمكنك استدعاء
MutateAdGroupAds
مرة واحدة،
وإدخال operations
متعددة. يمكنك الرجوع إلى إرشادات العمليات المجمّعة
للاطّلاع على بعض الأمثلة الإضافية.
على الرغم من أنّ تجميع الطلبات يقلل من إجمالي عدد الطلبات ويحدّ من الحدّ الأقصى لمعدّل الطلبات في الدقيقة، إلا أنّه قد يؤدي إلى بدء الحدّ الأقصى لمعدّل العمليات في الدقيقة في حال تنفيذ عدد كبير من العمليات في حساب واحد.
الحدّ من السرعة وأدوات الحدّ من معدّل الاستهلاك
بالإضافة إلى الحد من إجمالي عدد سلاسل المحادثات في تطبيق العميل، يمكنك أيضًا تنفيذ أدوات الحد من معدّل الإرسال من جهة العميل. يمكن أن يضمن ذلك أنّ جميع خيوط المعالجة في جميع عملياتك و / أو مجموعاتك تخضع لحدّ محدّد لطلبات البيانات في الثانية (QPS) من جهة العميل.
يمكنك الاطّلاع على Guava Rate Limiter أو تنفيذ خوارزمية مستندة إلى Token Bucket الخاصة بك لبيئة متكتّبة. على سبيل المثال، يمكنك إنشاء الرموز المميّزة وتخزينها في مساحة تخزين مشترَكة للمعاملات، مثل قاعدة بيانات، وعلى كل عميل الحصول على رمز مميّز واستخدامه قبل معالجة الطلب. في حال نفاذ الرموز المميّزة، على العميل الانتظار إلى أن يتم إنشاء الدفعة التالية من الرموز المميّزة.
الإضافة إلى قائمة المحتوى التالي
وتعدّ قائمة انتظار الرسائل هي الحلّ لتوزيع حمولة العمليات، مع التحكّم أيضًا في معدّلات الطلبات والمستهلكين. هناك عدد من خيارات ملف الانتظار للرسائل، بعضها مفتوح المصدر وبعضها مُستحوذ عليه، ويمكن أن تعمل العديد من هذه الخيارات بلغات مختلفة.
عند استخدام قوائم انتظار الرسائل، يمكنك أن يكون لديك عدة مُنشئين يرسلون الرسائل إلى القائمة وعدة مستهلكين يعالجون هذه الرسائل. يمكن تنفيذ عمليات الحدّ من السرعة على جانب المستخدِم من خلال الحدّ من عدد المستخدِمين المتزامنين، أو تنفيذ أدوات الحدّ من معدّل الإرسال أو أدوات الحدّ من السرعة لأيّ من المنتجين أو المستخدِمين.
على سبيل المثال، إذا واجه أحد مستخدِمي الرسائل خطأ في حدود الأسعار، يمكن لهذا المستخدِم إرجاع الطلب إلى "القائمة الانتظار" لإعادة المحاولة. وفي الوقت نفسه، يمكن لهذا العميل إعلام جميع العملاء الآخرين أيضًا بإيقاف المعالجة مؤقتًا لعدد من ثوانٍ للتعامل مع الخطأ.