بازگشت به لیست مقالات
معماری و مقیاس‌پذیری

معماری ربات‌های تلگرام با مقیاس میلیون کاربر: توزیع بار و صف‌های پیام

هنگامی که یک ربات تلگرام با ترافیک ناگهانی چندصد هزار درخواست همزمان در ثانیه مواجه می‌شود، ساختار سنتی وب‌هوک‌های همگام مسدود شده و تلگرام خطای 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 })
  });
}