2pdf.com — платформа для работы с PDF-файлами
2PDF
Цели
Задачи
- 1.Создать высоконагруженный сервис, который выдержит больше 10 000 000 посетителей в месяц.
- 2.Выйти в ТОП-10 поисковых запросов в самой конкурентной тематике, чтобы получить трафик, который распределяется между лидерами на первой странице в поисковой выдаче.
- 3.Создать для различных взаимодействий пользователей с PDF-файлами в одном месте более 20 микросервисов, которые не предоставляют другие сервисы и приложения.
Сложности
01. Сложный технологический стек
02. Автоматическое тестирование
03. Высокая нагрузка
04. Суперконкурентная тематика в SEO
05. Сложности с локальной разработкой
Процесс
Заложили в архитектуру MVP особенности, которые позволят нам выдерживать огромные нагрузки и быть гибкими для масштабирования. Кластер построили на Kubernetes, сборка проходила на Gitlab CI и поставлялась в собранных Docker-контейнерах. В разрабатываемом сервисе много асинхронности, и мы выбрали стек Node.js, а конкретно — NestJS + TypeScript, так как Express слишком примитивен, и наш опыт показывает, что он слабо подходит для сложных продуктов. Мы нарезали архитектуру на микросервисы для удобного масштабирования и разделения ответственности. Frontend стал независимым микросервисом. Сервис пользователей вынесли в отдельный блок, вспоминая о проблемах с канареечным тестированием и тарифами.
Приложение сделали на React и сразу заложили SSR, для которого решили не использовать NextJS, а реализовать рендеринг самостоятельно. Так как продукт за несколько месяцев запускала одна команда, мы выбрали подход с монорепозиторием. В качестве сервера очередей мы поставили RabbitMQ, кеш храним в Redis, а в качестве БД выбрали привычную MySQL.