Brief #05 · Backend

Distributed Rate Limiter

Hard⏱ 14-20 ঘণ্টাশীঘ্রই

এমন একটা rate limiter, যেটা API দশটা pod এ চললেও ন্যায্য থাকে, আর Redis উত্তর না দিলে নিরাপদে ব্যর্থ হয়।

Outline free · tracking সহ বানাতে Pro লাগবে

DBriefTeam এর পক্ষ থেকে

প্রতিটা customer আমাদের public API মিনিটে ১০০ বার ডাকতে পারে। Limit টা থাকে প্রতিটা pod এর memory তে, তাই দশটা pod মানে একজন আসলে পায় ১,০০০। গত সপ্তাহে একটা scraper আমাদের বসিয়ে দিয়েছে। Limit টা global, নির্ভুল আর দ্রুত করো।

যা বানাবে

  1. 1Redis এ token-bucket limiter, Lua script দিয়ে, যাতে দেখা আর নেওয়া একসাথে atomic হয়।
  2. 2Middleware, যেটা Retry-After আর rate-limit header সহ 429 দেয়।
  3. 3একটা local Kubernetes cluster এ (kind বা minikube) তিনটা replica deploy করো।
  4. 4একটা load test, যেটা প্রমাণ করে সব pod মিলিয়ে limit ঠিক থাকছে।
  5. 5Redis পাওয়া না গেলে fail-open নাকি fail-closed, বেছে নিয়ে বানাও।

ধাপে ধাপে walkthrough

Walkthrough শীঘ্রই আসছে

এই project এর ধাপে ধাপে walkthrough, প্রতিটা ধাপে আসল output সহ, এখনো লেখা হচ্ছে। ততক্ষণ brief পড়ে নিজে চেষ্টা করতে পারো; walkthrough তৈরি হলে tracking চালু হবে।

শেষ হবে যখন

  • তিনটা pod মিলিয়ে একজন client মিনিটে ১০০টা request পায়, দুই-একটা কম বেশি।
  • Limiter p95 এ ২ ms এর কম যোগ করে।
  • Redis বন্ধ করলে তোমার বেছে নেওয়া failure mode চালু হয়, আর সেটা লেখা আছে।
  • Kubernetes manifest আর README, যাতে এক command এ সব চালানো যায়।

আরো এগোতে চাইলে

  • Plan অনুযায়ী (free, pro) আলাদা limit, config থেকে পড়া।
  • Token bucket আর sliding window এর তুলনা graph সহ।

দেখিয়ে দাও