بررسی Rate Limit ابر آروان و شیوهی تنظیم آن
Rate Limiting یا محدودیت نرخ راهکاری برای کنترل ترافیک ورودی به یک شبکه است. برای نمونه با استفاده از Rate Limit میتوان مشخص کرد که در هر دقیقه کاربر تنها مجاز به ارسال تعداد مشخصی درخواست (Request) باشد و اگر تعداد درخواستها از این میزان بیشتر شد، خطا داده شود. هدف از پیادهسازی Rate limiting عبارت است از:
• مدیریت بهتر جریان ترافیک
• افزایش امنیت با پیشگیری از بروز حملاتی همچون DDoS، حملات Brute Force یا هر نوع حملهی مخرب دیگری در لایهی اپلیکیشن
تنظیمات Rate Limiting در پنل ابر آروان
با استفاده از قابلیت Rate Limiting ابر آروان، میتوانید تعداد درخواست بهازای هر IP برحسب ثانیه را به یک مسیر و یا کل دامنهی خود محدود کنید. برای اعمال یک قانون محدودیت جدید، در پنل کاربری ابر آروان، بخش امنیت ابری و در قسمت محدودیت تعداد درخواستها، روی گزینهی افزودن قانون کلیک کنید.
در این بخش باید مسیر مورد نظر خود برای اعمال محدودیت را وارد کنید. توجه داشته باشید که شیوهی ورود این مسیر باید بهشکل الگوی Glob باشد. راهنمای تنظیمات آدرس مقصد در نسل جدید امنیت ابری آروان با الگوی Glob، شما را با این نوع آدرسدهی آشنا میکند.
قسمت بعدی، لیست IP های مجاز است که محدودیت تعریف شده در این قانون شامل IP های وارد شده در آن نخواهند بود. این قسمت و قسمت توضیحات قسمتهایی هستند که ورود اطلاعات در آنها ضروری نیست و میتوانند خالی بمانند.
در ادامه دو بخش تعداد درخواست و بازهی زمانی وجود دارند. عدد وارد شده در بخش تعداد درخواست، بیشتری تعداد درخواستهای ارسالی از یک IP در هر ثانیه را نشان میدهد. اگر تعداد درخواست ارسالی IP در یک ثانیه از این میزان بیشتر شود، با محدودیت مواجه شده و خطای ۴۲۹ دریافت خواهد کرد.
از سوی دیگر، بخش بازهی زمانی مشخصکنندهی زمانی است که بین دو درخواست یک IP وجود دارد. اگر بین دو درخواست از یک IP یکسان این بازهی زمانی رعایت نشده باشد، کاربر با محدودیت و خطای ۴۲۹ مواجه میشود.
روشن کردن کلید Burst به کاربر اجازه میدهد تا تعداد درخواستهای مشخصشده را بهشکل یکجا ارسال کند. این تعداد در واقع میزان درخواستهایی است که در یک لحظهی مشخص در یک بازهی یک ثانیهای توسط یک کاربر قابل ارسال هستند بدون اینکه توسط قابلیت Rate Limit ابر آروان محدود شوند.
در انتها پس از ورود اطلاعات مورد نظر و با انتخاب گزینهی ذخیره، محدودیت اعمال خواهد شد.
مثالهای زیر میتوانند به شما در آشنایی بیشتر با شیوهی کار این قابلیت ابر آروان کمک کنند. تصور کنید محدودیت تعداد درخواست را روی ۱۰ هزار و اندازهی Burst را روی ۵هزار قرار داده باشیم. در این صورت:
• اگر ۱۰ هزار درخواست در بازهای یک ثانیهای و بهشکل پراکنده دریافت شود، تمامی این درخواستها بدون مشکل به مقصد خواهند رسید.
• اگر تمام ۱۰ هزار درخواست در لحظهی ابتدایی بازهی یک ثانیهای دریافت شوند، ۵ هزار درخواست اول به مسیر خود ادامه میدهند اما باقی درخواستها توسط قابیلت Rate limit ابر آروان محدود و با خطای ۴۲۹ مواجه میشوند.
• اگر ۵ هزار درخواست در لحظهی ابتدایی دریافت و ۵ هزار درخواست در میلی ثانیهی ۱۰۱ دریافت شوند، ۶ هزار درخواست به مقصد خواهند رسید. دلیل این مورد این است که بهدلیل نرخ ۱۰هزار درخواست در ثانیه، سرورهای آروان هزار درخواست را در ۱۰۰ میلی ثانیهی ابتدایی عبور داده است و پس از آن با توجه به Burst ۵ هزار درخواستی خود، هزار درخواست دیگر را نیز برای پردازش میپذیرد. با توجه به پر شدن ظرفیت Burst، در این لحظه ۴ هزار درخواست باقیمانده با محدودیت و خطا مواجه خواهند شد.
• اگر ۵ هزار درخواست در اولین میلیثانیهی بازه، هزار درخواست دیگر در میلیثانیهی ۱۰۱ و ۴ هزار درخواست دیگر بهشکل پراکنده طی ۸۹۹ میلیثانیهی باقیمانده دریافت شوند، تمام درخواستها بدون مشکل پردازش خواهند شد.
با توجه به اینکه قابلیت Rate Limiting ابر آروان امکان وجود قوانین مختلف در مسیرهای متفاوت را فراهم کردهاست، شما میتوانید برای هر مسیر سیاست و محدودیت متفاوتی داشته باشید.
اولویتدهی به محدودیتها
هنگام محاسبهی تعداد درخواستهای یک کاربر و تطبیق آن با قوانین موجود، اولویتها به ترتیب و با شروع از اولویت ۱ محاسبه می شوند. یعنی اگر کاربری با محدودیت قانون ۱ مواجه شود، دیگر قوانین با محدودیت پایینتر دربارهی این کاربر بررسی نخواهد شد.
به کمک اولویتدهی برای مسیر های مختلف، میتوان سیاستهای مختلفی برای سایت تعیین کرد. بهعنوان مثال، مسیرهای با حساسیت کمتر را در ابتدای لیست و مسیرهای با حساسیت بالاتر را در انتهای فهرست قوانین قرار دهید.
فرض کنیم که میخواهید کاربران را برای دستیابی به دو مسیر زیر محدود کنیم:
زمان |
تعداد درخواست |
مسیر |
۶۰ ثانیه |
۵ |
example.com/api/login/** |
۶۰ ثانیه |
۱۰ |
example.com/api/** |
در این صورت بهتر است که مسیر ۱ با یک قانون با اولویت بالاتر(عدد اولویت ۱) و مسیر ۲ را با اولویت پایینتر(عدد اولویت ۲) تنظیم شود.