Профессиональная конференция для Go-разработчиков

Переход на GraphQL для повышения нагрузоустойчивости сервиса. Плюсы и минусы совместного использования NestJS и GraphQL на примере одного проекта

Архитектура

API
MongoDB
TypeScript
Взаимодействие с серверной стороной (REST, GraphQL, gRPC)

Программный комитет ещё не принял решения по этому докладу

Целевая аудитория

Разработчики уровня middle+ и senior. Стек: JavaScript, TypeScript, NestJS microservices, API GraphQL, API NestJS/GraphQL + Apollo Server, БД MongoDB.

Тезисы

В рамках доклада подробно расскажу о том, как мы увеличили нагрузоустойчивость конкретного сервиса, переехав на GraphQL, и какие результаты получили.

Речь пойдет о сервисе хранения личных данных пользователей, который работает со всеми продуктами компании: количество объектов в БД — около 100 млн; RPS — до 1000, макс request duration time < 300 ms, поддержка масштабируемости. Сервис написан на NestJS microservices, в качестве БД используется Mongo DB.

Требовалось оптимизировать организацию хранения и получение различных объектов: личных данных, данных продуктовых договоров, данных внешних интеграций (например, с банками).

Прошлое решение строилось на уникальных JSON-маппингах под каждый уникальный запрос продукта, трансформирующие данные из базы данных в определенный формат. И не подходило в силу ряда факторов:

- Ограничения по нагрузке
- Слишком много узких мест
- Отсутствие нормальной валидации
- Отсутствие возможности оптимизации запросов к базе данных

С учетом всего этого требовался новый подход.

В качестве протокола общения с сервисом был выбран GraphQL. С его внедрением мы:

- Оптимизировали запросы к базе данных
- Увеличили скорость ответа сервиса
- Повысили нагрузоустойчивость
- Получили возможности для масштабирования

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

Team Lead в Сравни. Опыт в разработке — 10 лет: преимущественно PHP и Node.js

Сравни

Сравни — сервис для сравнения страховых, банковских и образовательных продуктов. https://www.sravni.ru/

Видео

Другие доклады секции

Архитектура