1. Введение сообщества:
Сообщество Rice Cake Mom, как платформа для приема пользователей WeChat Rice Cake Mom, обслуживает более миллиона пользователей. Предоставление научных услуг для родителей. Сообщество в основном включает в себя внимание, рекомендации, открытия, поиск и родительские знания. Пользователи могут публиковать сообщения, участвовать в темах, отмечаться, комментировать, ставить лайки, добавлять в избранное и следить за новостями в сообществе.
2. Трудности реализации сообщества
- Реализация фида, как обеспечить высокий параллелизм и низкую задержку
- Различные статистические данные при высоком уровне параллелизма. Страница имеет количество прочитанных постов, комментариев, лайков, поклонников, подписчиков и т. д.
- Различная сортировка списка статей на вкладке запроса пагинации
3, план реализации сообщества
总体架构图如下:
3.1 Введение корма
- лента: каждое сообщение в ленте — это лента, сообщение в кругу друзей — это лента, а Weibo в Weibo — это лента.
- Feed Stream: поток информации, который постоянно обновляется и предоставляется пользователю. Круг друзей каждого, страницы подписчиков Weibo и т. д. — все это поток новостей.
- Временная шкала: временная шкала — это тип ленты новостей, Weibo и Moments — потоки ленты типа хронологии.
- Лента подписчиков сообщества Rice Cake Mom состоит из постов, сделанных подписчиками.
3.2 Режим реализации потока потока
3.2.1 Режим вытягивания
А. Опубликовать сообщение просто.А публикует сообщение и нужно только сохранить его в таблице сообщений.
B. Процесс отмены подписки прост: A отменяет подписку на B: на данный момент вам нужно только удалить B из списка подписчиков A и удалить A из списка поклонников B.
в) A сложно получить фид-поток: сначала он получает всех подписчиков A, а затем получает и сортирует посты, опубликованные этими пользователями, и выгружает соответствующую страницу постов.
-
преимущество:
1、存储结构简单,存储量较小,feed数据只存一份 2、关注、发布feed流程简单,容易理解,适合快速开发。
-
недостаток:
1、获取用户feed流过程复杂,需多次查询 2、不适合关注人较多的情况下的高并发查询
3.2.2 Push-режим
Когда пользователь инициирует поведение (например, публикует сообщение), его собственное поведение записывается в таблицу поведения, которая также соответствует таблице поклонников пользователя, и для каждого поклонника вставляется канал. Чтобы прочитать поток новостей, поклонникам нужно только прочитать поток новостей и отсортировать его.
-
преимущество
拉取feed流 业务流程简单,查询性能高
-
недостаток:
1、feed数据存储多份,尤其大V粉丝比较多的情况下,严重消耗存储资源 2、关注取消、发布feed 业务流程变复杂 3、feed可能延迟
3.2.3 Комбинация двухтактных режимов
Пользователей с большим количеством поклонников называют большими Vs. Когда обычный пользователь публикует ленту, применяется режим push. После того, как офлайн-пользователи подключаются к сети, они регулярно извлекают фиды, а фон синхронизирует большие V-фиды с потоком фида пользователя, чтобы выполнять динамические извлечения и отправки. Этот режим позволяет избежать быстрого расширения хранилища потоков фидов, когда крупные пользователи V публикуют фиды, что приводит к задержкам пользователей при запросе фидов.
3.3 Внедрение счетного центра
Сообщество отображает различные числа, такие как количество прочтений, комментариев и отметок «Нравится» на странице сведений о публикации, количество подписчиков пользователей, подписчиков и сообщений. Когда существует много типов подсчета и высокий уровень параллелизма, как реализовать подсчет данных, существуют следующие распространенные решения.
3.3.1 Традиционный метод подсчета
Например, выберите count(*) from post, где user_id = xxx, чтобы подсчитать количество пользовательских сообщений, а второй метод — это метод подсчета.
- преимущество
Метод подсчета прост в реализации и точен в статистике, а также подходит для служб с небольшим количеством и низким уровнем параллелизма.
- недостаток:
Один счет — это один счет, а для реализации бизнеса часто требуется несколько запросов.
3.3.2 Метод подсчета (внешнего) резервирования
Путем анализа бизнеса подсчета сообщества получается подсчет 2-х измерений.
- Пользовательский параметр: количество подписчиков, количество поклонников, количество постов, количество лайков и избранных.
- Параметры поста: количество прочтений, количество лайков, количество комментариев, количество избранных.
Показатели этих двух измерений можно хранить отдельно, добавляя атрибуты в таблицу пользователей и таблицу сообщений, или можно создать две новые таблицы, таблицу количества пользователей и таблицу количества сообщений.
- Чем при публикации поста вставить пост, обновить количество постов набор обновлений post_num = post_num ++, где user_id = xxx
- Запрос подсчета сообщений, выберите pv, like_num, comment_num из сообщения, где post_id = xxx
Этот метод является методом внешнего подсчета, и он также является методом резервирования данных.
-
преимущество
1、一次查询多种计数,一个维度计数无需多次查询 2、查询走主键索引,效率高
-
недостаток:
1、数据冗余,可能出现数据不一致情况 2、在高并发下,db 压力增大
3.3.3 Подсчет схемы внешнего улучшения
Для бизнеса сообщества мам с рисовым пирогом мы абстрагировали сервисный центр подсчета (сервис пузырей), подсчитывали в реальном времени через кеш Redis и периодически синхронизировали данные подсчета Redis с базой данных. Это позволяет избежать нагрузки, создаваемой высоким параллелизмом на базу данных, и в то же время улучшает возможность чтения и записи счетчиков.
3.4 Поиск сообщества
Предыстория бизнеса: поиск в сообществе путем ввода ключевых слов, выбора тегов, запросов к сообщениям, родительских знаний и т. д.
3.4.1 Выбор поиска:
InnoDB mysql5.6.4 и выше также представляет полнотекстовый поиск, который можно запрашивать напрямую через сопоставление.Решение простое, но встроенная сегментация слов и эффекты поиска могут не соответствовать требованиям. Или выберите более профессиональную поисковую систему elasticsearch, opensearch
3.4.2 Реализация синхронизации индекса
-
Полная синхронизация
历史数据同步,通过扫描全表,将数据同步到索引里
-
Инкрементная синхронизация
新增数据、或修改数据同步。 方案一:在业务代码中,将数据同步到索引 优点:实现简单,数据同步分散在业务中,有业务维护 缺点:耦合高,业务代码混乱,无法复用 方案二:通过监听数据库的 binlog 日志,将数据同步到索引 优点:解耦,可复用 缺点:引入了额外的框架,增加了系统的复杂度 最后我们采用第二种方案,通过引入canal,实现binlog订阅和数据同步
3.4.3 Индексный запрос
-
Используйте собственный API поисковой системы
Нужно узнать стоимость, каждому разработчику потребуется дополнительное обучение использованию API. Есть ли инструмент обучения, который нам не понадобится использовать
-
esqlParse собственной разработки
В сочетании с mybatis оператор sql транслируется в API поисковой системы, и реализуется индексный запрос.
Преимущества: снижение затрат на разработку и обучение, и для разработки необходимо написать sqlmapper только для реализации индексного запроса.
Недостатки: Функция не идеальна, некоторые сложные запросы не поддерживаются
3.5 Ощущение
Архитектура построена на вершине бизнеса, трудно сделать лучший, - это более эволюционная шаг за шагом. В этой статье есть много недостатков, и были другие проблемы не объяснять, мы приветствуем больше обменов!
Никомама: смеется ветер