Моя рекомендация — оценить продукты для чата с целью их бесшовной интеграции.
Ephemera не подходит для Discourse.
Моя рекомендация — оценить продукты для чата с целью их бесшовной интеграции.
Ephemera не подходит для Discourse.
Здесь нужно быть очень осторожным. Возможно, стоит держать одну тему «чат» за раз и безжалостно удалять старые, так как за каждую продолжающую существовать мега-тему сервер платит серьёзную цену в плане производительности, и эта цена растёт с каждым просмотром страницы.
Лучше всего интегрировать настоящий чат-инструмент, см.
Согласен на 100%. Иногда они добавляют ценность сообществу, но не в такой степени, чтобы это требовало изменений в коде, на мой взгляд.
Не могли бы вы немного подробнее рассказать об этом снижении производительности? Это касается закрытых и архивированных тем? Закрытие тем при достижении 10 000 сообщений — это нормально, но их удаление — совсем другая история.
Наше сообщество обожает Discourse и уже более 15 лет существует в формате форума. Они не будут использовать чат-комнаты и крайне негативно отнесутся к удалению старых тем. Если существование этих тем действительно вызовет серьёзные и растущие проблемы с производительностью, мне, возможно, придётся либо превращать их в статические страницы, либо мигрировать на другую платформу.
Я понимаю, что наше сообщество не совсем вписывается в то, как вы представляете использование Discourse, но это то сообщество, за которое я отвечаю, и есть изменения, которые я не могу навязать. На самом деле, наше сообщество никогда не было сильнее, чем сейчас, работая на Discourse. Мне бы очень не хотелось переходить на другую платформу, когда все так довольны нашей текущей настройкой.
Мегатемы должны быть в основном скрыты — даже если они закрыты и/или архивированы, чем больше пользователей заходит в мегатему, тем хуже работает ваш сервер. В идеале мегатемы следует удалять, чтобы в любой момент времени была активна только одна из них? Это моя рекомендация. Чем больше мегатем у вас есть, тем больший риск вы принимаете.
Если у вас есть возможность вложить значительные средства в решение этой проблемы, вы можете значительно увеличить мощность сервера и поддерживать больше мегатем, но это всё равно скажется на средней производительности для всех тем.
Даже когда тема закрыта, она продолжает генерировать данные, трафик и нагрузку.
Помните, что позиция чтения каждого пользователя фиксируется для каждой темы. Каждый пост можно лайкнуть, взаимодействие с мега-темами остаётся возможным даже после их закрытия, не говоря уже о том, сколько шума это может создавать в результатах вашего поиска.
Это всё ещё не объясняет, почему именно мега-темы вызывают проблемы. Почему одна тема на 10 000 постов хуже, чем десять тем по 1 000 постов? Во втором случае общее количество постов, которые могут быть отмечены лайком или найдены через поиск, остаётся тем же, но позиций чтения и тем для поиска становится в десять раз больше. Исходя только из вашего объяснения, можно сделать вывод, что большее количество небольших тем создаёт больше проблем. Значит, должно быть что-то ещё.
Потому что вы загружаете только одну тему за раз. Вы можете без проблем брать по одной теме из 1000 <вставьте сюда что-то лёгкое> за раз, но взять сразу 10 000 — гораздо сложнее.
Меня, однако, интересуют детали. По умолчанию загружается лишь определённое количество сообщений до прокрутки, так что это явно не связано с количеством видимых сообщений. Это связано с хронологической лентой? С кратким содержанием темы? Или в целом с различными линейными или более чем линейными алгоритмами, зависящими от общего числа сообщений в теме?
Меня не очень интересуют мега-темы, в зависимости от того, что вы считаете «мега». В разделе, который я чаще всего посещаю в используемом сообществе, тема с наибольшим количеством сообщений содержит около 3,6 тыс. сообщений, но десятая по величине имеет всего 600, а двадцать пятая — лишь 300 сообщений. Сейчас меня интересует это скорее с технической точки зрения.
Вот запрос к 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-м процентиле по сравнению с медианным случаем.
Вот другой сервер (на нём огромное количество категорий, что тоже сказывается на производительности, поэтому сравнение не совсем корректно без учёта мега-тем), но видно, что медианная производительность вдвое лучше, а наихудший случай также значительно улучшен:
Я тоже, просто из любопытства.
Я понимаю, что навигация в мега-теме может работать медленно, судя по этому объяснению:
Однако я не понимаю, как одна или несколько мега-тем могут влиять на навигацию на других страницах форума, например, на список тем. ![]()
Загружая сервер большим количеством данных. Каждая мега-загрузка эквивалентна штрафу за производительность в 100 раз! Посмотрите пост прямо над вашим.
Привет,
Форум, который я сейчас импортирую в Discourse, содержит множество мега-тем:
Поскольку мега-темы плохо работают в Discourse, что мне делать на практике? (Я планирую в будущем предложить сообществу чат, возможно, Discord, но хочу знать, что делать с текущими темами).
Удалить их?
Разбить и закрыть?
Если я буду их разбивать, сколько сообщений должно быть в каждой теме? Достаточно ли значения по умолчанию 10000, или вы советуете уменьшить его?
Разбиение на чанки по 10 тысяч должно быть достаточно.
Кроме того, большинство из них выглядят нормально. Настоящие убытки начинаются с 10 тысяч, а то, что показано на скриншоте, значительно меньше этой суммы.
Какая последняя информация о влиянии на производительность mega topic? Наш пост-пандемический COVID-тема приближается к 10 тысячам сообщений, и мы анализируем возможные недавние замедления.
Я не знаю, какими «должны» быть показатели сервера, но могу поделиться нашими данными для сообщества с большим количеством мега-тем. В настоящее время у нас 15 закрытых тем с 10 тыс. сообщений и более 50 открытых тем с 2 тыс.+ сообщений. Большая часть активности на форуме происходит в относительно небольшом количестве очень активных тем в любой момент времени.
В данный момент мы работаем на сервере DigitalOcean с 4 виртуальными процессорами, 8 ГБ оперативной памяти и 160 ГБ дискового пространства, что стоит 40 долларов в месяц. Возможно, раз в несколько месяцев некоторые пользователи будут очень ненадолго видеть сообщение «экстремальная нагрузка». Это происходит только тогда, когда происходит какое-то живое событие и множество пользователей начинают публиковать сообщения одновременно — например, в среднем несколько сообщений в минуту в одной теме в течение часа или двух.
Во все остальные моменты производительность стабильна и без проблем. В настоящее время мы подойдем к необходимости увеличения дискового пространства задолго до того, как понадобится апгрейд чего-либо еще.
Это неплохое число, 2 тысячи сообщений — не проблема, несколько десятков тем по 10 тысяч+ сообщений, вероятно, тоже нормально (особенно если они закрыты). Опасная зона наступает, когда у вас много активных мега-тем. Я бы определил «много» как больше нескольких десятков.
Хотя мега-темы обычно не являются проблемой здесь, в Meta, для многих сообществ они кажутся естественным способом организации обсуждений. Иными словами, в дискуссии нет естественной точки разрыва.
Inderes — финская компания, предоставляющая финансовый анализ для фондового рынка. Недавно они запустили свое сообщество на платформе Discourse, и это стало огромным успехом, учитывая регион и нишу.
Обсуждения в основном организованы по акциям или инвестиционным инструментам. Например, $AAPL или $TSLA. Всего за два года или около того многие из этих тем приближаются к отметке в 10 тысяч сообщений. Это фантастическое подтверждение концепции Discourse (живое сообщество, созданное с нуля), но также подчеркивает проблему мега-тем.
Если ничего другого, можно разбить его по годам. Это описано в первом посте. Мега-темы могут работать какое-то время, но если их слишком много, они в конечном итоге заставят ваш сайт рухнуть.
(Кроме того, поиск становится кошмаром, когда в одной «теме» десятки тысяч сообщений и т. д. — по сути, вы построили чат-комнату.)