سه بازه زمانی استراحت برای سه API

من در ماه آوریل خط لوله‌های ETL را برای سه سایت دایرکتوری ساختم. هر سایت از یک API متفاوت استفاده می‌کند: Steam، GitHub و HuggingFace.

مجبور بودم برای هر کدام بازه‌های زمانی استراحت تعیین کنم. اعداد، حالت‌های شکست و مدیریت خطاها همگی متفاوت هستند. در اینجا آنچه استفاده می‌کنم و دلیل آن را آورده‌ام.

Steam: استراحت ۲۵۰ میلی‌ثانیه‌ای

مستندات Steam در مورد محدودیت نرخ درخواست (rate limits) مبهم است. داده‌های انجمن‌ها نشان می‌دهد که تقریباً ۲۰۰ درخواست در هر ۵ دقیقه برای هر IP مجاز است. این یعنی یک بازه ۱.۵ ثانیه‌ای ایمن است.

من در عوض از ۲۵۰ میلی‌ثانیه استفاده می‌کنم. وظیفه شبانه من فقط ۶۰ ورودی بازی را پردازش می‌کند. در حالت ۲۵۰ میلی‌ثانیه، کل زمان استراحت ۱۵ ثانیه است. در حالت ۱.۵ ثانیه، این زمان به ۹۰ ثانیه تبدیل می‌شود. وقتی چندین سایت را پردازش می‌کنید، صرفه‌جویی در زمان اهمیت دارد.

اگر Steam خطایی برگرداند، فرآیند متوقف نمی‌شود. خطا را ثبت کرده و به سراغ مورد بعدی می‌رود. داده‌ها شب بعد به‌روزرسانی می‌شوند.

GitHub: استراحت ۱۰۰ میلی‌ثانیه‌ای

GitHub بسیار شفاف است. کاربران بدون احراز هویت ۶۰ درخواست در ساعت دریافت می‌کنند. کاربران دارای توکن ۵,۰۰۰ درخواست در ساعت دریافت می‌کنند.

من از استراحت ۱۰۰ میلی‌ثانیه‌ای به عنوان یک اقدام مؤدبانه استفاده می‌کنم. توکن، بخش اصلی مدیریت محدودیت نرخ درخواست را بر عهده دارد. خط لوله من از REST API اصلی استفاده می‌کند، نه search API. این کار اجازه می‌دهد محدودیت‌های بسیار بالاتری داشته باشیم.

HuggingFace: بدون استراحت

در هفته‌ها اجرای شبانه، هرگز به محدودیت نرخ درخواست برخورد نکرده‌ام. registry API برای ابزارهای دسته‌ای (batch tools) مانند ابزار من طراحی شده است.

من تا ۱۰۰ مدل را به صورت یکجا دریافت می‌کنم. از یک توکن احراز هویت استفاده می‌کنم تا محدودیت‌ها را حتی بالاتر ببرم. برای ۱۰۰ مدل، بدون استراحت ساده‌ترین راه حل است.

جدول خلاصه:

• Steam: استراحت ۲۵۰ میلی‌ثانیه‌ای. خطاهای غیرمرگبار. • GitHub: استراحت ۱۰۰ میلی‌ثانیه‌ای. خطاهای غیرمرگبار. • 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