The MEGATOPIC: public good, or public menace?

Моя рекомендация — оценить продукты для чата с целью их бесшовной интеграции.

Ephemera не подходит для Discourse.

3 лайка

Здесь нужно быть очень осторожным. Возможно, стоит держать одну тему «чат» за раз и безжалостно удалять старые, так как за каждую продолжающую существовать мега-тему сервер платит серьёзную цену в плане производительности, и эта цена растёт с каждым просмотром страницы.

Лучше всего интегрировать настоящий чат-инструмент, см.

3 лайка

Согласен на 100%. Иногда они добавляют ценность сообществу, но не в такой степени, чтобы это требовало изменений в коде, на мой взгляд.

3 лайка

Не могли бы вы немного подробнее рассказать об этом снижении производительности? Это касается закрытых и архивированных тем? Закрытие тем при достижении 10 000 сообщений — это нормально, но их удаление — совсем другая история.

Наше сообщество обожает Discourse и уже более 15 лет существует в формате форума. Они не будут использовать чат-комнаты и крайне негативно отнесутся к удалению старых тем. Если существование этих тем действительно вызовет серьёзные и растущие проблемы с производительностью, мне, возможно, придётся либо превращать их в статические страницы, либо мигрировать на другую платформу.

Я понимаю, что наше сообщество не совсем вписывается в то, как вы представляете использование Discourse, но это то сообщество, за которое я отвечаю, и есть изменения, которые я не могу навязать. На самом деле, наше сообщество никогда не было сильнее, чем сейчас, работая на Discourse. Мне бы очень не хотелось переходить на другую платформу, когда все так довольны нашей текущей настройкой.

8 лайков

Мегатемы должны быть в основном скрыты — даже если они закрыты и/или архивированы, чем больше пользователей заходит в мегатему, тем хуже работает ваш сервер. В идеале мегатемы следует удалять, чтобы в любой момент времени была активна только одна из них? Это моя рекомендация. Чем больше мегатем у вас есть, тем больший риск вы принимаете.

Если у вас есть возможность вложить значительные средства в решение этой проблемы, вы можете значительно увеличить мощность сервера и поддерживать больше мегатем, но это всё равно скажется на средней производительности для всех тем.

4 лайка

Даже когда тема закрыта, она продолжает генерировать данные, трафик и нагрузку.

Помните, что позиция чтения каждого пользователя фиксируется для каждой темы. Каждый пост можно лайкнуть, взаимодействие с мега-темами остаётся возможным даже после их закрытия, не говоря уже о том, сколько шума это может создавать в результатах вашего поиска.

2 лайка

Это всё ещё не объясняет, почему именно мега-темы вызывают проблемы. Почему одна тема на 10 000 постов хуже, чем десять тем по 1 000 постов? Во втором случае общее количество постов, которые могут быть отмечены лайком или найдены через поиск, остаётся тем же, но позиций чтения и тем для поиска становится в десять раз больше. Исходя только из вашего объяснения, можно сделать вывод, что большее количество небольших тем создаёт больше проблем. Значит, должно быть что-то ещё.

4 лайка

Потому что вы загружаете только одну тему за раз. Вы можете без проблем брать по одной теме из 1000 <вставьте сюда что-то лёгкое> за раз, но взять сразу 10 000 — гораздо сложнее.

2 лайка

Меня, однако, интересуют детали. По умолчанию загружается лишь определённое количество сообщений до прокрутки, так что это явно не связано с количеством видимых сообщений. Это связано с хронологической лентой? С кратким содержанием темы? Или в целом с различными линейными или более чем линейными алгоритмами, зависящими от общего числа сообщений в теме?

Меня не очень интересуют мега-темы, в зависимости от того, что вы считаете «мега». В разделе, который я чаще всего посещаю в используемом сообществе, тема с наибольшим количеством сообщений содержит около 3,6 тыс. сообщений, но десятая по величине имеет всего 600, а двадцать пятая — лишь 300 сообщений. Сейчас меня интересует это скорее с технической точки зрения.

6 лайков

Вот запрос к Data Explorer, который я написал, чтобы попытаться ответить на ваш вопрос. Вы можете попробовать его с разными темами и смещениями.

-- [params]
-- int :topic_id = 107216
-- int :offset = 10000

SELECT "posts"."id" FROM "posts" 
WHERE ("posts"."deleted_at" IS NULL) 
AND "posts"."topic_id" = :topic_id
AND "posts"."post_type" IN (1,2,3) ORDER BY "posts"."sort_order" ASC LIMIT 20 
OFFSET :offset

Вот пример обычной по размеру темы и огромной темы:

Примерное время: 3,4 мс
  ->  Index Scan using index_posts_on_topic_id_and_sort_order on posts  (cost=0.43..1925.22 rows=477 width=8)

Примерное время: 353,9 мс, 739,6 мс (время варьируется в зависимости от кэширования базы данных)
  ->  Index Scan using index_posts_on_topic_id_and_sort_order on posts  (cost=0.43..605155.88 rows=161255 width=8)

Кажется, я видел времена выполнения больше 750 мс.

Вот медианное время и время 99-го процентиля. Медианное время удивительно хорошее, но особенность медианы в том, что нельзя сказать, насколько хуже ситуация на 60-м процентиле по сравнению с медианным случаем.

Вот другой сервер (на нём огромное количество категорий, что тоже сказывается на производительности, поэтому сравнение не совсем корректно без учёта мега-тем), но видно, что медианная производительность вдвое лучше, а наихудший случай также значительно улучшен:

11 лайков

Я тоже, просто из любопытства.

Я понимаю, что навигация в мега-теме может работать медленно, судя по этому объяснению:

Однако я не понимаю, как одна или несколько мега-тем могут влиять на навигацию на других страницах форума, например, на список тем. :red_question_mark:

Загружая сервер большим количеством данных. Каждая мега-загрузка эквивалентна штрафу за производительность в 100 раз! Посмотрите пост прямо над вашим.

5 лайков

Привет,

Форум, который я сейчас импортирую в Discourse, содержит множество мега-тем:


(и посты ещё не полностью импортированы!)

Поскольку мега-темы плохо работают в Discourse, что мне делать на практике? (Я планирую в будущем предложить сообществу чат, возможно, Discord, но хочу знать, что делать с текущими темами).
Удалить их?
Разбить и закрыть?
Если я буду их разбивать, сколько сообщений должно быть в каждой теме? Достаточно ли значения по умолчанию 10000, или вы советуете уменьшить его?

3 лайка

Разбиение на чанки по 10 тысяч должно быть достаточно.

8 лайков

Кроме того, большинство из них выглядят нормально. Настоящие убытки начинаются с 10 тысяч, а то, что показано на скриншоте, значительно меньше этой суммы.

6 лайков

Какая последняя информация о влиянии на производительность mega topic? Наш пост-пандемический COVID-тема приближается к 10 тысячам сообщений, и мы анализируем возможные недавние замедления.

4 лайка

Я не знаю, какими «должны» быть показатели сервера, но могу поделиться нашими данными для сообщества с большим количеством мега-тем. В настоящее время у нас 15 закрытых тем с 10 тыс. сообщений и более 50 открытых тем с 2 тыс.+ сообщений. Большая часть активности на форуме происходит в относительно небольшом количестве очень активных тем в любой момент времени.

В данный момент мы работаем на сервере DigitalOcean с 4 виртуальными процессорами, 8 ГБ оперативной памяти и 160 ГБ дискового пространства, что стоит 40 долларов в месяц. Возможно, раз в несколько месяцев некоторые пользователи будут очень ненадолго видеть сообщение «экстремальная нагрузка». Это происходит только тогда, когда происходит какое-то живое событие и множество пользователей начинают публиковать сообщения одновременно — например, в среднем несколько сообщений в минуту в одной теме в течение часа или двух.

Во все остальные моменты производительность стабильна и без проблем. В настоящее время мы подойдем к необходимости увеличения дискового пространства задолго до того, как понадобится апгрейд чего-либо еще.

6 лайков

Это неплохое число, 2 тысячи сообщений — не проблема, несколько десятков тем по 10 тысяч+ сообщений, вероятно, тоже нормально (особенно если они закрыты). Опасная зона наступает, когда у вас много активных мега-тем. Я бы определил «много» как больше нескольких десятков.

10 лайков

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

Inderes — финская компания, предоставляющая финансовый анализ для фондового рынка. Недавно они запустили свое сообщество на платформе Discourse, и это стало огромным успехом, учитывая регион и нишу.

Обсуждения в основном организованы по акциям или инвестиционным инструментам. Например, $AAPL или $TSLA. Всего за два года или около того многие из этих тем приближаются к отметке в 10 тысяч сообщений. Это фантастическое подтверждение концепции Discourse (живое сообщество, созданное с нуля), но также подчеркивает проблему мега-тем.

4 лайка

Если ничего другого, можно разбить его по годам. Это описано в первом посте. Мега-темы могут работать какое-то время, но если их слишком много, они в конечном итоге заставят ваш сайт рухнуть.

(Кроме того, поиск становится кошмаром, когда в одной «теме» десятки тысяч сообщений и т. д. — по сути, вы построили чат-комнату.)

5 лайков