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

Приветствую! )
Как я уже упоминал ранее, на ближайший месяц я немного замедлился с регулярными обновлениями. Но это вовсе не означает простой – за этот период я активно занимаюсь техническим долгом и кардинально обновляю архитектуру проекта.
Что происходит?
Изначально Stormic был монолитом на Next.js, где клиент и сервер жили в одном приложении. Это удобно на старте, но по мере роста проекта такой подход тормозит развитие: увеличивается сложность кода, растут задержки и все остальные прелести. Чтобы избавиться от накопленного долга, я разбиваю систему на две части:
- Тонкий клиент на Next.js – отвечает исключительно за рендеринг и базовую логику взаимодействия с пользователем.
- Толстый сервер на 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х запросов (сам заголовок плюс два модальных окна), а теперь – всё в одном запросе. Благодаря этому клиент стал «тоньше» и реагирует на действия мгновенно.
Кэширование запросов
Добавлен многоуровневый кэш:
- Прямой запрос на сервер – для самых свежих данных.
- «Сначала кэш, потом сервер» – показываем данные из кэша, затем обновляем, если что-то изменилось.
- Только из кэша – не идём в базу, если нам важна скорость отображения, а данные уже есть.
Это гибкое решение позволяет в зависимости от задачи выбирать оптимальный режим.
Порты и маршрутизация
Сервер работает сразу на трёх портах:
- 8080 → GraphQL Для внутренних запросов от клиента.
- 4080 → REST HTTP Входящие REST-запросы превращаются в gRPC и обратно.
- 4000 → чистый gRPC Для микросервисов и тех, кто готов работать напрямую по протоколу gRPC.
Что дальше?
На этом этапе архитектура сервера практически готова. Остаётся дописать на клиенте запросы под GraphQL и настроить обработку ответов – однотипная, но важная работа. Судя по планам, я даже +/- успеваю уложиться в отведённый месяц.
После полного перехода на новую бэкенд-часть запланированы:
- Личные сообщения и уведомления
- Улучшенная работа с изображениями
- Кадрирование и выбор области показа.
- Управление порядком отображения при загрузке нескольких картинок.
Спасибо, что следите за развитием Stormic!
Впереди много интересного, и ваша поддержка вдохновляет меня двигаться дальше. До новых апдейтов!
Если вам нравится то, что тут происходит, то
для вас и это невероятно мотивирует продолжать заниматься всем этим.
Не менее мотивирует и помогает, если вы будете рассказывать о Stormic другим людям везде, где это уместно.
133
Тут пока никого нет...
Загрузка комментариев...
Сейчас обсуждают
Загрузка комментариев...