معماری و مقیاسپذیری
مرداد ۱۴۰۵
معماری رباتهای تلگرام با مقیاس میلیون کاربر: توزیع بار و صفهای پیام
هنگامی که یک ربات تلگرام با ترافیک ناگهانی چندصد هزار درخواست همزمان در ثانیه مواجه میشود، ساختار سنتی وبهوکهای همگام مسدود شده و تلگرام خطای 429 Too Many Requests (سقف ۳۰ پیام در ثانیه برای هر ربات) را بازمیگرداند.
۱. معماری سهلایه توزیعشده
- لایه دریافت لبه (Edge Ingestion): اسکریپتهای سرورلس کلودفلر یا Go که بلافاصله پاسخ ۲۰۰ را به تلگرام ارسال کرده و پیام را به صف منتقل میکنند.
- لایه پردازش منطق (Processing Workers): پردازندههای غیرهمزمان بر بستر Redis BullMQ یا Kafka.
- لایه ارسال مدیریتشده (Rate-Limited Dispatcher): خروجیدهندهای که سقف مجاز ۳۰ پیام در ثانیه را بر اساس الگوریتم Token Bucket مدیریت میکند.
۲. پیادهسازی Token Bucket با Redis
import { RateLimiterRedis } from 'rate-limiter-flexible';
const telegramRateLimiter = new RateLimiterRedis({
storeClient: redisClient,
keyPrefix: 'tg_send_throttle',
points: 30,
duration: 1
});
export async function sendThrottledMessage(chatId, text) {
await telegramRateLimiter.consume('global_broadcast', 1);
return await fetch(`https://api.telegram.org/bot${TOKEN}/sendMessage`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ chat_id: chatId, text: text })
});
}