Coding Lovers
2.03K subscribers
189 photos
16 videos
19 files
230 links
:همه شبکه های اجتماعی یکجا 🌐
Zil.ink/codinglovers

📌 تبلیغات:
@CodingLoversAds

:گروه 🍻
@CodingLovers_GP

:حرفی سخنی 🧑‍💻
@Amir_OfficiaI

:ثبت نمونه کار 🪄
@CodingLovers_result
Download Telegram
خب دیگه دوباره حتی جمینی هم مارو تحریم کرد 😂
🤣12👎1
سِری پست های 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 🔥
11😁1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Leaky Bucket
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواست‌ها (آب) به سطل اضافه می‌شون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری می‌کنن.

از یه سایت بخوام مثال بزنم،
فرض کن کاربر ۱۰۰ تا درخواست همزمان میده، ولی تو با این الگوریتم، تو ۱۰ تا ۱۰ تا جوابشو میدی
✨️ موارد استفاده
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفه‌ای بین‌شون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.

💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستم‌تون قدرت پردازش‌عه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )

#ratelimit
@CodingLovers_OFF ❤️‍🔥
👍63
Coding Lovers
کدِ الگوریتم‌ش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
leaky_bucket_algorithm.py
1.7 KB
اینم از سورس‌عه الگوریتم و مثال
لذت‌شو ببرین 🔥

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

#ratelimit
@CodingLovers_OFF
10🤣2
والا بقران وسط جنگ وضعیت اینترنتم بهتر بود
این چه وضعیتیه
👍17🤣4
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Token Bucket
توکن‌ها با نرخ ثابتی تولید و توی یه سطل ذخیره می‌شون. هر درخواست یک توکن مصرف می‌کنه. وقتی توکن ها تموم بشن، درخواست هم رد میشه.
پیچیدگی خاصی نداره که بخوام توضیح بیشتری بدم :/

یجورایی برخلاف الگوریتم قبلی رفتار میکنه، اونجا سطل با درخواست پر میشد، اینجا خالی میشه.
✨️ موارد استفاده
بدرد API هایی میخوره که میخوان جلوی اسپم و بروت فورس رو بگیرن. تخصصی تر بخوام بگم، برای مدیریت افزایش ناگهانی ترافیک بدرد میخوره.
مثلا سایت قابلیت سرچ داره، این الگوریتم کمکت میکنه تا از سرچ های تند تند و پشت هم کاربرا جلوگیری کنی.

خلاصه بهترین الگوریتم برای گذاشتن محدودیت هایی مثل Request per minute هست.
💢 ضعف
حقیقتا شخصا ضعفی توش ندیدم :)

#ratelimit
@CodingLovers_OFF ❤️‍🔥
10🔥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 ❤️‍🔥
6👍2🔥1😢1
چرا هرچی بیشتر فعالیت کردم تعداد کمتر شد
داستانیه؟
20
عشقای من کانال یوتوب کدینگ لاورز رو دریابید
چیزی نمونده ۴۰۰۰ تا بشیم
کارهای خفن زیادی در پیش رو هست 👨‍💻

📱 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
یه نسخه کم دقت تر از الگوریتم اولی‌عه. همونکار رو به همون شکل انجام میده، با دقت کمتر، و مصرف مموری کمتر.

کد هاشونو میزارم، و بعد یه پست میزارم که بگم هرکدوم رو کجا استفاده کنید. اینا بیشتر داخل API ها استفاده میشن، اما داخل ربات های تلگرامی هم خالی از لطف نیستن.
#ratelimit
@CodingLovers_OFF ❤️‍🔥
4🔥1
log.py
2.6 KB
اینم از کد هاشون

#ratelimit
@CodingLovers_OFF ❤️‍🔥
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 ...

- با FastAPI که راحتین، یه dependency میزنین کار حل میشه
- با django هم راحتین، خودش داره اینارو، خودتونم میتونین middleware بزنین
- با aiogram هم راحتین، یه middleware میزنین حل میشه


#ratelimit
@CodingLovers_OFF ❤️‍🔥
3🔥1
بنظرم هوش مصنوعی لذت برنامه نویسی رو گرفته :(
👍38😁4
کسی میدونه چرا موقع جنگ و شرایط حساس میگن عکس از تسلیحات و چیزای دیگه پخش نکنید،
حتی وقتی با دیدن اون عکس نمیشه مکان شو فهمید

دلیلش چیه؟
👍9