ابر آروان

راه حل‌های مبتنی بر شبکه توزیع محتوا
CDN, DDoS Protection, Video Platform

بررسی Rate Limit ابر آروان و شیوه‌ی تنظیم آن

۵ اردیبهشت ۱۳۹۸

Rate limiting (محدودیت نرخ) راهکاری برای کنترل ترافیک ورودی و خروجی به/از یک شبکه است. برای نمونه با استفاده از Rate Limiting می‌توان مشخص کرد که در هر دقیقه کاربر تنها مجاز به ارسال 100 درخواست (Request) است و اگر تعداد درخواست‌ها از این میزان بیش‌تر شد، خطا داده شود. هدف از پیاده‌سازی Rate limiting عبارت است از:

  • مدیریت بهتر جریان ترافیک
  • افزایش امنیت با پیش‌گیری از بروز حملاتی هم‌چون DDoS، حملات Brute force یا هر نوع حمله‌ی مخرب دیگری در لایه‌ی اپلیکیشن

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

 

انواع روش‌های Rate limiting

در هنگام تنظیمات Rate Limit می‌توان از روش‌ها و پارامترهای مختلفی استفاده کرد. استفاده از هر یک از این روش‌ها بستگی به هدف و چگونگی اعمال محدودیت مورد نظر دارد. سه روش مختلف پیاده‌سازی Rate Limit عبارت‌اند از:

  • User Rate Limiting: این روش رایج‌ترین راه برای پیاده‌سازی Rate Limiting است. در این روش، تعداد درخواست‌های ارسالی از سمت کاربر محدود می‌شود. به این معنا که اگر تعداد درخواست‌های ارسالی از سمت کاربر بیش‌ از حد تعیین‌شده (آستانه‌ی مجاز) شوند، این درخواست‌های اضافی رد می‌شوند. این عمل تا زمانی که توسعه‌دهنده میزان آستانه‌ی مجاز را افزایش دهد یا زمان تعیین‌شده برای این محدودیت به اتمام رسد، ادامه پیدا می‌کند.
  • Geographic Rate Limiting: در این روش برای افزایش امنیت یک ناحیه‌ی جغرافیایی می‌توان تنظیماتی انجام داد که میزان ترافیک ارسالی/دریافتی آن ناحیه مشخص، در یک بازه‌ی زمانی معین محدود شود. برای نمونه، تصور کنید کاربران یک ناحیه مشخص در بازه‌ی 12 شب تا 6 صبح، هیچ‌گونه فعالیتی ندارند، به همین دلیل برای کاهش احتمال حملات یا فعالیت‌های مخرب در این بازه‌ی زمانی، می‌توان میزان Rate Limit برای آن ناحیه را کم‌ترین مقدار ممکن تعیین کرد.
  • Server Rate Limiting: اگر توسعه‌دهنده برای مدیریت جنبه‌های مشخصی از برنامه‌ی خود، سرورهای مختلفی را تعریف کرده باشد، می‌تواند Rate Limit را در سطح سرور اعمال کند. از این راه می‌توان به‌شکل هم‌زمان، محدودیت نرخ ترافیک را روی یک سرور کاهش و روی سرور دیگر افزایش داد.

 

پارامترهای محاسبه‌ی تعداد درخواست در ثانیه

تعداد درخواست‌ها در ثانیه (Request per second) نتیجه‌ی حاصل از تعداد کاربران (در این‌جا منظور IP است) در ساعت و تعداد کاربران هم‌زمان در یک پنجره‌ی زمانی معین است. تعداد درخواست‌های HTTP در واحد ثانیه که از یک اپلیکیشن دریافت می‌شوند، وابسته به پارامترهای زیر است:

  • (W) مدت زمان کلی تست یا “Test Window”
  • (J) مدت زمان یک تک Journey یا “Journey Window”
  • (Y) تعداد کاربران فعال در یک “Test Window”
  • (U) تعداد کاربران هم‌زمان در یک “Journey Window”
  • (S) تعداد گام‌ها (step) در یک Journey
  • (R) تعداد درخواست‌های HTTP در هر گام از یک Journey

منظور از “Journey”، توالی از گام‌هایی است که باید برای اتصال یک HTTP client به یک HTTP server طی ‌شوند. هر گام می‌تواند منجر به یک یا چند درخواست HTTP شود. برای نمونه، برای بارگذاری یک صفحه‌ی وب، به‌ازای هر یک از منابع مختلف (در صورت عدم cache) هم‌چون فایل‌های CSS، تصاویر، JS و … کاربر درخواست جداگانه‌ای را برای سرور ارسال می‌کند.

 

پیاده‌سازی Rate Limit در سمت سرور اصلی

Rate Limiting را می‌توان از طریق سرور، با زبان‌های برنامه‌نویسی یا از طریق مکانیسم‌های caching پیاده‌سازی کرد. دو نمونه‌ی زیر نشان‌دهنده‌ی چگونگی پیاده‌سازی Rate Limit روی سرورهای Nginx و Apache هستند.

  • Nginx

با استفاده از Nginx در جایگاه سرور اصلی، می‌توانید از ماژول  ngx_http_limit_req_module استفاده کنید. برای نمونه، با افزودن دستورات زیر به فایل پیکربندی Nginx، می‌توان Rate Limit را برحسب آدرس IP کاربر اعمال کرد.

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
    ...
    server {
    ...
    location /promotion/ {
        limit_req zone=one burst=5;
    }
}

قطعه کد بالا بیان‌گر آن است که میانگین درخواست‌ها در هر ثانیه نباید بیش از 2 درخواست باشد و در حالتی که در یک بازه‌ی زمانی، داده‌های کاربر در فواصل نامنظم فرستاده شوند (burst mode)  نیز، تعداد درخواست‌ها نباید از 5 درخواست بیش‌تر شود.

  • Apache

پیکربندی Rate Limit در Apache نیز تقریبن مشابه Nginx است. در Apache از ماژول mod_ratelimit برای محدود کردن پهنای باند کاربر استفاده می‌شود و این محدودیت به هر HTTP response اعمال می‌شود.

<Location "/promotion">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 400
    SetEnv rate-initial-burst 512
</Location>

مقادیر مشخص شده در قطعه کد بالا برحسب کیلوبایت بر ثانیه هستند. بر طبق این کد، حد آستانه‌ی سرعت 400 kbps و در burst mode، حد آستانه 512 kbps است.

 

شیوه‌ی محاسبه‌ی مقدار درست محدودیت درخواست به کمک پنل ابر آروان

برای به‌دست آوردن مقدار مناسبی برای محدودیت درخواست، پیشنهاد می‌شود نخست به بخش شبکه “توزیع محتوا (CDN)“، “بخش گزارش‌ها” و سپس بخش “تحلیل ترافیک” بروید و مدت زمان نمایش گزارش را از منوی سمت چپ این صفحه، یک ماه تعیین کنید.

سپس به پایین این صفحه و بخش درخواست‌ها بروید. در این بخش مقدار کل درخواست‌ها به‌سمت سرور شما در یک ماه قبل نشان داده می‌شود.

این مقدار را بر تعداد روزهای ماه (30 یا 31 روز)، سپس بر ساعات شبانه‌روز (24)، سپس بر یک ساعت (60 دقیقه) و نهایتن بر یک دقیقه (60 ثانیه) تقسیم کنید تا تعداد تقریبی هر درخواست در ثانیه را به‌دست آورید.

از مقدار به‌دست آمده اندکی بیش‌تر، مقداری است که می‌توانید آن را در بخش تنظیمات محدودیت‌ها مشخص کنید.

 

تنظیمات Rate Limiting در پنل ابر آروان

در قسمت محدودیت‌ها در پنل ابر آروان می‌توانید تعداد درخواست و تعداد کلی اتصال را به‌ازای هر IP برحسب ثانیه محدود کنید.

برای نمونه، اگر محدودیت درخواست به‌ازای هر IP، ۵۰۰ درخواست بر ثانیه تنظیم شود، آروان به‌ازای هر IP تا ۵۰۰ درخواست را بدون هیچ وقفه‌ای پاسخ می‌دهد. پس از ۵۰۰ درخواست در هر ثانیه، به میزان ۲۰درصد عددِ تنظیم‌شده، یعنی ۱۰۰ درخواست در ثانیه، به صف انتظار منتقل و سپس پاسخ داده می‌شود. اگر تعداد درخواست‌ها بیش‌تر از ۶۰۰ درخواست در ثانیه شود این مقدار مازاد پاسخ داده نمی‌شود.

در پایین بخش محدودیت‌ها شما این امکان را دارید تا فهرستی از IPها را وایت‌لیست کنید. به این معنا که به این IPها هیچ‌گونه محدودیتی اعمال نمی‌شود.

× برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید