Привет!
Забыл тут поделиться открытием.
Когда разрабатывал своих @ytb_cover_bot и @aiko_tiktok_download_bot решил как то предохраниться от дыдоса и спросил чатгопоты как это делают большие дяди. Он мне предложил сделать обработку запросов в очереди, используя например библиотеку Bull.
Суть такая. Создаешь бд на Redis и подключаешь очередь к редису
const videoDownloadQueue new Bull("tiktok-queue", {
redis: { host, port, password },
});Юзер отправляет сообщение и если это сообщение на обработку видео, например, вы отправляете его в редис.
videoDownloadQueue.add(task);
Как только в бд что-то появляется, бот может это сразу обработать (или не сразу, а подождав пока обработается предыдущий запрос). Тем самым можно ограничивать пропускную способность, как общую, так и для единичного пользователя (ответив ему мол, не спеши, друг).
videoDownloadQueue.process(async (job) => {
const { videoInfo, lang, chatId } = job.data;
......
})ПЛЮС, тут как раз открывается простор для масштабирования. Ты можешь спокойно слушать эту очередь вообще в другом процессе/приложении/серваке и например вынести тяжелую таску со своего VPS у которого осталось 10МБ оперативы, на другую тачку (хоть на локальный комп).
Я как-то брал пару созвонов с ментором по архитектуре и он мне как раз рассказывал про такие очереди, но я подумал чет как-то сложно, а оно как будто и не особо. Так что попробуйте!
