Thuta Learning
ရှာဖွေရန်
Redis
IntermediateData & Databasesbeginner

Rate Limiting

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Rate Limiting concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ Redis command/code ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် မှန်ကန်စွာအသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Rate limit ကို user/IP/API key နှင့် time window အလိုက် counter ထားနိုင်ပါတယ်။ `INCR` နဲ့ `EXPIRE` သီးခြားလုပ်ရင် crash gap ရှိလို့ Lua script ဖြင့် atomic လုပ်ရပါတယ်။ Fixed window ကရိုးရှင်းသော်လည်း boundary burst ရှိပြီး sliding window/log သို့ token bucket ကပိုချောမွေ့ပေမယ့် cost ပိုများပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Login endpoint ကို user+IP အလိုက် 60 seconds တွင် 10 requests ကန့်သတ်မယ်။ Script က counter တိုး၊ first request တွင် expiry ပေးပြီး count/TTL ပြန်ပေးမယ်။ API response တွင် limit, remaining နဲ့ retry-after headers ထည့်မယ်။

အတူတူ စမ်းရေးကြည့်မယ်

lua
local count = redis.call('INCR', KEYS[1])
if count == 1 then redis.call('EXPIRE', KEYS[1], ARGV[1]) end
local ttl = redis.call('TTL', KEYS[1])
return {count, ttl}

-- EVALSHA <sha> 1 rl:login:user42:iphash 60
You should see
Request count နဲ့ remaining window TTL ကို atomic ရမည်။

၅ မိနစ် စမ်းကြည့်

Anonymous search အတွက် IP limiter နဲ့ authenticated export အတွက် user limiter policy နှစ်ခုရေးပါ။

သတိလေးတစ်ချက်

Proxy header ကို blind trust လုပ်ပြီး IP key သတ်မှတ်ရင် attacker က header ပြောင်း၍ limiter ရှောင်နိုင်ပါတယ်။

Redis — Rate LimitingRedis

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Proxy header ကို blind trust လုပ်ပြီး IP key သတ်မှတ်ရင် attacker က header ပြောင်း၍ limiter ရှောင်နိုင်ပါတယ်။
  • နမူနာ command ကို production Redis ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test instance နဲ့ recoverable data ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Anonymous search အတွက် IP limiter နဲ့ authenticated export အတွက် user limiter policy နှစ်ခုရေးပါ။

You'll know it worked when: Request count နဲ့ remaining window TTL ကို atomic ရမည်။

Rate Limiting | Thuta Learning