سِری پست های Rate Limiting
توی این سِری پست ها میخوام الگوریتم های مختلف rate limting رو توضیح بدم. اول از همه ببینیم چه کاربردی داره؟
Rate Limit چیست؟
توضیح خاصی نداره چون همتون باهاش آشنایید. تاحالا به خطای 429 Too Many Requests برخورد کردین؟ دقیقا همونه. مکانیزمی هست برای محافظت از یک منبع دربرابر اضافهبار.
برای مثال اوایل که AWS درست شد، همچین مکانیزمی نداشتن و یه نفر فقط با فرستادن ۱ میلیون درخواست باعث شد سرویسشون دچار مشکل بشه و هزینه ی هنگفتی براشون ایجاد کنه. این دقیقا جایی بود بحث Rate limit به شکل رسانه ای بزرگ شد.
چرا Redis برای Rate Limit؟
ردیس یه ابزار محبوب برای پیاده سازی rate limit هست و دلیل خوبی داره: سرعت و اسکریپتنویسی.
همچنین atomic بودن و نگهداشتن داده ها در حافظه هم هستن.
انواع پترن ها و الگوریتم ها
- Leaky Bucket
- Token Bucket
- Fixed Window
- Sliding Window
به ترتیب روزی یکی رو توضیح میدم ( با سورس و گیف )
#ratelimit
@CodingLovers_OFF 🔥
توی این سِری پست ها میخوام الگوریتم های مختلف rate limting رو توضیح بدم. اول از همه ببینیم چه کاربردی داره؟
Rate Limit چیست؟
توضیح خاصی نداره چون همتون باهاش آشنایید. تاحالا به خطای 429 Too Many Requests برخورد کردین؟ دقیقا همونه. مکانیزمی هست برای محافظت از یک منبع دربرابر اضافهبار.
برای مثال اوایل که AWS درست شد، همچین مکانیزمی نداشتن و یه نفر فقط با فرستادن ۱ میلیون درخواست باعث شد سرویسشون دچار مشکل بشه و هزینه ی هنگفتی براشون ایجاد کنه. این دقیقا جایی بود بحث Rate limit به شکل رسانه ای بزرگ شد.
چرا Redis برای Rate Limit؟
ردیس یه ابزار محبوب برای پیاده سازی rate limit هست و دلیل خوبی داره: سرعت و اسکریپتنویسی.
همچنین atomic بودن و نگهداشتن داده ها در حافظه هم هستن.
انواع پترن ها و الگوریتم ها
- Leaky Bucket
- Token Bucket
- Fixed Window
- Sliding Window
به ترتیب روزی یکی رو توضیح میدم ( با سورس و گیف )
#ratelimit
@CodingLovers_OFF 🔥
❤11😁1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Leaky Bucket
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن.
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفهای بینشون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.
💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستمتون قدرت پردازشعه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )
#ratelimit
@CodingLovers_OFF ❤️🔥
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن.
از یه سایت بخوام مثال بزنم،✨️ موارد استفاده
فرض کن کاربر ۱۰۰ تا درخواست همزمان میده، ولی تو با این الگوریتم، تو ۱۰ تا ۱۰ تا جوابشو میدی
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفهای بینشون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.
💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستمتون قدرت پردازشعه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )
#ratelimit
@CodingLovers_OFF ❤️🔥
👍6❤3
Coding Lovers
سِری پست های Rate limit - الگوریتم Leaky Bucket یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن. از یه سایت بخوام مثال بزنم، فرض کن کاربر ۱۰۰ تا…
کدِ الگوریتمش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
👍10
Coding Lovers
کدِ الگوریتمش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
leaky_bucket_algorithm.py
1.7 KB
اینم از سورسعه الگوریتم و مثال
لذتشو ببرین 🔥
ازش حتی داخل ربات های تلگرامی هم برای جلوگیری از اسپم و تشخیصشون میتونین استفاده کنین
#ratelimit
@CodingLovers_OFF
لذتشو ببرین 🔥
ازش حتی داخل ربات های تلگرامی هم برای جلوگیری از اسپم و تشخیصشون میتونین استفاده کنین
#ratelimit
@CodingLovers_OFF
❤10🤣2
والا بقران وسط جنگ وضعیت اینترنتم بهتر بود
این چه وضعیتیه
این چه وضعیتیه
👍17🤣4
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Token Bucket
توکنها با نرخ ثابتی تولید و توی یه سطل ذخیره میشون. هر درخواست یک توکن مصرف میکنه. وقتی توکن ها تموم بشن، درخواست هم رد میشه.
پیچیدگی خاصی نداره که بخوام توضیح بیشتری بدم :/
بدرد API هایی میخوره که میخوان جلوی اسپم و بروت فورس رو بگیرن. تخصصی تر بخوام بگم، برای مدیریت افزایش ناگهانی ترافیک بدرد میخوره.
مثلا سایت قابلیت سرچ داره، این الگوریتم کمکت میکنه تا از سرچ های تند تند و پشت هم کاربرا جلوگیری کنی.
حقیقتا شخصا ضعفی توش ندیدم :)
#ratelimit
@CodingLovers_OFF ❤️🔥
توکنها با نرخ ثابتی تولید و توی یه سطل ذخیره میشون. هر درخواست یک توکن مصرف میکنه. وقتی توکن ها تموم بشن، درخواست هم رد میشه.
پیچیدگی خاصی نداره که بخوام توضیح بیشتری بدم :/
یجورایی برخلاف الگوریتم قبلی رفتار میکنه، اونجا سطل با درخواست پر میشد، اینجا خالی میشه.✨️ موارد استفاده
بدرد API هایی میخوره که میخوان جلوی اسپم و بروت فورس رو بگیرن. تخصصی تر بخوام بگم، برای مدیریت افزایش ناگهانی ترافیک بدرد میخوره.
مثلا سایت قابلیت سرچ داره، این الگوریتم کمکت میکنه تا از سرچ های تند تند و پشت هم کاربرا جلوگیری کنی.
خلاصه بهترین الگوریتم برای گذاشتن محدودیت هایی مثل Request per minute هست.💢 ضعف
حقیقتا شخصا ضعفی توش ندیدم :)
#ratelimit
@CodingLovers_OFF ❤️🔥
❤10🔥1
Coding Lovers
سِری پست های Rate limit - الگوریتم Token Bucket توکنها با نرخ ثابتی تولید و توی یه سطل ذخیره میشون. هر درخواست یک توکن مصرف میکنه. وقتی توکن ها تموم بشن، درخواست هم رد میشه. پیچیدگی خاصی نداره که بخوام توضیح بیشتری بدم :/ یجورایی برخلاف الگوریتم قبلی رفتار…
token_bucket.py
1.5 KB
👍6🔥2❤1
یه چند روز وقفه افتاده بین پست ها عذرمیخوام
۲ ۳ روز ریلکس کرده بودم، بعد ۲ ماه بکوب نشستن پشت سیستم حقم بود
۲ ۳ روز ریلکس کرده بودم، بعد ۲ ماه بکوب نشستن پشت سیستم حقم بود
❤7👍1🔥1😢1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Fixed Window Counter
ساده ترین الگوریتم؛ تعداد درخواستها رو در فواصل زمانی ثابت (مثلاً ۱ دقیقه) پیگیری میکنیم. بعد از رسیدن به حد مجاز، تمام درخواستهای بعدی در اون پنجره رد میشن.
✨️ موارد استفاده
API های ساده با ترافیک قابل پیشبینی و پروژه های ساده. کاراییش بشدت راحته و مهاجم ها راحت میتونن دورش بزنن :)
💢 ضعف
همونطور که گفتم راحت میشه دورش زد و باهاش بازی کرد. میشه زمانبندی درخواست هارو یجوری میزون کرد که بیشتر از حد مجاز درخواست زد.
#ratelimit
@CodingLovers_OFF ❤️🔥
ساده ترین الگوریتم؛ تعداد درخواستها رو در فواصل زمانی ثابت (مثلاً ۱ دقیقه) پیگیری میکنیم. بعد از رسیدن به حد مجاز، تمام درخواستهای بعدی در اون پنجره رد میشن.
✨️ موارد استفاده
API های ساده با ترافیک قابل پیشبینی و پروژه های ساده. کاراییش بشدت راحته و مهاجم ها راحت میتونن دورش بزنن :)
🔓 خلاصه ازش استفاده نکنین، امن نیست.
💢 ضعف
همونطور که گفتم راحت میشه دورش زد و باهاش بازی کرد. میشه زمانبندی درخواست هارو یجوری میزون کرد که بیشتر از حد مجاز درخواست زد.
#ratelimit
@CodingLovers_OFF ❤️🔥
❤6👍2🔥1😢1
Coding Lovers
سِری پست های Rate limit - الگوریتم Fixed Window Counter ساده ترین الگوریتم؛ تعداد درخواستها رو در فواصل زمانی ثابت (مثلاً ۱ دقیقه) پیگیری میکنیم. بعد از رسیدن به حد مجاز، تمام درخواستهای بعدی در اون پنجره رد میشن. ✨️ موارد استفاده API های ساده با ترافیک…
fixed_window_counter.py
4.1 KB
اینم سورسش
دیگه حوصله توضیحات نوشتن نداشتم دادم هوش مصنوعی نوشت با مثال
#ratelimit
@CodingLovers_OFF ❤️🔥
دیگه حوصله توضیحات نوشتن نداشتم دادم هوش مصنوعی نوشت با مثال
#ratelimit
@CodingLovers_OFF ❤️🔥
❤13
عشقای من کانال یوتوب کدینگ لاورز رو دریابید
چیزی نمونده ۴۰۰۰ تا بشیم
کارهای خفن زیادی در پیش رو هست👨💻
📱 https://youtube.com/@CodingLovers
اگه آموزش خاصی نیاز دارید توی کامنت ها بگید🙏
چیزی نمونده ۴۰۰۰ تا بشیم
کارهای خفن زیادی در پیش رو هست
اگه آموزش خاصی نیاز دارید توی کامنت ها بگید
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥3
سِری پست های Rate limit - الگوریتم Sliding Window
این خودش به دو الگوریتم تقسیم میشه:
1: Sliding Window Log
دقیقا چیزیه که داخل ویدیو میبینین.
بازهی زمانی متحرک داره و اومده که مشکل الگوریتم Fixed Window رو حل کنه.
بدرد بخش هایی از پروژه میخوره که واقعا دقت rate limit بالایی میخواد و امنیت بشدت بالایی نیاز داره؛ چون هیچجوره نمیشه این الگوریتم رو دور زد. برای مثال بانک ها ( خارجیاش ) از این الگوریتم برای محدود کردن کاربران برای تعداد برداشت وَجه در روز استفاده میکنن.
تنها ضعفی که داره اینه که مصرف مموری بالایی داره.
2: Sliding Window Counter
یه نسخه کم دقت تر از الگوریتم اولیعه. همونکار رو به همون شکل انجام میده، با دقت کمتر، و مصرف مموری کمتر.
@CodingLovers_OFF ❤️🔥
این خودش به دو الگوریتم تقسیم میشه:
1: Sliding Window Log
دقیقا چیزیه که داخل ویدیو میبینین.
بازهی زمانی متحرک داره و اومده که مشکل الگوریتم Fixed Window رو حل کنه.
بدرد بخش هایی از پروژه میخوره که واقعا دقت rate limit بالایی میخواد و امنیت بشدت بالایی نیاز داره؛ چون هیچجوره نمیشه این الگوریتم رو دور زد. برای مثال بانک ها ( خارجیاش ) از این الگوریتم برای محدود کردن کاربران برای تعداد برداشت وَجه در روز استفاده میکنن.
تنها ضعفی که داره اینه که مصرف مموری بالایی داره.
2: Sliding Window Counter
یه نسخه کم دقت تر از الگوریتم اولیعه. همونکار رو به همون شکل انجام میده، با دقت کمتر، و مصرف مموری کمتر.
کد هاشونو میزارم، و بعد یه پست میزارم که بگم هرکدوم رو کجا استفاده کنید. اینا بیشتر داخل API ها استفاده میشن، اما داخل ربات های تلگرامی هم خالی از لطف نیستن.#ratelimit
@CodingLovers_OFF ❤️🔥
❤4🔥1
❤3🔥1
Coding Lovers
log.py
سِری پست های Rate Limit - از هرکدوم کجا استفاده کنیم؟
توضیحات و کد هر الگوریتم رو بهتون دادم، حالا وقتشه یه استفاده ای ازشون بکنیم
انتخاب کردنشون رو اصلا سخت نگیرین، بلاخره هرکدوم دارن یه کار رو انجام میدن.
خیلی ساده بخوام بگم از نظر من Token Bucket واسه همه جا جوابه.
💢 حجم ترافیک
- اگه میدونین یهو کلی ادم هجوم نمیارن ( ترافیکتون قابل پیشبینیعه )، از Leaky Bucket استفاده کنین
- اگه میدونین ممکنه حجم بالایی از افراد در یک زمان خاص ترافیک سنگینی ایجاد کنن، Token Bucket جوابه
- اگه هیچ حدسی راجب این موضوع ندارین، Sliding Window Counter مناسبه چون تعادلی بین مصرف منابع و کیفیت ارائه میده، درنتیجه خیالت راحته
🔥 دقت و امنیت
- اگه خیلی امنیت مهمه ( مثلا برای API های درگاه یا authentication ) ، بهترین گزینه Sliding Window Log هست. مثلا کلودفلر برای شرایطی که سایتتون مورد حمله قرار میگیره میاد از همچین الگوریتمی کمک میگیره، چون همینطور که بشدت امنیت بالایی داره، اطلاعات هم براتون ذخیره میکنه ( توی سورسش مشخصه - پارامتر member توی سورس )
- اگه نمیخواین سخت بگیرین، token bucket بزنین
- اگه باز هم هیچ نظری ندارین، sliding window counter جوابه
✨️ کجاها بکار میان؟
هر برنامه ای که قراره چندین کاربر رو کنترل کنه، این الگوریتم ها نیازش میشه.
از ربات تلگرام گرفته تا API و S3 و CDN ...
#ratelimit
@CodingLovers_OFF ❤️🔥
توضیحات و کد هر الگوریتم رو بهتون دادم، حالا وقتشه یه استفاده ای ازشون بکنیم
انتخاب کردنشون رو اصلا سخت نگیرین، بلاخره هرکدوم دارن یه کار رو انجام میدن.
خیلی ساده بخوام بگم از نظر من Token Bucket واسه همه جا جوابه.
💢 حجم ترافیک
- اگه میدونین یهو کلی ادم هجوم نمیارن ( ترافیکتون قابل پیشبینیعه )، از Leaky Bucket استفاده کنین
- اگه میدونین ممکنه حجم بالایی از افراد در یک زمان خاص ترافیک سنگینی ایجاد کنن، Token Bucket جوابه
- اگه هیچ حدسی راجب این موضوع ندارین، Sliding Window Counter مناسبه چون تعادلی بین مصرف منابع و کیفیت ارائه میده، درنتیجه خیالت راحته
🔥 دقت و امنیت
- اگه خیلی امنیت مهمه ( مثلا برای API های درگاه یا authentication ) ، بهترین گزینه Sliding Window Log هست. مثلا کلودفلر برای شرایطی که سایتتون مورد حمله قرار میگیره میاد از همچین الگوریتمی کمک میگیره، چون همینطور که بشدت امنیت بالایی داره، اطلاعات هم براتون ذخیره میکنه ( توی سورسش مشخصه - پارامتر member توی سورس )
- اگه نمیخواین سخت بگیرین، token bucket بزنین
- اگه باز هم هیچ نظری ندارین، sliding window counter جوابه
نکات
قرار نیست داخل برنامتون فقط از یه الگوریتم استفاده کنین، میتونین از چند تاش کمک بگیرین
✨️ کجاها بکار میان؟
هر برنامه ای که قراره چندین کاربر رو کنترل کنه، این الگوریتم ها نیازش میشه.
از ربات تلگرام گرفته تا API و S3 و CDN ...
- با FastAPI که راحتین، یه dependency میزنین کار حل میشه
- با django هم راحتین، خودش داره اینارو، خودتونم میتونین middleware بزنین
- با aiogram هم راحتین، یه middleware میزنین حل میشه
#ratelimit
@CodingLovers_OFF ❤️🔥
❤3🔥1
کسی میدونه چرا موقع جنگ و شرایط حساس میگن عکس از تسلیحات و چیزای دیگه پخش نکنید،
حتی وقتی با دیدن اون عکس نمیشه مکان شو فهمید
دلیلش چیه؟
حتی وقتی با دیدن اون عکس نمیشه مکان شو فهمید
دلیلش چیه؟
👍9