File Backup System
RPA-инструмент для аварийного восстановления файлов из облачного сервиса. Java (API) + Go (воркеры). Корректная браузерная автоматизация.
4 Playwright-воркераФайлы до 1GB+FOR UPDATE SKIP LOCKED
Бизнес-задача
Public API облачного сервиса не поддерживает экспорт нативных файлов. Команда из сотен человек рискует потерять работу при сбоях или блокировках аккаунта.
Playwright эмулирует действия пользователя: открывает файл → экспортирует → стримит в S3. Ограничение частоты (1 файл/воркер), паузы как у человека. Инструмент для собственного контента компании.
Ключевая задача
Изолировать процессы Playwright с тяжёлым потреблением памяти от основного API, обработать большие файлы (1GB+) потоковой передачей в S3, избежать гонок данных при выборе задач из очереди.
Почему Java + Go
Изоляция ресурсов: Headless Chrome потребляет 500MB+ RAM на сессию и может утечь. OOM в браузере не должен убивать админку.
- •Java Backend: REST API, OAuth2, JPA ORM, сложная бизнес-логика (лицензии, роли, синхронизация)
- •Go-воркеры: изолированные процессы с Playwright. Падение воркера не влияет на API
- •Горизонтальное масштабирование: 1 API-сервер + N воркеров. Воркеры без состояния
Сервис загрузки (Go)
Пул воркеров с очередью задач на PostgreSQL.
- •4 воркера: каждый со своей Playwright-сессией
- •Очередь задач: SELECT ... FOR UPDATE SKIP LOCKED для атомарного захвата без гонок
- •Приоритеты: SCHEDULED → ERROR (повтор через 12 мин) → NONE/UPDATE
- •Стриминг в S3: файлы стримятся напрямую без загрузки в память (для файлов 1GB+)
- •Обработка ошибок: таймаут → повтор с экспоненциальной задержкой, лимит → адаптивная пауза
Java Backend
- •Синхронизация: импорт teams/projects/files через Public API + Browser для приватных данных
- •Управление лицензиями: массовый CSV-импорт, назначение ролей (Editor/Viewer), отслеживание сроков
- •Два аккаунта: обычный для чтения, admin для управления лицензиями (разделение обязанностей)
- •Пакетная обработка: Hibernate batch_size=250 для синхронизации сотен файлов
Технологии
Java Backend
Java 21Spring Boot 3.4Spring Security OAuth2Spring Data JPA
Go Workers
Go 1.23Playwright-gopgx/v5 (PostgreSQL)Viper (config)Logrus (logging)
Data
PostgreSQL 16LiquibaseS3 / Yandex Object Storage
Infra
Docker (multi-stage)Keycloak (OAuth2)GitHub ActionsYandex Container Registry
Моя роль
- Архитектура polyglot-системы с изоляцией ресурсов (Java API + Go-воркеры)
- RPA через Playwright с корректным обращением к сервису и ограничением частоты
- Очередь задач на PostgreSQL (FOR UPDATE SKIP LOCKED) без гонок
- Потоковая загрузка в S3 для больших файлов