78

נשאלתי על Rate Limiter ב-3 ראיונות שונים — הנה הגישה שעבדה

DA
דן אברהםמשתמש דמו
2676 צפיות·לפני כחודשיים

חצי שנה האחרונה עברתי כמה תהליכי גיוס ו-Rate Limiter עלה ב-3 מהם. החלטתי לתעד את הגישה שהכי עבדה.

למה שואלים דווקא את זה?
כי הוא ריאלי, אפשר לסיים אותו ב-45 דקות, ויש בו המון tradeoffs אמיתיים שמראים איך אתה חושב.


שלב 1 — Clarify requirements (2-3 דקות, לא לדלג)

  • API-level או user-level limiting?
  • Distributed system או single node?
  • Hard block (429) או soft degrade?
  • כמה latency overhead מותר?

שלב 2 — הצג אלגוריתמים, בחר עם הסבר

  • Token Bucket — טוב ל-burst, קל לממש, אבל לא precise
  • Sliding Window Log — מדויק, אבל memory-heavy בעומסים גבוהים
  • Fixed Window Counter — הפשוט ביותר, יש לו edge case בגבול ה-window
  • Sliding Window Counter — האמצע הזהב, זה מה שאני בוחר ומסביר למה

שלב 3 — ב-distributed setup

  • Redis עם INCR + EXPIRE: קל ומהיר
  • Race condition? → Lua script ב-Redis (atomic)
  • מה קורה אם Redis נופל? Fail open / fail closed? חשוב לדון ב-tradeoff

שלב 4 — איפה רוב האנשים נכשלים
שוכחים לדבר על consistency ב-multi-region. אם יש לך 3 regions, האם ה-limit הוא global או per-region? אין תשובה אחת, אבל הדיון עצמו מרשים.


מוזמנים להוסיף / לתקן בתגובות.

תגובות

(5)
29
RO
רון קפלןמשתמש דמו·לפני כחודשיים

מעולה. תוספת חשובה: Fixed Window edge case — בקשות בסוף window X + תחילת window X+1 יכולות יחד לחרוג מה-limit. זה לא bug theoretic, ראיתי את זה בפרודקשן.

22
GA
גל מורמשתמש דמו·לפני כחודשיים

השתמשתי בגישה הזו ממש בשבוע שעבר. הנקודה על fail open/closed הייתה נושא דיון של 10 דקות שלם — הם רצו לראות שאתה מבין שאין תשובה 'נכונה'.

14
YO
יוסי דבמשתמש דמו·לפני כחודשיים

שאלה — כשמדברים על Redis, איך מתמודדים עם ה-latency overhead שנוסף לכל request? בעיקר אם הlimiter יושב על API gateway עם latency SLA קפדני.

11
DA
דן אברהםמשתמש דמו·לפני כחודשיים

@yossi_dev שאלה טובה — בדרך כלל pipeline את הcall ל-Redis ביחד עם הrouting עצמו, לא sequential. גם caching local per-instance מקטין roundtrips.

8
TA
טל אדרמשתמש דמו·לפני כחודשיים

אפשר להוסיף circuit breaker כ-complement — לא rate limiting בדיוק, אבל מושג שמגיע לפעמים כfollow-up question.

הוסף תגובה

היכנס כדי להגיב