Переход на GraphQL для повышения нагрузоустойчивости сервиса. Плюсы и минусы совместного использования NestJS и GraphQL на примере одного проекта
Программный комитет ещё не принял решения по этому докладу
Целевая аудитория
Тезисы
В рамках доклада подробно расскажу о том, как мы увеличили нагрузоустойчивость конкретного сервиса, переехав на GraphQL, и какие результаты получили.
Речь пойдет о сервисе хранения личных данных пользователей, который работает со всеми продуктами компании: количество объектов в БД — около 100 млн; RPS — до 1000, макс request duration time < 300 ms, поддержка масштабируемости. Сервис написан на NestJS microservices, в качестве БД используется Mongo DB.
Требовалось оптимизировать организацию хранения и получение различных объектов: личных данных, данных продуктовых договоров, данных внешних интеграций (например, с банками).
Прошлое решение строилось на уникальных JSON-маппингах под каждый уникальный запрос продукта, трансформирующие данные из базы данных в определенный формат. И не подходило в силу ряда факторов:
- Ограничения по нагрузке
- Слишком много узких мест
- Отсутствие нормальной валидации
- Отсутствие возможности оптимизации запросов к базе данных
С учетом всего этого требовался новый подход.
В качестве протокола общения с сервисом был выбран GraphQL. С его внедрением мы:
- Оптимизировали запросы к базе данных
- Увеличили скорость ответа сервиса
- Повысили нагрузоустойчивость
- Получили возможности для масштабирования
Рассмотрю весь цикл реализации и внедрения нового подхода в реальный проект: от выбора технологии до ее реализации на проде. Расскажу, чем не устроили готовые решения библиотек, какие доработки пришлось сделать и к чему всё это все привело.
Team Lead в Сравни. Опыт в разработке — 10 лет: преимущественно PHP и Node.js
Сравни
Видео
Другие доклады секции
Архитектура