23.05.2025

Что новенького? Серверные сводки

Что новенького? Серверные сводки

Приветствую! )

Как я уже упоминал ранее, на ближайший месяц я немного замедлился с регулярными обновлениями. Но это вовсе не означает простой – за этот период я активно занимаюсь техническим долгом и кардинально обновляю архитектуру проекта.

Что происходит?

Изначально Stormic был монолитом на Next.js, где клиент и сервер жили в одном приложении. Это удобно на старте, но по мере роста проекта такой подход тормозит развитие: увеличивается сложность кода, растут задержки и все остальные прелести. Чтобы избавиться от накопленного долга, я разбиваю систему на две части:

  1. Тонкий клиент на Next.js – отвечает исключительно за рендеринг и базовую логику взаимодействия с пользователем.
  2. Толстый сервер на Go – вся бизнес-логика, обработка данных и интеграции выносятся на бэкенд.

Новый сервер: как работает?

  • Язык и производительность Сервер полностью переписан на Go – это даёт нам высокую скорость исполнения и низкое потребление ресурсов.
  • gRPC внутри Я выбрал gRPC для внутреннего API и связи между микросервисами. Благодаря бинарному протоколу сократились задержки и объёмы передаваемых данных.
  • REST-прокси для внешних интеграций Чтобы сторонние разработчики не ломали головы над gRPC, прямо поверх него работает REST-слой. Вы можете отправлять привычные HTTP-запросы, а сервер автоматически проксирует их во внутренний gRPC и обратно. Это вам понадобится, если вы в будущем захотите, например, написать бота который будет модерировать ваше сообщество.
  • OpenAPI и Swagger REST-эндпойнты документируются по стандарту OpenAPI. Генерируется удобная Swagger-документация – быстрое погружение в API и тестирование прямо из браузера.
  • GraphQL для клиента Внутренние запросы от клиента теперь идут по GraphQL. Это позволяет запрашивать ровно столько данных, сколько нужно, и сводит к минимуму избыточные обращения к серверу.
  • ORM Ent и PostgreSQL Для работы с базой данных используется мощный и типобезопасный Ent ORM.

Реальный прирост скорости

Одно из главных достижений – сокращение числа запросов.

  • Раньше: чтобы получить информацию о правах пользователя, шло до 6 REST-запросов.
  • Сейчас: один GraphQL-запрос возвращает всё сразу.

Аналогичная ситуация с отрисовкой хэдера: раньше задействовалось до 4х запросов (сам заголовок плюс два модальных окна), а теперь – всё в одном запросе. Благодаря этому клиент стал «тоньше» и реагирует на действия мгновенно.

Кэширование запросов

Добавлен многоуровневый кэш:

  1. Прямой запрос на сервер – для самых свежих данных.
  2. «Сначала кэш, потом сервер» – показываем данные из кэша, затем обновляем, если что-то изменилось.
  3. Только из кэша – не идём в базу, если нам важна скорость отображения, а данные уже есть.

Это гибкое решение позволяет в зависимости от задачи выбирать оптимальный режим.

Порты и маршрутизация

Сервер работает сразу на трёх портах:

  • 8080 → GraphQL Для внутренних запросов от клиента.
  • 4080 → REST HTTP Входящие REST-запросы превращаются в gRPC и обратно.
  • 4000 → чистый gRPC Для микросервисов и тех, кто готов работать напрямую по протоколу gRPC.

Что дальше?

На этом этапе архитектура сервера практически готова. Остаётся дописать на клиенте запросы под GraphQL и настроить обработку ответов – однотипная, но важная работа. Судя по планам, я даже +/- успеваю уложиться в отведённый месяц.

После полного перехода на новую бэкенд-часть запланированы:

  1. Личные сообщения и уведомления
  2. Улучшенная работа с изображениями
    • Кадрирование и выбор области показа.
    • Управление порядком отображения при загрузке нескольких картинок.

Спасибо, что следите за развитием Stormic! Впереди много интересного, и ваша поддержка вдохновляет меня двигаться дальше. До новых апдейтов!

Если вам нравится то, что тут происходит, то

Boosty

для вас и это невероятно мотивирует продолжать заниматься всем этим.
Не менее мотивирует и помогает, если вы будете рассказывать о Stormic другим людям везде, где это уместно.

0

133

Тут пока никого нет...

Загрузка комментариев...