Архитектурная практика сообщества Rice Cake Mom

Redis задняя часть Архитектура поисковый движок
Архитектурная практика сообщества Rice Cake Mom

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 Ощущение

Архитектура построена на вершине бизнеса, трудно сделать лучший, - это более эволюционная шаг за шагом. В этой статье есть много недостатков, и были другие проблемы не объяснять, мы приветствуем больше обменов!

Никомама: смеется ветер