Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Проект на 2-3 человек
Требуется реализовать прототип распределенной платформы для микроблогов
В качестве основной базы данных предлагается использовать MongoDB:-
  • сохранения сообщений с лайками

...

  • сохранения и обновления аккаунтов пользователей (авторов сообщений) с подписчиками и тех, на кого пользователь подписан
Для отображения ленты и поиска сообщений предлагается использовать ElasticSearchOpenSearch:-
  • полнотекстовый поиск сообщений

...

  • аналитика трендов: агрегация по тегам за указанную дату
Для быстрого отображения информации о пользователях (логин/имя пользователя/...) ленты новостей предлагается использовать распределенный кэш HazelcastПри редактировании аккаунта пользователя, блокировать его в Hazelcast для предотвращения конфликта.:
  • ключ: userId
  • значение: заранее подготовленный и отсортированный по дате список последних постов от авторов, на которых подписан пользователь.
  • обновление: асинхронное, при публикации нового поста все подписчики получают обновление в своей закэшированной ленте
  • Также можно использовать для кэша счетчика лайков для постов и других агрегатов


Данные аккаунтов и сообщения можно взять из дампа stackoverflow (или выкачать из твиттера).
За основу можно взять шаблон приложения на Spring Boot.

...

  1. Обсудить и согласовать модель данных предметной области (UserAccountUser, MessagePost)
  2. Реализация
    1. Класс - сервис для работы с MongoDB для
  3. Message
    1. Post(сохранение, получение по ID, управление подписчиками)
    2. Класс - сервис для работы с
  4. ElasticSearch
    1. OpenSearch (индексация, поиск по тексту,
  5. поиск
    1. агрегация по
  6. периоду
    1. тегам)
    2. Класс - сервис для работы с MongoDB для
  7. UserAccount
    1. User (сохранение, получение по ID)
    2. Реализация кэширования
  8. и блокировки UserAccount
    1. в Hazelcast
    2. Реализация загрузки данных из stackoverflow в систему с использованием реализованных сервисов (например, используя Apache Spark)
    3. Реализация REST API для классов из a,c
    4. Реализация REST API для классов из b (полнотекстового поиска)
  9. Интеграция
    1. Загрузка полного объема данных в кластер (не менее нескольких миллионов сообщений)
    2. Функциональное тестирование и исправление ошибок
    3. Тест на отключение отдельных узлов и восстановление связи с узлом
  10. Краткий отчет (постановка задачи, архитектура решения, результаты тестирования)