Skip to content

NoSQL-team/noskool

Repository files navigation

noskool social network

Общая структура:

Main struct


Запуск

sudo docker-compose down --volumes sudo docker-compose up docker image prune

По структурно:

  1. HTTP-server — принимает http-запросы от клиента, передаёт роутеру очередей

  2. Queue router — делегирует запросы очередям (несколько очередей для уменьшения нагрузки на них, по сути инстансы одного класса)

  3. Service queue — очередь сервера, то же инстансы одинаковые

  4. Service auth — работает с токенами. Под его управлением БД с id всех пользователей и их токенами, если пользователь аутентифицирован, API:

  5. Service users — работает с данными пользователей. API:

    • Запрос на создание пользователя
      1. Создание его в БД
      2. Запрос auth сервиса на создание пользователя
    • Запрос на данные пользователя по id
      1. Проверка id
      2. id === id в запросе - все данные отдаём
      3. иначе только общедоступные
    • Запрос всех пользователей
      1. Запрос в БД
    • Запрос существует ли пользователь
      1. Запрос в БД
    • Запрос id пользователя по нику
      1. Запрос в БД
    • Запрос на изменение данных пользователя
      1. Проверка id
      2. Запрос в БД Swagger: https://app.swaggerhub.com/apis/lerakrya8/Users/1.0.0
  6. Service post — работает с постами. API:

    • Запрос постов для пользователя (Ленты)
      1. Запрос в friens сервис друзей пользователя
      2. Запрос в БД постов на основе выборки друзей
    • Запрос всех постов
    • Запрос постов пользователя
      1. Запрос в БД постов
    • Запрос на создание поста
      1. Проверка id
      2. Запрос в БД на создание
    • Запрос на изменение поста
      1. Проверка id
      2. Запрос на изменение поста в БД
    • Запрос на удаление поста
      1. Проверка id
      2. Запрос на удаление поста в БД
    • Запрос определённого поста из БД
  1. Service frends — работа с социальными отношениями между людьми. Скорее всего хранить как строку. API:
    • Запрос на изменение отношения с другим пользователем (add or delete)
      1. Запрос в БД на изменение (если id валиден)
    • Запрос на выборку друзей пользователя
      1. Запрос в БД друзей
    • Запрос на взаимоотношения между пользователями (один другому кто, друг, никто, подписчик)
      1. Запрос в БД друзей
    • Запрос на статистику пользователя (сколько друзей, подписоты, на сколько он человек подписан) 2. Запрос в БД (храним как счётчики, не считаем каждый раз)
    • Swagger: https://app.swaggerhub.com/apis/NoSql/FriendsServer/1.0.0

Протокол общения между серверами

Протокол схож с http. Первая строка запроса - номер запроса (номер определяется http-сервером), вторая - приоритетность, далее тип запроса, далее id пользователя, который послал запрос (он авторизирован, если -1 - то запрос анонимен), далее пустая строка, далее тело запроса если существует. Пример:

123423
/api/auth/add/
4

{
   "username": "Filechka322",
   "password": "qwerty",
   "id": 23
}

Если тела нет, то после id две пустые строки:

123423
/api/auth/add/
4


Каждый сервис сам определяет названия ручек (endpoint) и те данные, которые ему необходимы для осуществления запроса. Ответ от каждого сервиса приходит в отдельный сокет http сервера, то есть сервисы имеют сокет для связи с очередью и сокет для связи с сервером, из очереди достаём запрос, ответ кидаем в http-сервер. Пример ответа:

123423

{
   "response": "success create user"
}

Запрос сервиса на http:

/api/итдручка

{
   "username": "Filechka322",
   "password": "qwerty",
   "id": 23
}

Поток блокирует БД только если есть все данные для запроса в БД, иначе просто ждёт.

Неполадки на серверах можно «компенсировать» с помощью Null object pattern


Полезные ссылки:

  • JSONparser: юзаем из boost
  • PostgreSQL for C/C++: сайт
  • Swagger: для каждого сервиса в их описаниях

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published