فنی · پاسخ مستند
محدودیت نرخ (rate limit) در API ایمیل چیست؟
محدودیت نرخ در API ایمیل سازوکاری است که ارائهدهندگان خدمات ایمیل برای محدود کردن تعداد درخواستهای API یک کاربر در بازه زمانی مشخص به کار میبرند. این سازوکار با محدود کردن تعداد فراخوانی endpointهایی مانند ارسال ایمیل یا دریافت آمار، از سوءاستفاده از سیستم جلوگیری میکند، توزیع منصفانه منابع بین کاربران را تضمین میکند و زیرساخت را در برابر حملات منع سرویس محافظت میکند.
نحوه پیادهسازی
محدودیت نرخ معمولاً با الگوریتمهایی مانند token bucket یا leaky bucket اعمال میشود. ارائهدهنده تعداد درخواستها را به ازای هر کلید API یا نشانی IP پیگیری میکند. وقتی کاربر از آستانه تعریفشده فراتر رود، سرور درخواستهای بعدی را تا بازنشانی بازه زمانی رد میکند. این موضوع با کد پاسخ HTTP 429 Too Many Requests به کلاینت اعلام میشود و اغلب همراه آن یک هدر Retry After میآید که زمان انتظار را بر حسب ثانیه نشان میدهد.
اهمیت برای فرستندگان
برای فرستندگان، رعایت محدودیت نرخ برای حفظ دسترسپذیری سرویس حیاتی است. فراتر رفتن از محدودیتها میتواند به تعلیق موقت حساب یا مسدود شدن دائمی کلیدهای API منجر شود. مدیریت درست تضمین میکند پیامهای تراکنشی حیاتی، مانند بازنشانی رمز عبور یا کدهای MFA، بدون وقفه تحویل داده شوند. همچنین توسعهدهندگان را وادار میکند بهجای تکیه بر الگوهای ترافیک همگام و انفجاری، سیستمهای صف کارآمد پیادهسازی کنند.
اشتباهات عملیاتی
اشتباه رایج، پیادهسازی نکردن exponential backoff در کد برنامه است. وقتی خطای 429 رخ میدهد، سیستمهای سادهانگارانه فوراً تلاش مجدد میکنند که محدودیت نرخ را بیشتر مصرف میکند و ممکن است هشدارهای امنیتی را فعال کند. خطای دیگر، نادیده گرفتن تفاوت بین محدودیت اتصالهای همزمان و محدودیت درخواست در ثانیه است که حتی وقتی سهمیه کل ساعتی پر نشده باشد به timeout منجر میشود.
نمونه پیادهسازی
توسعهدهندهای که از یک API ایمیل تراکنشی استفاده میکند ممکن است با محدودیت 14 درخواست در ثانیه روبهرو شود. اگر برنامه تلاش کند در یک حلقه 100 ایمیل بفرستد، 14 مورد اول موفق میشوند و 86 مورد باقیمانده با خطای 429 شکست میخورند. برای حل این مشکل، توسعهدهنده باید از یک صف پیام مانند RabbitMQ یا Redis استفاده کند تا درخواستهای خروجی را دقیقاً به 14 در ثانیه محدود کند و جریان ترافیک یکنواخت بماند.
ابزارهای بهینهسازی
برای بهینهسازی تحویل و پرهیز از محدودیتها، توسعهدهندگان میتوانند با SendHQ یا ابزارهای رایگان آن (https://sendhq.cc/tools) زیرساخت خود را تحلیل کنند و مطمئن شوند الگوهای ارسالشان با الزامات ارائهدهنده سازگار است. پایش هدرهای پاسخ API امکان تنظیم پویای سرعت ارسال را بر اساس سهمیه در دسترس در لحظه فراهم میکند.
پرسشهایی که تیمها میپرسند
وقتی به محدودیت نرخ API ایمیل برسم چه اتفاقی میافتد؟
API خطای HTTP 429 Too Many Requests برمیگرداند. درخواست شما پردازش نمیشود و باید تا پایان دوره بازنشانی صبر کنید و سپس دوباره ارسال کنید.
خطاهای 429 را در کد چگونه مدیریت کنم؟
exponential backoff پیادهسازی کنید. یعنی پس از اولین شکست مدت کوتاهی صبر کنید و برای هر شکست بعدی زمان انتظار را بهصورت نمایی افزایش دهید.
آیا میتوانم محدودیت نرخ API خود را افزایش دهم؟
بله، بیشتر ارائهدهندگان بر اساس سطح حساب، سابقه ارسال و حجم تأییدشده محدودیتها را افزایش میدهند. ارتقا به پلن پولی معمولاً این آستانهها را بالا میبرد.
آیا محدودیت نرخ همان سهمیه ارسال است؟
خیر. محدودیت نرخ سرعت درخواستها را کنترل میکند (مثلاً در هر ثانیه)، در حالی که سهمیه ارسال حجم کل را کنترل میکند (مثلاً در هر ماه).
منابع اصلی
- راهنمای توسعهدهنده Amazon SES — Amazon Web Services
- مستندات SendGrid — Twilio SendGrid
- مستندات Resend — Resend