Обработка RSS-ленты может занимать 20 минут и более

Привет! Во-первых, огромное спасибо за новый административный интерфейс опроса RSS. Это действительно меняет всё!

У нас есть сайт с десятками RSS-лент. Я заметил в Sidekiq, что некоторые задания для отдельных лент могут занимать двадцать минут и более. Из-за этого очередь легко забивается.

Есть настройка RSS polling feed request timeout, но дело не в ней. Сама RSS-лента доступна быстро и загружается оперативно (по крайней мере, когда я пробую открыть её в браузере в тот момент, когда Sidekiq испытывает трудности с той же лентой). Проблема, похоже, в том, что некоторые RSS-ленты содержат все эпизоды подкаста (а не только 10–15 последних), и Discourse, судя по всему, обрабатывает все эти записи, даже если эпизоды уже скачаны и не изменились. По сути, Sidekiq может быть загружен наполовину или более из-за RSS-лент, которые не приносят никаких изменений и не содержат новых эпизодов.

В идеале Discourse должен быстро определять отсутствие изменений и переходить к следующему.

Опционально, можно было бы добавить настройку, ограничивающую чтение первыми NN записями ленты.

Или, как минимум, установить временной лимит для завершения опроса, если он не завершится за NN минут (5 минут, или максимум 10).

Мне интересно, что именно происходит, когда обработка ленты занимает более 10 минут, а Sidekiq загружен на 100%. Что именно может занимать столько времени и быть таким тяжёлым в обработке?

Как вы думаете, можно ли улучшить это в текущем плагине?

2 лайка

Я с удовольствием помогу с этим. Не могли бы вы поделиться URL вашего фида, чтобы я мог лучше протестировать его локально? (Если хотите сохранить конфиденциальность, напишите мне в личные сообщения)

2 лайка

Большое спасибо @zogstrip за быстрый ответ! RSS-ленты публичны и, по сути, рекомендуются всем, кто любит слушать независимые подкасты и радиопрограммы на испанском языке. :wink:

Список рабочих RSS-лент, которые мы временно отключили, чтобы дать серверу передышку, можно найти здесь: Limpieza de RSS feeds - nº 3 por icaria36 - Sobre Podkasts - Podkasts

Многие из них используют WordPress, и мы можем попросить их изменить количество записей в RSS. Но многие используют iVoox, популярную платформу, по крайней мере, в испаноязычных странах. Они выгружают все эпизоды программы в свой RSS, это (относительно) крупная компания, и даже найти ссылку «Свяжитесь с нами», которая привела бы к живому человеку, бывает трудно. Так что мы зашли в тупик. Для вашего теста я бы начал с добавления лент iVoox, а затем, если захотите, мы могли бы продолжить с другими.

P.S. Можно начать с одной, необычно длинной: <![CDATA[Es lo que hay - Lliure directe]]>

1 лайк

у меня есть пара PR в работе, которые должны значительно улучшить скорость опроса/импорта больших фидов

2 лайка

О М Г !!!

Огромное спасибо! Вы работали быстро и точно.

Я очень рад нашему маленькому вкладу в решение этой проблемы. Даже если наш случай является довольно редким (как я полагаю?), решение в небольшой степени улучшит производительность практически любого экземпляра Discourse, использующего этот плагин.

Я вижу, что патчи были приняты. Это означает, что мы можем получить их, обновив Discourse прямо сейчас?

2 лайка

Статус «Merged» означает, что изменения были внесены в ветку main. Как правило, форумы не отслеживают основную ветку main, а следят за веткой latest. Это значит, что после слияния вам всё равно придётся подождать, пока автоматические тесты завершатся и будут успешно пройдены.

Если вы посмотрите на страницу Commits · discourse/discourse · GitHub, вы увидите, что это только что произошло с коммитами пользователя zogstrip (там стоит зелёная галочка, тогда как у коммита выше всё ещё отображается коричневая точка).

Теперь эти коммиты также можно увидеть, если посмотреть на ветку latest: Commits · discourse/discourse · GitHub

Таким образом, если вы отслеживаете ветку latest (что форумы делают по умолчанию), вы можете обновить систему прямо сейчас, чтобы получить эти коммиты.

2 лайка

Я повторно включил RSS-ленты, и первый цикл обработки RSS в основном завершился. Появилось 86 новых записей, многие из которых были опубликованы несколько дней назад. Это означает, что несколько лент не смогли завершить обработку ранее, а теперь это произошло. Отлично!

Очень длинные ленты по-прежнему могут занимать задачу длительное время, но я видел лишь три случая, когда обработка превышала 10 минут. Эта лента всё ещё обрабатывается уже более часа… Но она действительно очень длинная, так что, возможно, это оправдано? С другой стороны, одна лента, занимающая одну задачу так долго, сама по себе представляет проблему. Может быть, это связано с тем, что это первый полный импорт за долгое время? Я проверю снова в следующем цикле RSS (он настроен на 180 минут).

1 лайк

Возможно, эта задача, которая выполняется в течение часа, зависла на чём-то, связанном не с импортом? Я только что заметил, что, по всей видимости, все записи из этой ленты были импортированы, включая изображения и всё остальное. По крайней мере, с точки зрения пользователя, импорт кажется завершённым. Возможно, это исключение. Я отчитаюсь снова после нескольких дополнительных циклов RSS.

Классно :+1:

Эти ленты «новые» или они уже импортировались ранее? Я не слишком много работал над улучшением скорости начального импорта, так как это в значительной степени ограничено тем, насколько быстро мы можем создавать новые темы.

Они все уже импортированы.

Хорошо, мы изменили частоту опроса на 10 минут для тестирования (позже мы вернемся к 180 минутам, этого нам достаточно). После исправления, предложенного zogstrip, большинство фидов обрабатываются в течение минуты или меньше. Есть лишь пара очень длинных фидов, обработка которых может занимать 2 минуты и более, но никогда (по моим наблюдениям) не превышает 5 минут. Эта RSS-лента — единственная, которая стабильно занимает 4 минуты и более, но она чрезвычайно длинная, поэтому я не уверен, что в этом случае можно сделать что-то существенное. Даже браузеру нужно время, чтобы просто отобразить её. (К тому же мы можем удалить её по не связанным с этим причинам.)

То, что весь процесс опроса занимает не более 5–6 минут, просто поразительно. Огромный прогресс. Для меня этот отчет можно считать закрытым. Огромное спасибо еще раз, @zogstrip.

1 лайк

Киану Ривз: Моё удовольствие

2 лайка