【问题标题】:Architecture of telegram bot for 150k users simultaneously15 万用户同时使用的电报机器人架构
【发布时间】:2023-11-30 16:36:01
【问题描述】:

我将创建一个电报机器人来同时(每秒)处理 15 万用户。

我将使用 TDLib(因为我确实想面对 Telegram Bot API 每秒约 30 条消息的限制)。

以前我一直使用 Telegram Bot Webhook。我注册了 webhook 以指向我的服务器。 我的服务器处理来自 Telegram 的请求并向用户发送消息。我的服务器上没有任何负载。最大加载速度为每秒 10 或 30 个用户。

现在我将使用 TDLib。所以通过架构进行交互。

交互1. Telegram Webhook + TDLib

它不起作用,因为在 nginx 的日志中我看到 TDLib 运行时 nginx 没有收到任何 webhook 请求。

交互2.TDLib的几个实例

它有效。每个实例都可以发送消息并获取更新。但我担心网络流量,因为每个实例都会获得所有更新。

交互 3. TDLib 的一个实例(当前选择)

TDLib 的一个实例获取所有更新并将其发送到队列(我们将其称为 in.queue)。

我将编写一个程序来处理队列in.queue中的更新。

从队列中更新的处理是创建一个响应命令并将其发布到另一个队列(out.queue)。

TDLib 实例监听 out.queue 并应用命令。


但我想知道如何在部署到 prod 之前测试我的机器人。

是否有可能以某种方式模拟这种加载(同时 15 万用户)来测试我的架构?

【问题讨论】:

  • 同时有 15 万用户?什么?无论如何,TDLib 是最好的选择,因为它在你和 Telegram 之间创建了一条直接的 TCP 隧道。我认为您应该写信给@BotSupport,因为这是一个非常前卫的案例,也许您可​​以找到解决方案。 PS:您是否尝试过使用负载均衡器的 Webhooks?
  • @MarcoBuster 感谢您的回复。我还是决定使用 TDLib。关于负载均衡器。它有助于保持用户,但通过向用户发送消息而因电报限制而失败。是的,我可以使用直接响应,但是当我想做“向每个用户发送一些消息”时,我将面临 Telegram Bot API 限制(每秒 30 条消息)。
  • 当您向许多用户发送“全局”消息时,如果时间不那么重要,您应该每隔 n 放慢速度并睡眠。拥有非常大的用户群可能需要几天时间,但这是唯一的方法。同样,如果您向 [@]BotSupport 解释您的情况,他们可能会通过删除一些 API 限制来帮助您。

标签: architecture telegram telegram-bot high-load tdlib


【解决方案1】:

您确定使用 TdLib 代替 BOT.Api 不会达到电报限制吗? 你有什么进步吗?

【讨论】: