ثلاث فترات انتظار لثلاث واجهات برمجة تطبيقات (APIs)

قمت ببناء أنابيب ETL لثلاثة مواقع أدلة في شهر أبريل. يستخدم كل موقع واجهة برمجة تطبيقات مختلفة: Steam وGitHub وHuggingFace.

كان عليّ تحديد فترات انتظار لكل منها. الأرقام، وأنماط الفشل، ومعالجة الأخطاء تختلف تماماً. إليكم ما أستخدمه والسبب وراء ذلك.

Steam: انتظار لمدة 250 مللي ثانية

وثائق Steam غامضة بشأن حدود معدل الطلبات (rate limits). تشير بيانات المجتمع إلى ما يقرب من 200 طلب كل 5 دقائق لكل عنوان IP. وهذا يعني أن فاصلًا زمنيًا قدره 1.5 ثانية سيكون آمنًا.

بدلاً من ذلك، أستخدم 250 مللي ثانية. وظيفتي الليلية تعالج 60 مدخلاً للألعاب فقط. عند 250 مللي ثانية، يكون إجمالي وقت الانتظار 15 ثانية. أما عند 1.5 ثانية، فسيصبح 90 ثانية. توفير الوقت أمر مهم عندما تقوم بمعالجة مواقع متعددة.

إذا أعادت Steam خطأً، فإن الوظيفة لا تتوقف، بل تسجل الخطأ وتنتقل إلى العنصر التالي. ويتم تحديث البيانات في الليلة التالية.

GitHub: انتظار لمدة 100 مللي ثانية

GitHub واضح جداً. يحصل المستخدمون غير المصرح لهم على 60 طلباً في الساعة. بينما يحصل المستخدمون الذين لديهم رمز (token) على 5,000 طلب في الساعة.

أستخدم انتظاراً لمدة 100 مللي ثانية كإجراء من إجراءات "اللباقة" (politeness measure). يقوم الرمز (token) بالعبء الأكبر فيما يتعلق بحدود المعدل. تستخدم أنابيب البيانات الخاصة بي واجهة REST API الأساسية، وليس واجهة البحث (search API)، مما يسمح بحدود أعلى بكثير.

HuggingFace: بدون انتظار

لم أصطدم بحدود المعدل منذ أسابيع من التشغيل الليلي. واجهة برمجة تطبيقات السجل (registry API) مصممة لأدوات المعالجة بالدفعة (batch tools) مثل أداتي.

أقوم بجلب ما يصل إلى 100 نموذج في المرة الواحدة. وأستخدم رمز مصادقة (authentication token) لرفع الحدود بشكل أكبر. بالنسبة لـ 100 نموذج، يعد عدم الانتظار هو الحل الأبسط.

جدول الملخص:

• Steam: انتظار 250 مللي ثانية. أخطاء غير قاتلة. • GitHub: انتظار 100 مللي ثانية. أخطاء غير قاتلة. • HuggingFace: بدون انتظار. أخطاء غير قاتلة.

فاصل الانتظار هو مجرد تخمين. الحماية الحقيقية تكمن في كيفية معالجتي للأخطاء. كل استدعاء لـ API يستخدم كتلة try/catch. إذا فشل الاستدعاء، يقوم النظام بكتابة صف احتياطي (fallback row) بدلاً من الانهيار.

يتحكم فاصل الانتظار في عدد المرات التي تصل فيها إلى الحد الأقصى، بينما تتحكم معالجة الأخطاء في ما يحدث عندما تصل إليه.

المصدر: https://dev.to/morinaga/three-sleep-intervals-for-three-apis-steam-250ms-github-100ms-huggingface-none-4ga7

مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi